Il pin GPIO0 dell’ESP8266 non è un semplice pin di I/O in quanto funge anche, in fase di boot, a determinare come dovrà funzionare il processore, secondo questa tabella:
E’ evidente che lo stato logico del pin GPIO0 è estremamente importante in fase di boot, perchè se a 0 fa entrare il provessore in modalità di aggiornamento del firmware, bloccando di fatto il modulo.
Rimane ovvio, quindi, che tale pin non potrà essere utilizzato come un input in quanto al boot non siamo in grado di predeterminare che stato avrà l’ingresso, rischiando di mandare l’esp8266 in aggiornamento durante l’accensione. Anche utilizzandolo come output dovremo in ogni caso fare in modo che tale pin sia ad 1 logico in fase di accensione del modulo wifi per evitare il problema appena descritto. Un normale stadio a transistor NPN che pilota un relè, quindi, non farebbe al nostro caso perchè all’accensione farebbe trovare GPIO0 a 0 logico.
Questo stadio non funzionerà correttamente su GPIO0 in quanto che, a causa delle resistenze di base e della giunzione BE farà trovare a 0 logico il pin GPIO0.
Tale stadio andrà quindi modificato in questo modo:
Con questa modifica al boot avremo il pin GPIO0 ad 1 logico grazie alla rete R1 / R2 / Vbe.
Calcli alla mano avremo che nel punto di intersezione tra GPIO0 ed R1 ci saranno:
VR2+Vbe = IR2*R2+0,7
IR2 vale:
(3.3-0,7)/(R1+R2) = 2.6/4300 = 600uA
Sostituendo nella prima equazione:
2700*0.0006+0.7= 2.3V Valore sufficiente a rappresentare l’1 logico sul pin
Pro: semplice da realizzare, il relè può essere alimentato a qualunque tensione
Contro: quando il processore va in deep sleep il relè si eccita
Un’altra alternativa per un relè a 5V è usare un PNP:
Il circuito funziona grazie al fatto che i pin di I/O dell’esp8266 sono protetti con dei diodi verso massa e verso il positivo, quindi la corrente che fluirà dal +5V verso il pin a 3,3V si perderà attraverso tali diodi di protezione ed essendo molto bassa non danneggia assolutamente il chip.
Pro: semplice da realizzare
Contro: funziona in modalità negata(Pin a 0 logico = relè eccitato), non si può utilizzare con il deep sleep.
E se poi vogliamo a tutti i costi utilizzare tale Pin come input digitale (anche se sarebbe meglio non farlo) può venire in aiuto il seguente schema:
Grazie alla presenza del condensatore da 47uF, all’accensione il pin viene mantenuto ad 1.
Pro: semplice da realizzare
Contro: il condensatore limita la velocità di commutazione dell’ingresso.
ATTENZIONE: Anche GPIO02 non può rimanere allo stato basso durante il boot perchè ciò impedisce al modulo di continuare la fase di avvio. Quindi anche per tale pin valgono le stesse considerazioni viste sopra.
Ciao,
Ho acquistato un ESP01S su Aliexpress (https://it.aliexpress.com/item/ESP8266-ESP-01S-5-V-Rel-WiFi-Modulo-Cose-Smart-Home-Casa-Intelligente-Interruttore-di-Comando/32880024822.html).
Il problema è che all’avvio il relay si attiva per qualche ms. Ho provato con una resistenza da 10 Kohm a VCC ma niente. Cosa si può fare secondo te? Possibile vendano un dispositivo con un difetto del genere?
Grazie
Quel modulo spesso non funziona, nel senso che manda l’ESP8266 in modalità programmazione. In ogni caso non è possibile evitare, in maniera semplice, lo scatto del relè in quanto l’uscita utilizzata (gpio0) ha questo comportamento durante il boot.