Per quelli che non sappiano cosa sia l’ESP8266, lasciamo di seguito una breve introduzione:

L’ESP8266 è un modulo Wifi dotato di Input/Output General Purpose e processore ARM. Compatibile con arduino e attualmente tra i più economici e piccoli sul mercato. E’ molto utilizzato attualmente nel campo dell’Internet of Things.

In questo articolo non parleremo di Arduino perchè l’ESP8266 è di fatti autonomo e dotato di pin digitali proprio come l’arduino. Parleremo esclusivamente dell’ESP, introducendo le tipologie esistenti di questo modulo e mostrando come caricarvi sopra un firmware.

Tipologie di ESP8266 e caratteristiche tecniche

Sono disponibili una gran varietà di moduli esp8266 e board costruite sulla base di questo modulo.
Le tipologie di ESP8266 attualmente esistenti sono mostrate nella tabella che segue:

esp8266 model comparisons

Si differenziano sostanzialmente per dimensione, quantitativo di memoria interna e numero di pin GPIO disponibili. Molte hanno l’antenna stampata sulla stessa PCB.

ESP-01

ESP01v0

E’ forse il più popolare dei moduli, tuttavia non sempre il più conveniente da utilizzare. Con le sue dimensioni (24.75mm x 14.5 mm) entra benissimo in qualsiasi tipo di contenitore. E’ dotata di due pin GPIO che possono essere utilizzati per controllare delle periferiche. Con un cablaggio adeguato e l’adattatore serial-to-usb è possibile appunto caricarci su dei firmware alternativi.
Di default è consegnato con una delle differenti versioni del firmware AT che permette di usarlo anche in combinazione con Arduino. Uno dei più grandi problemi di questa board è forse la disposizione dei pin che rendono impossibile un piazzamento diretto sulla breadboard per la prototipazione. Le due file di pin infatti sono troppo vicine fra di loro. In ogni caso è possibile ugualmente usare il modulo su breadboard utilizzando degli appositi cavetti jumper female-to-male.

ESP-05

ESP-05

Questo modulo è veramente semplice da usare, ed ha un solo scopo: essere utilizzato come shield wifi per Arduino o micro-controllori simili. Ci sono differenti versioni disponibili: una versione a 4 pin che possiede solamente 3.3v, GND, RX e TX. Con quest’ultime si effettua la comunicazione con Arduino. Altre versioni hanno un pin addizionale di reset che permette un reset manuale o programmatico del modulo.
Il modulo ha solo una fila di pin maschi e quindi si piazza facilmente su breadboard. Di contro non si può caricare un firmware personalizzato, ma si è limitati a quello di default (non tutte le board possiedono inoltre la stessa versione del firwmare), se si volesse cambiare firmware si dovrebbero modificare alcune piste e saldarne di nuove.

ESP-12

ESP-12

Questo modulo permette l’accesso a molte caratteristiche dell’ESP8266: 11 pin GPIO, un convertitore analogico-a-digitale (ADC) con una risoluzione di 10 bit. Permette di configurare facilmente la modalità sonno-profondo che (secondo le specifiche) permette di alimentare il modulo per 3 anni con sole 2 batterie AA.
Di contro: non è breadboard-friendly affatto. Come per i moduli precedenti l’antenna è stampata sulla PCB. Per poterci prototipare è necessario costruirsi un “adattatore” per poterlo collegare facilmente alla breadboard oppure acqusitarne uno dei tanti già in commercio.
Un’altra soluzione è quella di acqusitare direttamente delle board di prototipazione basate sull’ESP-12.

NodeMCU devkit board

Se vogliamo qualcosa di già pronto e immediato da cui partire, senza dover perdere tempo a ordinare da internet i vari componenti per alimentare l’ESP, interfacciarlo al PC, e collegarlo su breadboard, possiamo optare per un Devkit di NodeMCU. Ovvero una board basata sull’ESP8266-12E, con regolatore di tensione e chip seriale integrato.
Mostrata in foto nella sua ultima versione 1.0:

NodeMCU_DEVKIT_1.0

Questo modulo è in qualche modo abbastanza differente dai moduli descritti in precedenza. Ha già tutto l’occorrente necessario per iniziare a lavorarci. Possiede un adattatore serial-to-usb con connessione micro USB, da cui viene alimentato e programmato.
Due interruttori posti sulla board inoltre permettono il reset del modulo e il booting nella FlashMode per poter cambiare firmware. Inoltre si piazza facilmente su Breadboard.
Nelle prime versioni (0.8 e 0.9) la board aveva ancora qualche incompatibilità con alcuni sistemi come Mac. Dovuti soprattutto al chip seriale e ai driver.
Con l’ultima versione (1.0) il chip seriale è stato sostituito e la board è molto più stabile.
Il costo della board è leggermente superiore alle altre, parliamo di 8 euro, contro i 3/5 per i moduli visti sopra.
Tuttavia forse è la miglior scelta per chi vuole iniziare ad usare questo fantastico modulo ESP8266. Specie per chi realizza prototipi. Una volta terminato il prototipo infatti si può pensare di salvare il software, assemblare i componenti hardware esterni e passare ai moduli più economici.

Ho testato personalmente questa board sia con il firmware NodeMCU che con quello per l’IDE di Arduino. La board nella nuova versione 1.0 incorpora un modulo ESP-12E con 4 mb di memoria flash e qualche GPIO in più!
Se paragonata alla board 0.9 è più stretta, questo gli permette di non occupare tutto lo spazio sulla breadboard e lasciare 1 fila di pin liberi su ogni lato (con la versione 0.9 questo non era possibile).
Un’altra bella caratteristica è il fatto di non dover schiacciare il tasto reset/flash usando l’Arduino IDE per caricare una nuova versione del vostro codice. E’ già tutto gestito automaticamente dalla board. Con questa nuova versione è possibile anche aumentare la velocità di trasferimento a 921600 baud, l’upload dei file è pressocchè istantaneo.

Sotto, mostriamo un’immagine della mappa dei pin:

NodeMCU DevKit Board

Quale board scegliere?

Quale modulo meglio si adatta al vostro caso dipende sicuramente dal vostro progetto. Se il prezzo e le dimensioni contano in ciò che state realizzando, e 2 pin vi sono sufficienti allora l’ESP-01 è il giusto candidato. Se volete ottenere una connessione Wifi per il vostro Arduino potete optare per l’ESP-05. Mentre l’ESP-12 è sicuramente la scelta più azzeccata se avete bisogno di un gran numero di GPIO o se volete comunicare con periferiche tramite SPI o I2C. Se invece volete rendere le cose quanto più semplici possibili e il prezzo leggermente più alto non è un problema, raccomanderei sicuramente il modulo NodeMCU v1.0.

Iniziamo

In questa trattazione useremo il modello più economico e diffuso sul mercato, l’ESP-01, ciò nonostante per pochi dollari in più è possibile acquistare la variante con 12 pin (ESP-12).

Tutte le board viste fin’ora possono essere acquistate per una manciata di dollari su ebay, da venditori cinesi. Le spedizioni son quasi sempre gratuite e i prezzi molto molto competitivi se paragonati al mercato europeo.

Connettere l’ESP8266 al PC

Connettere il modulo ESP al PC è un processo abbastanza rapido, che necessita di un adattatore serial-to-usb. Di solito in rete tutti consigliano il chip FTDI. E noi faremo altrettanto. E’ diffuso e quindi abbastanza economico. E’ raffigurato nell’immagine che segue:

ftdi serial to usb

Notate come l’adattatore abbia un piedino rimovibile, attraverso il quale possiamo scegliere il voltaggio di comunicazione con la periferica. I moduli ESP8266 lavorano esclusivamente a 3.3V. Quindi è importante assicurarsi prima di effettuare il collegamento che il piedino sia posto nella posizione corretta in modo da erogare esattamente 3.3V e non 5V.

E’ acquistabile tranquillamente da questo venditore su ebay.

Tenendo presente la mappa dei pin dell’ESP-01:

esp8266-pinout-pin-map

Andiamo a effettuare questo collegamento:

esp8266 ftdi

Assicurarsi che il pin GPIO-0 sia connesso a GND. Questo è necessario solamente durante il Re-Flash del firmware. Se vogliamo caricare uno script ed eseguirlo sul modulo, GPIO-0 non va collegato a GND.

Scelta del firmware

E’ possibile flashare la board con uno dei tanti firmware disponibili e reperibili in rete.
Eccone alcuni:
– MicroPython
– AT (firmware del produttore)
– NodeMCU
etc..

Il firmware scelto da noi è NodeMCU. Un firmware open-source che permette di prototipare e realizzare prodotti legati al mondo dell’Internet of Things con poche linee di codice Lua.

Scrivere una rom come NodeMCU all’interno dell’ESP permette di sfruttare a pieno tutte le caratteristiche del micro-controllore: SPI, UART, PWM, I2C, GPIO e tanto altro..

E’ possibile scaricare una versione del firmware customizzata in base alle nostre esigenze, escludendo dunque i moduli non necessari e risparmiando preziosa memoria sulla board, dal sito NodeMCU custom build.

L’alternativa è di scaricare il firmware direttamente dalla repository ufficiale nella versione completa (float oppure integer, a seconda di quali tipi di valori useremo).

Come caricare il firmware sull’ESP8266?

Flashare il firmware è abbastanza facile, grazie ad un’app appositamente concepita per questa procedura.

Il software in questione è chiamato NodeMCU Flasher. Reperibile gratuitamente nella versione 32 bit o 64 bit dalla Repository GitHub ufficiale.

Scaricato il firmware (.bin) e scaricato NodeMCU Flasher, possiamo collegare il modulo ESP al PC tramite l’adattatore seriale e iniziare con la procedura, seguendo quanto mostrato sotto:

  • Assicuratevi che il GPIO-0 sia connesso al GND
  • Apriamo NodeMCU Flasher e verifichiamo che la board venga riconosciuta sulla porta seriale (COM3 nel mio caso):
    NodeMCU-flasher-part1
  • Nella scheda Config andiamo a selezionare come prima voce il file .bin del firmware scaricato in precedenza (location: 0x00000).
    NodeMCU-flasher-part2
  • Torniamo nella scheda Operation e avviamo la procedura facendo click su Flash (F)
  • Aspettiamo che la barra di completamento arrivi al 100%. La procedura perchè vada a buon fine deve arrivare al 100%, se si interrompe prima qualcosa non va.
  • Se tutto è andato per il meglio vedremo una spunta verde in basso a sinistra nella finestra:
    NodeMCU-flasher-part3

Se il modulo non viene riconosciuto dopo un minuto o più, probabilmente avete un problema con la connessione o con i driver UART (TTL).
Dopo che la procedura di flashing è stata portata a termine, potete disconnettere il pin GPIO-0 dal GND e provare a connettervi al modulo ESP usando Putty oppure un editor realizzato appositamente per lavorare con l’ESP e NodeMCU, chiamato ESPlorer.

Durante la connessione con ESPlorer o in generale con un terminale seriale, è possibile che la board non venga riconosciuta. Talvolta è sufficiente disconnettere e riconnettere l’unità seriale. Per evitare questi problemi qualcuno suggerisce di usare un’alimentazione ausiliaria per alimentare il modulo e non lo stesso adattatore seriale.

Se volete provare, consiglio l’utilizzo di un normale alimentatore da muro, 5V 1A dovrebbe essere sufficiente, e poi uno stepper down, modello LM2596, che serve a regolare la tensione a 3.3V (siete voi a scegliere il voltaggio d’uscita, quindi munitevi di tester e di cacciavite per regolare il potenziometro).
L’uso di uno stepper down non è obbligatorio ma legato al fatto che trovare a buon mercato alimentatori da parete che eroghino direttamente 3.3V 1A è abbastanza difficile. Non provate ad alimentare il modulo a 5V, lo danneggiereste.

Nei prossimi articoli vedremo alcuni esempi di codice in Lua per interagire con l’ESP8266, dunque connetterci al Wifi o pilotare un led.