ESP8266-12e NodeMcu – Prime impressioni

esp8266

 

E’ la mia prima scheda del tipo ESP8266, quindi appena mi è arrivata ho voluto cominciare a sperimentarci sopra per capire cosa ci sia di differente dalle schede di tipo Arduino. E’ completa di tutto ciò che serve per cominciare a programmarla, nel senso che una volta collegata tramite la presa micro-usb al computer e caricate le opportune estensioni della IDE di Arduino è praticamente pronta per l’uso.

Io ho utilizzato come IDE la versione ufficiale 1.6.5 scaricata dal sito arduino.cc, ovvero la penultima disponibile. L’ultima versione, la 1.6.6 mi risulta abbia ancora dei problemi (verificati di persona) e preferisco aspettare ancora prima di utilizzarla. Per quanto riguarda il caricamento delle estensioni per ESP8266 si può fare riferimento a questa ottima guida reperibile al link:

https://www.reboot.ms/forum/threads/programmare-esp8266-usando-arduino-ide.385/

La guida si riferisce alla versione di IDE per Windows, ma la procedura relativa al Mac è esattamente la stessa e altrettanto immagino per Linux. Nello specifico, usando io generalmente solo macchine Apple ho potuto verificare che non c’è alcun bisogno di installare driver aggiuntivi per il dialogo con la scheda, questa almeno. Negli altri casi ovviamente non posso esprimermi.

NOTA: Ho ispezionato la scheda e il chip più grande vicino alla micro-usb risulta essere un CH340 , quindi ho visto subito le porte seriali solo perché ho questo driver già installato grazie agli Arduino Nano di produzione cinese.

 

Ecco come è stata riconosciuta nel mio caso (OS X) la scheda:

Schermata 2015-12-26 alle 20.53.13

Alcune considerazioni di tipo generale: la scheda viene normalmente alimentata dalla presa micro-usb con una tensione di 5V ma internamente, tramite un regolatore di tensione, il voltaggio di riferimento viene portato a 3.3 V. Quindi i livelli digitali 0 e 1 faranno riferimento a quest’ultimo voltaggio. Il consumo di corrente, essendo la scheda dotata di un modulo Wi-Fi, è ovviamente maggiore rispetto ad un Arduino Nano o Micro, e questo ne limita un po’ l’utilizzo con batterie esterne. D’altronde è il prezzo da pagare per il collegamento Wi-Fi “vero”.

Di pin digitali per il collegamento di sensori nelle varie modalità I2C, SPI, PWM o semplice I/O su un singolo segnale ce ne sono in abbondanza direi. Per ora ho avuto modo di provare solo l’I2C, che risulta programmabile, nel senso che nella inizializzazione da codice della libreria Wire è possibile assegnare i pin GPIO dedicati alla funzione SDA e SCL.

In sostanza si tratta di dare un comando:

Wire.begin(4, 5); // Inizializza come SDA = GPIO4(D2) e SCL = GPIO5(D1)

all’interno della funzione Setup(). La prima cosa che salta all’occhio è che è sempre bene riferirsi ai pin digitali in termini di GPIO piuttosto che ai pin fisici. Nelle funzioni si passeranno i valori GPIO.

Ecco lo schema dei pin dell’ESP8266-12e NODE-MCU

Schermata 2015-12-25 alle 23.07.53

Un’altra cosa inquietante che si nota subito è che di ingressi analogici ce ne è uno soltanto, denominato appunto A0. Come se non bastasse ho scoperto che il voltaggio di riferimento per il pin A0 non è di 3.3 V come ci si potrebbe aspettare, ma spazia solamente tra 0 e 1 Volt. Questo significa che per poter utilizzare questo ingresso va implementato un partitore di tensione per non saturare l’entrata con valori maggiori di 1V e minori di 3.3V, che darebbero in ogni caso un valore convertito a 1023 falsando il comportamento del sensore.

Credo di aver letto da qualche parte che è possibile “multiplexare” questo unico ingresso analogico (chissà, forse con un meccanismo simile a quello dell’I2C, con gli address, non ho idea per il momento) ma mi pare comunque di capire che gli ESP8266 non “amano” molto i sensori analogici.

Un’altro problema che ho verificato personalmente dopo qualche giorno di utilizzo è che tutte le 3 schede che ho attive mostravano una certa instabilità: in modo del tutto casuale dopo qualche ora o minuto di funzionamento “sparivano” dalla rete non dando più segni di vita. In un primo momento ho pensato che il problema fosse dovuto a disconnessioni del modulo Wi-Fi dovute alla debolezza del segnale, e ho inserito negli sketch il codice per la riconnessione automatica in caso di sgancio. Il problema non si è risolto per cui ho deciso di lasciare almeno un ESP collegato al Pc in modo da rendermi conto sull’output della seriale cosa stesse succedendo.

A questo punto ho visto il dump tipico di un vero e proprio crash:

In poche parole il crash del codice causava un SOFT RESET, che nonostante il reboot spontaneo della scheda non riusciva a far ripartire la connessione Wi-Fi perché evidentemente lo stato della ESP era ancora instabile (qualche problema con il memory heap ad esempio, non risolvibile se non con un hard reset).

Ovviamente la pressione del tasto reset (HARD RESET) sulla scheda faceva ripartire lo sketch, che inevitabilmente crashava poco dopo.

Posso capire una scheda difettosa nell’hardware, ma 3 su 3 mi sembrano un po’ troppo. Quindi è partita la caccia sui Forum e infatti ho trovato alcuni thread illuminanti tipo questo:

https://github.com/esp8266/Arduino/issues/428

Consiglio agli interessati di leggerlo tutto, ci sono gli interventi di varie persone che hanno questo tipo di problematica, e si ipotizzano problemi legati forse al memory heap o a direttive date al compilatore non propriamente corrette. In poche parole l’instabilità risiederebbe nelle librerie di compilazione fornite attualmente per queste schede (non solo la 12e, si parla anche della 07 e via dicendo) che avrebbero ancora dei bug piuttosto rilevanti.

Problemi non ancora risolti naturalmente, anche nel mio caso dove nei moduli ESP è installato il recente SDK 1.3.0 e nella IDE di Arduino le estensioni 2.0.0.

Fatto sta che tra le varie prove consigliate nel thread si diceva di attivare la modalità di DEBUG per avere un output migliore nei crash dump e io così ho fatto. Ho inserito quindi negli sketch, oltre alle chiamate alle “solite librerie” questo codice:

Ebbene, da quel momento in poi i crash non si sono verificati più, o almeno posso dire che gli sketch girano da più di 48 ore e sono ancora lì perfettamente funzionanti. Ovviamente non si tratta di un caso. L’accensione in modalità debug avrà cambiato le direttive (errate) al compilatore? Avrà influito sulla gestione della memoria per cui non ci sono più corruzioni dell’heap? Probabile, posso solo ipotizzare…… e aspettare che comunque diano più stabilità al compilatore di queste schede, comunque molto interessanti.

Un’ultima cosa ancora. C’è ancora qualche problema con i path di alcuni file include (quelli con l’estensione .h per intenderci). Ad esempio la libreria per i sensori DHT scaricata dal forum arduino.cc non compila perché non trova il file avr/pgmspace.h

Questo infatti non si trova nel path “giusto” e va copiato a mano. La libreria Adafruit invece funziona subito. Non mi risulta poi che ci sia ancora una libreria diretta ESP – MySql, quindi l’uso del PHP piazzato su un Web Server è d’obbligo. Poco male, risulta anche più semplice e meno oneroso in termini di memoria.

 

 

6 pensieri riguardo “ESP8266-12e NodeMcu – Prime impressioni”

  1. Ottimo articolo, mi stavo muovendo anche io verso la esp8266-12 dopo avere fatto alcune prove su esp8266-01.
    Un domanda, che tipo di scheda hai preso e , se possibile, dove la hai acquistata. In rete, infatti, esistono varie offerte anche diverse l’una dall’altra.
    Grazie.
    Antonio

    1. Ciao Antonio,
      quelle che vedi citate nei miei articoli sono le ESP8266-12e vendute da Bangood, più precisamente la cosiddetta V2. Il prezzo si aggira intorno ai 6 euro, o qualcosa di meno. Il chip per la comunicazione seriale-usb è il CH340 (il più comune tra i cinesi) , ma ne esistono versioni dotate del CP2102 o anche FTDI. Quindi, produttore a parte, ciò che distingue questi 12e è la versione (V1, V2, ed ora anche V3) e il bridge usb a bordo. Con Linux e Windows vanno bene tutti, il mio iMac fa un po’ il matto con il CH340 a differenza dei MacBook Pro.
      Poi come avrai avuto modo di leggere, ci sono schede ancora più piccole come le Wemos D1 mini, che vanno altrettanto bene. Va tenuto conto nei propri progetti che sono schede piuttosto “affamate” di corrente, per cui in alcuni casi (leggi alimentate con batterie) vanno usate in “deep sleep mode” e che per utilizzare più di un sensore analogico per volta va usato un chip multiplexer oppure un circuito equivalente ed effettuare manualmente l’attivazione dei vari canali.

      1. Grazie!
        Ho ordinato anche io da Bangood la scheda per fare un po di prove e sulla Wemos sono assolutamente d’accordo su quanto hai detto.
        Complimenti per il tuo sito…a proposito è previsto un articolo sul collegamento tra Arduino e Raspberry?
        Antonio

  2. Ciao , complimenti per la guida all’esp 8266 , io mi chiamo massimo , e da poco mi sto avvicinando a questo fantastico mondo dei microcontrollori, per le mani mi e capitato un nodemcu v3 , ora girovagando per la rete , vedendo gli sketch e qualcosa di mia , ho messo su un webserver per il momento che accende e spenge un led , il tutto è perfettamente funzionante , finche dopo un po tipo dopo la nottata, tutto si blocca , leggendo la tua guida è successo anche a te , anchio avevo provato a far riavviare il nodemcu dopo un tot di tempo ma niente. Perche ho visto che staccando l’alimentatore e poi riattaccandolo riparte il tutto alla perfezione.
    Ora ho provato a inserire nello sketch le righe che hai scritto , ma continua lo stesso problema, devo fare qualcosa prima ?
    Le ho provate tutte anche con il watching dog ma niente.
    Mi potresti aiutare per favore ?

  3. Ciao Massimo,

    innanzitutto l’alimentazione. Queste schede hanno bisogno di un’alimentazione “pulita”. Il tuo alimentatore potrebbe avere qualche problema (ripple elevato, ecc.). Prova ad alimentare la scheda sulla presa microusb con i 5V provenienti da un powerpack per cellulari, oppure per esempio con 4 stilo ricaricabili (4,8 V ci siamo quasi) o dalla presa USB di un computer. Insomma togliti per primo questo dubbio. Dal momento che mi sembra che tu abbia già provato ad inserire il codice di debug che usavo sulla V2, a quel punto rimarrebbe un problema dovuto all’hardware o ad un firmware mal programmato. In ogni caso per compilare usa sempre l’ultima versione della IDE di Arduino, dopo aver controllato sul forum ufficiale che non ci siano bug macroscopici con le schede ESP.

    1. Ciao, innanzitutto grazie mille per avermi risposto, allora ho provato a lasciarlo attaccato alla porta del pc , il codice di debug si l’ho provato, la versione ide di arduino e l’ultima , leggevo che alcuni avevo problemi e con l’ultima versione l’hanno risolti , ma anche cosi non va. facendo la stessa cosa con uno sketch scritto con lua, il programma non si blocca , pero nascono 2 problemi 1 con lua non so proprio come programmare , con arduino anche se sto agli inizi qualcosina so fare. Poi il problema piu grande e che staccandolo il programma si arresta e non parte piu. Senti posso scrivere qui lo sketch per vedere se qualcosa non va in quello ?

Lascia un commento