ESP8266 e Arduino - Guida
ESP8266 e Arduino - Guida
ESP8266 e Arduino - Guida
ESP8266 è un chip che offre connettività wi-fi ed un intero stack TCP/IP. Esso si può usare
in due modi:
Quando si decide di sfruttare un ESP per il proprio progetto, la prima decisione da prendere
riguarda dunque quale delle due configurazioni adottare. Ecco qualche considerazione per
aiutarvi nella scelta:
● L’ESP è più veloce a livello di clock (80/160 MHz contro 16) ed ha a disposizione
maggiori risorse hardware (64+96 kB di RAM contro 2, 512 kB/4 MB/8 MB di flash
contro 32 kB).
● L’ESP funziona a 3.3V, il che vuol dire che la massima tensione su tutti i suoi ingressi
non può superare questa soglia. Arduino funziona normalmente a 5V. Valutate le
tensioni di lavoro degli altri componenti che volete utilizzare.
● L’ESP ha un solo ingresso analogico, contro i 6 di Arduino. Alcuni modelli di ESP,
addirittura non espongono nemmeno il relativo pin! Per di più il fondo scala del
convertitore analogico-digitale dell’ESP dipende dalla scheda precisa che andrete ad
utilizzare, per cui è necessario documentarsi. Si possono comunque utilizzare
componenti esterni per superare questa limitazione.
1
Modelli di ESP
Nella pratica, il chip ESP8266 si presenta in varie forme, quasi equivalenti nella pratica ma
che presentano alcune differenze. Una piuttosto importante è la dimensione della memoria
flash: infatti, su questi chip tale memoria è esterna, e dunque può avere dimensione
variabile. Si tratta di un aspetto più importante nel caso vogliate usare la configurazione
standalone, ma ha un suo rilievo anche nell’utilizzo con Arduino. In questo contesto è bene
segnalare che le dimensioni di queste memorie sono spesso espresse in megabit, invece
che in megabyte. Per passare da un’unità all’altra basta ricordare che 1 byte = 8 bit, per cui:
Moduli singoli
Questi modelli sono costituiti dal minimo indispensabile per far funzionare l’ESP e sono
quindi particolarmente consigliati per l’utilizzo in coppia con Arduino.
● ESP-01: Il modello più comune, ma anche uno dei più scomodi da utilizzare, in
quanto difficilmente inseribile su una breadboard, a causa della disposizione dei suoi
pin. Possiede un’antenna integrata sul PCB.
● ESP-05: Modello ridotto ai minimi termini, presenta solo i pin di alimentazione e di
comunicazione, disposti tutti in linea e per questo è molto comodo per l’utilizzo su
breadboard. Possiede un connettore per un’antenna esterna, necessaria in quanto
non ne ha una sul PCB. Unico svantaggio: non è possibile aggiornare il firmware.
● ESP-07: Modello “a francobollo”, per cui difficilmente usabile su breadboard senza
saldarlo su un adattatore. Richiede un’antenna esterna. Esiste anche il modello
ESP-07S, leggermente più piccolo.
● ESP-12: Sostanzialmente come lo -07 ma con antenna integrata sul PCB. Esistono
anche i modelli ESP-12E e -12F, con differenze minime.
Per maggiori dettagli sui vari modelli è possibile consultare questa pagina.
Schede complete
Questi modelli sono costituiti da un modulo ESP e da componentistica di supporto (a
cominciare da una porta USB per la programmazione), per cui sono più adatti per l’utilizzo
standalone.
2
● NodeMCU: Scheda basata sull’ESP-12 che arriva con un firmware che ne consente
la programmazione in Lua, ma che è comunque programmabile a piacimento.
● Amica e LoLin: Cloni della NodeMCU, consultare questa pagina per maggiori
dettagli.
● WeMos D1: Accoppia un ESP alla classica forma delle schede Arduino.
● WeMos D1 Mini: Poco più grande del solo “francobollo”, risulta adatta dove lo spazio
è ristretto. È inoltre a disposizione una serie di shield con sensori, display e altre
periferiche direttamente impilabili sul modulo.
● WeMos D1 Mini Pro: Come la Mini ma con 16 MB di memoria flash.
I prodotti Wemos sono acquistabili direttamente dal produttore sul loro negozio AliExpress.
Se invece preferite il fai-da-te, è importante sottolineare innanzitutto che in giro per la rete ci
sono molte guide che trascurano completamente questi due punti, ma si tratta
assolutamente di un errore che, a lungo termine può danneggiare l’ESP e Arduino. Basta
studiare il datasheet del chip per convincersene, per cui ignoratele e tenete presente quanto
segue:
● Segnali: l’ESP ed Arduino vengono collegati tramite una porta seriale. Quella dei
modelli più comuni di Arduino (Uno, Nano, Leonardo, Micro e Mega) lavora a 5V,
mentre quella dell’ESP a 3.3, dunque non è possibile collegarli direttamente. In
questo caso la soluzione ideale è quella di usare un level shifter, componente
esterno dal costo estremamente accessibile:
3
In alternativa è possibile cavarsela anche qua con qualche diodo.
Se la soluzione con i diodi vi aggrada, seguite lo schema che segue, che mostra come
collegare un ESP-01 ad Arduino Uno, ma che è facilmente adattabile a qualunque modello
delle due schede. Tenete presente che il modello dei diodi non è troppo importante, se ne
avete a disposizione altri rispetto a quelli indicati, provateli e misurate le tensioni risultanti
per assicurarvi che siano nel range ammesso.
Una volta collegato in qualche modo il tutto, potete dedicarvi al lato software. Qua è
fondamentale capire che se state usando Arduino Uno o Nano, questi gestiscono in
hardware un’unica porta seriale e, di norma, questa è utilizzata per il monitor seriale: tutti i
messaggi che vedete sullo schermo del vostro PC passano di lì. Siccome sviluppare
un’applicazione complessa senza avere idea di cosa stia succedendo non è esattamente
banale, è meglio trovare una soluzione alternativa: in vostro soccorso viene la libreria
4
SoftwareSerial (inclusa in Arduino), che vi permette di “emulare” una porta seriale aggiuntiva
usando due pin qualunque (o quasi). Ad esempio potete usare i pin 6 e 7, collegate questi
rispettivamente ai pin TX e RX dell’ESP.
Se invece usate Arduino Leonardo, Micro o Mega, questi hanno a disposizione più di una
porta seriale, per cui dovrete identificarne una e collegare lì RX e TX dell’ESP, incrociandoli
(RX va a TX e viceversa). In questo caso potrete sfruttare appieno la velocità dell’ESP e
comunicare a 115200 bps!
Fatto anche questo, non vi resta che installare la libreria WiFiEsp e divertirvi con i suoi
esempi. L’interfaccia di programmazione è molto simile a quella della libreria WiFi/WiFi101
ufficiale, nonché a quella Ethernet, per cui il suo utilizzo dovrebbe essere immediato.
● Sul modulo non è caricato un firmware che supporta i comandi AT (ovvero i comandi
con cui WiFiEsp “pilota” l’ESP
● Se state usando la SoftwareSerial, la seriale dell’ESP potrebbe essere impostata ad
una velocità non adatta.
Per risolvere entrambi i problemi è necessario che vi muniate di una periferica aggiuntiva,
ovvero un convertitore USB-Seriale, che vi consiglio di comprare insieme all’ESP, dato che
comunque se ne trovano a prezzi più che accessibili (~1€) e che vi tornerà spesso utile. Si
tratta di un aggeggio del genere:
5
Non c’è un modello particolare da consigliare, l’unico requisito è che lavori a 3.3V, visto che
l’ESP lavora a questa tensione, come ormai dovrebbe essere chiaro.
3.3V 3.3V
GND GND
RX TX
TX RX
Aggiornare il firmware
I firmware AT sono scaricabili dal forum di Espressif. Prendete il più recente, salvatelo sul
vostro PC e scompattatelo. Al momento della scrittura, il più recente disponibile è l’1.1.
Per mettere l’ESP in modalità flash, dovete premere il tasto FLASH presente sulla scheda
PRIMA di collegare il convertitore USB-Seriale al PC e mantenerlo premuto mentre la
collegate. Se il vostro modulo non ha tale pulsante, dovrete identificare il pin GPIO0 e
collegarlo a GND.
Windows
TBD
6
GNU/Linux
Il tool universale per manipolare l’ESP su GNU/Linux è esptool.py. Per installarlo dovrebbe
bastare un singolo comando:
esptool.py è scritto in Python, per cui dovrete avere installato sul sistema l’interprete di tale
linguaggio, versione 2.7, 3.4 o più recente. Esso richiede inoltre la libreria pySerial, versione
2.5 o più recente.
Il firmware dell’ESP è composto da più parti, ognuna delle quali deve essere flashata ad un
ben preciso indirizzo, dipendente dalla dimensione della memoria flash del vostro modulo.
Se non siete certi di quanta flash possiede il vostro modulo, lanciate il seguente comando:
esptool.py flash_id
Manufacturer: c8
Device: 4013
Visto che la procedura è piuttosto tediosa, una volta che siete riusciti a risalire alla
dimensione della flash del vostro modulo, fareste bene a segnarla da qualche parte sul
modulo stesso!
Il passo successivo consiste nell’aprire il file README.md disponibile nella cartella /bin/at
del firmware che avete scaricato e cercare la configurazione adatta alla vostra flash. Ad
esempio, per una 32 Mbit:
7
Per le flash da 32 Mbit c’è anche una seconda configurazione, chiamata 32Mbit-C1. La
differenza tra le due non è chiara, eventualmente provatele entrambe, se avete problemi.
Cercate la configurazione tra quelle BOOT MODE, a meno che non abbiate un modulo
particolarmente vecchio con poca flash, che forse potreste recuperare con il firmware
NON-BOOT MODE. La differenza è che quest’ultimo non è aggiornabile via wireless, cosa
che comunque potrebbe tornare poco utile.
Finalmente siete pronti per effettuare il flash. Utilizzando i dati ricavati costruite un comando
simile al seguente e lanciatelo, assicurandovi di trovarvi nella cartella /bin/at:
esptool.py write_flash \
0x00000 'boot_v1.5.bin' \
0x01000 512+512/user1.1024.new.2.bin \
0x3fc000 esp_init_data_default.bin \
0x7e000 blank.bin \
0x3fe000 blank.bin \
-fs 32m -fm dio -ff 40m
OS X
In linea di massima la procedura per OS X non dovrebbe essere troppo diversa da quella
per GNU/Linux. In caso di problemi potete consultare questa pagina.
Questo si può fare con un semplice comando AT. Per eseguirlo, collegate l’ESP al
convertitore USB-Seriale e collegate il tutto al PC. Questa volta non dovrete premere il
pulsante FLASH durante il collegamento. Ora vi serve un emulatore di terminale: ve ne sono
parecchi (minicom, picocom, dterm…
), ma forse il più semplice è screen. Lanciate da un
terminale:
8
ATTENZIONE: A questo punto, molte procedure riportano il comando AT+IPR=9600 che
però ha l’effetto collaterale di RENDERE INUTILIZZABILE IL MODULO, a meno di non
riflashare il firmware!
AT+UART_DEF=9600,8,1,0,0
Dopo aver lanciato il comando, il terminale potrebbe dare l’impressione di bloccarsi. Questo
succede perché il modulo ha cambiato velocità ma il terminale ancora no. Pertanto uscite da
screen premendo CTRL+A e quindi Q, e ricollegatevi a 9600 bps:
Una volta portato a termine questo passo selezionate il vostro modello di ESP nel menù
delle schede e… avete finito! D’ora in poi potrete programmare l’ESP esattamente come
fareste con qualunque scheda Arduino. Molte librerie sono direttamente compatibili e la
maggior parte degli sketch richiedono modifiche banali per funzionare. Si consiglia di dare
un’occhiata agli esempi inclusi nel core per tutte le particolarità del caso.