Breve impulso su relè boot ESP8266

Ciao a tutti,
ho realizzato un apricancello con ESP8266 e le librerie fauxmoESP e SinricPro.
La prima versione l'ho realizzata con una Wemos D1 + scheda relè (livello LOW per eccitare) ed ho avuto il problema che durante il boot eccitava il relè per pochi decimi di secondo ma sufficienti a fare aprire il cancello. Per risolvere il problema ho utilizzato un BD139 con l'emettitore collegato a massa ed il collettore collegato all'ingresso della scheda relè, all'uscita di Wemos D1ho dovuto utilizzare una resistenza da 1kohm tra PIN e massa e poi ho utilizzato una resistenza da 47kohm tra PIN e base del BD139, in questo modo ho risolto. Ovviamente la logica si è invertita e per eccitare il relè devo portare il PIN su HIGH.
Ora devo miniaturizzare tutto quindi ho comprato una schedina relè in cui si innesta una piccola scheda ESP8266 ESP-01S qui non ho la possibilità di interporre un transistor se voglio lasciare la scheda ESP8266 innestata sulla scheda relè quindi ho nuovamente il problema.
Ad esempio, il seguente sketch mi eccita il relè per pochi decimi di secondo durante il boot.

#define PIN_1 0

void setup() {

  digitalWrite(PIN_1, HIGH);

  pinMode(PIN_1, OUTPUT);

  digitalWrite(PIN_1, HIGH);

}

void loop() {

}

Ho anche provato ad aggiungere un digitalWrite prima di pinMode per cercare di risparmiare un po' di tempo ma non ha funzionato.

C'è un modo per risolvere via software?

Usa un pin diverso dallo 0, sul perchè leggi qui.

Ciao, Ale.

Ciao, grazie per la risposta, con Wemos D1 ho potuto provare gli altri PIN ma l'unica soluzione che ha funzionato è stata sola resistenza di pulldown + transistor.
La nuova scheda che vorrei utilizzare per miniaturizzare è questa ESP8266-01S Relais la schedina ESP8266 porta al connettore solo i pin 0, 2, TX, RX ma la scheda relè utilizza solo il pin 0.
Potrei provare a mettere una resistenza da 1kohm tra pin 0 e +3.3V.

Hai fatto bene.

Facendo digitalWrite e usando gpio4 o gpio5 dovrebbe funzionare. AFAIK altri pin hanno fluttuazioni durante il boot.

Si tratta di un problema noto di quella scheda, documentato qui.
La mia soluzione è stata quella di aggiungere un ATtiny13a programmato per troncare qualsiasi fluttuazione inferiore a 150 ms. Poiché il problema si verifica solo all'avvio, si potrebbe ritardare l'attivazione della tensione di pilotaggio fino a quando l'ESP non si è avviato correttamente, oppure si può aggiungere un condensatore supplementare come ha fatto l'utente che ha aperto la discussione.

Ho collegato la schedina ESP8266 alla schedina relè tramite cavi Dupont così ho potuto testare tutte e 4 le uscite a disposizione. IO0, IO1, IO2 fanno eccitare il relè per pochi decimi di secondo. IO3 (RX) invece funziona correttamente.

Quindi con IO3 ottengo il risultato atteso, ovvero il relè prima di 2 secondi non da nessun segno di vita poi inizia a lampeggiare.

void setup() {

  pinMode(3, OUTPUT);

  digitalWrite(3, HIGH);

  delay(2000);

}

void loop() {

  digitalWrite(3, HIGH);

  delay(500);

  digitalWrite(3, LOW);

  delay(500);

}

Ho dissaldato il connettore, ho sfilato il pin IO0 e sul PCB della scheda relè ho ponticellato IO0 con IO3 ed ora sembra funzionare.

Il metodo più semplice è modificare il BL aggiungendo l'inizializzazione delle uscite e dei eventuali registri seriali collegati alla mcu, ovviamente il BL sarà dunque personalizzato per quell' applicazione, oppure come si faceva una volta a livello hardware abilitando la potenza sulle uscite e l'output enable nei registri seriali solo DOPO il bootloader e l'inizializzazione