ESP32 ed uso del GPIO1 come output per WS2812

Ciao a tutti, ho un progetto nel quale ho dei led WS2812 connessi per la linea dati al GPIO1 di un ESP32. Come da riferimenti del pinout, il GPIO1 viene utilizzato come pin di output debug in fase di boot; se non utilizzo le funzionalità previste per le strip WS2812B tutto a posto, mentre se inizio ad utilizzarle mi ritrovo con l'ESP32 che si riavvia per conto proprio..
Qualcuno mi sa dare una mano? Forse basta qualche accortezza per poterlo utilizzare?
Grazie mille

Senza il tuo codice non credo di poterti aiutare. I messaggi di debug inviati su quel pin probabilmente non hanno molto a che fare con esso. Per favore posta anche uno schema. Tieni presente che solitamente il GPIO 1 (TX) è collegato anche a qualunque convertitore da USB a TTL sia presente sulla scheda.

Perdonami, ma la domanda è indipendente dal codice..
Banalmente, mi capita tranquillamente anche con l'esempio standard della libreria NeoPixel: caricando il codice sull'ESP32 utilizzando come pin per la strip WS2812B il GPIO1, l'ESP32 si riavvia per conto proprio; omettendo il setup delle strip e l'uso di esse, si comporta normalmente.
Il codice è esattamente quello dell'esempio NeoPixel, ovvero questo:

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// Released under the GPLv3 license to match the rest of the
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
#define PIN        1 // On Trinket or Gemma, suggest changing this to 1

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 16 // Popular NeoPixel ring size

// When setting up the NeoPixel library, we tell it how many pixels,
// and which pin to use to send signals. Note that for older NeoPixel
// strips you might need to change the third parameter -- see the
// strandtest example for more information on possible values.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}

void loop() {
  pixels.clear(); // Set all pixel colors to 'off'

  // The first NeoPixel in a strand is #0, second is 1, all the way up
  // to the count of pixels minus one.
  for(int i=0; i<NUMPIXELS; i++) { // For each pixel...

    // pixels.Color() takes RGB values, from 0,0,0 up to 255,255,255
    // Here we're using a moderately bright green color:
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));

    pixels.show();   // Send the updated pixel colors to the hardware.

    delay(DELAYVAL); // Pause before next pass through loop
  }
}

Sullo schema elettrico, ad ora non ce l'ho ma anche qui c'è poco da dire: il GPIO1 dell'ESP32 è connesso al DIN dei diodi LED, con massa comune e positivi separati (3,3 volt per l'ESP, 5 volt per i led)

Per quanto riguarda i convertitori USB-TTL invece c'è da dire che non sono presenti su scheda, in quando uso un chip ESP32 nudo e crudo, non una board

Purtroppo GPIO01 è uno di quei pin che sono usati dal sistema ESP32 all'avvio ...
... o lo separi, che so io, con un mosfet che piloti da software con cui colleghi il pin DOPO l'avvio (nel setup) oppure ... ti tocca cambiare pin.

Guglielmo

Ciao, grazie!
Tuttavia la striscia è sempre connessa, a patto di non utilizzare i comandi di uso di essa l'ESP non ha problemi pur avendo le connessioni...
Forse, basterà mettere l'init delle strisce nel loop e non nel setup, con un opportuno "marchingegno" per richiamarlo una volta sola?

Mmm ... stavo guardando:

... quel pin è usato al boot come pin di "debug", come TX :roll_eyes:

Ma non puoi sceglierne uno che è sempre utilizzabile?

Guglielmo

I messaggi di avvio inviati dall'ESP32 dovrebbero essere abbastanza facilmente terminati nel momento in cui pixels.begin(); viene chiamato, ma in realtà la loro trasmissione potrebbe non essere stata completata. Hai provato ad aggiungere un piccolo ritardo() prima della chiamata a Begin() ?
Pertanto non utilizzo mai la libreria neopixel su un ESP32 ma potrebbe esserci un conflitto lì. Utilizzo invece Makuna Neopixelbus.h, anche se mai su GPIO 1 poiché vorrei mantenerlo disponibile per i messaggi di debug. Solo per assicurarti che non ci siano problemi XY qui, perché vuoi usare GPIO 1?