ESP8266 & GPIO0 – Problematiche

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:

boot table
Tabella di boot e stato GPIO

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.

npn relè
Stadio pilota NPN

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:

Pilota relè
Pilota NPN modificato

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:

Pilota PNP
Pilota PNP 5V

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:

Input GPIO0
Rete di input per GPIO0

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.

2 Risposte a “ESP8266 & GPIO0 – Problematiche”

    1. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.