FONTE https://www.raspberryitaly.com
L’ ESP8266 si tratta si un SoC (System on Chip) prodotto dalla Cinese Espressif, contiene un microcontrollore, un modulo WiFi con stack TCP-IP completo. Sopratutto, ha un basso costo.
Ok, cosa è un microcontrollore?
Senza divagare troppo nel tecnico, possiamo dire che un microcontrollore (MCU), a differenza di un microprocessore (CPU) è meno raffinato, meno general purpose, più specializzato in un solo compito. Però questo consente di avere più componenti integrate (il processore, la memoria permanente, la memoria volatile e i canali di I/O), il che gli consente di funzionare con pochissimi (a volte nessun) componente esterno, mentre un microprocessore richiede una intera scheda madre e unità esterne, memorie, periferiche.
Nei microcontrollori il programma da eseguire viene memorizzato direttamente nella ROM, assieme al firmware. Quindi non è in grado (non necessita) di un sistema operativo, con i relativi vantaggi/svantaggi che questo comporta.
Tutto questo li rende molto economici quindi preferiti nelle applicazioni specifiche (calcolatrici, centraline di auto, modem, antifurti, elettrodomestici ecc ecc).
Storia
I microcontrollori esistono di ogni specie e versione, e fino a poco tempo fa non esisteva una configurazione standardizzata, e spesso i maker si creavano da soli la scheda con l’elettronica di contorno utile al loro funzionamento. Questo produceva un hardware diverso per ognuno. Proprio per questo nacque Arduino, che creava una scheda Open Hardware standard con microcontrollore Atmel, e fu un gran successo.
Poi nacque l’ESP8266, e il WiFi integrato è stata la sua arma vincente per distinguersi.
Vista proprio l’estrema economicità, produttori di terze parti hanno incominciato a commercializzare piccoli moduli che montavano ESP8266, ottenendo subito (verso il 2014) un grande successo presso le comunità dei maker.
E’ un SoC pensato per la produzione industriale (piccolo, i pin non hanno un passo standard, sono pensati per il montaggio SMD) quindi per usarlo a livello hobbystico più facilmente, è indispensabile averlo montato su una scheda con elettronica di contorno più o meno completa.
Versioni di ESP8266
Questo ha generato una marea di versioni in commercio differenti, di queste schedine.
Le varianti più diffuse sono quelle prodotte da AI-Thinker, nominate ESP-01 , ESP-02, fino a ESP-14, ma ne esistono diverse di altri produttori, più o meno equivalenti.
Si differenziano tra loro per le caratteristiche costruttive: il tipo di antenna del WiFi, la certificazione FCC o meno, la quantità di memoria, la presenza o meno di adattatori usb/seriali a bordo, il numero di Pin attivi.
I prezzi sono irrisori: se comprate in Cina si va da 1,5 Euro per ESP-01 alle 3 Euro scarse per la scheda di sviluppo più completa con ESP-12E, ma i tempi di consegna sono oltre il mese (più vicino ai 60 giorni); in Italia, fate più o meno il doppio dei prezzi, ma potete comprare da Amazon.
GPIO
Si, l’ESP2866 ha dei pin liberi, programmabili dall’utente finale. un vero e proprio GPIO, e qui cominciano a notarsi le somiglianze con Raspberry Pi. Su questi pin sono disponibili I2C, SPI, UART, diversi pin ingressi/uscite digitali programmabili, e un ingresso analogico con ADC a 10 bit.
Caratteristiche
- RISC CPU a 32-bit: Tensilica Xtensa LX106 funzionante a 80 MHz*
- 4Kb di memoria RAM per le istruzioni e 96Kb di memoria RAM per i dati
- stack TCP/IP e la possibilità di collegarsi alle reti wifi b/g/n
- supporto per un Flash RAM esterna da 512Kb a 4Mb a seconda della versione, in cui viene memorizzato il programma
- 16 GPIO (anche se non su tutti i moduli sono utilizzabili tutti e 16)
- UART / I2C / I2S/ SPI / 1 modulo ADC a 10bit
* su alcune versioni, overcloccate, la CPU può funzionare a 160Mhz e la Flash RAM a 80Mhz (invece di 40)
Confusi? Non è ancora finita: per ogni versione Hardware, è possibile montare svariate tipologie di firmware completamente differenti, che cambiano in toto il modo in cui viene gestita la scheda e il linguaggio che useremo per comunicare con essa o per programmarla:
Firmware
Infatti, oltre al firmware di fabbrica di Espressif che utilizza i comandi AT per comunicare con il chip, sono stati sviluppati altri firmware alternativi che permettono di sfruttare molto meglio le potenzialità di questo piccolo gioiello tecnologico:
Eccone alcuni, tra quelli Open Source:
- NodeMCU: firmware basato sul linguaggio Lua
- Arduino: firmware basato su C++. permette di programmare l’ESP8266 e la componente WiFi come fossero un Arduino. Disponibile su GitHub.
- MicroPython: un port di MicroPython (una versione di Python per microcontrollori).
- ESP8266 BASIC: un Basic Open Source adattato per l’IoT (Internet of Things).
- Zbasic for ESP8266: Un sottoinsieme del diffuso Visual basic 6 di Microsoft, adattato a linguaggio per i microcontrollori della serie ZX e per l’ESP8266.
- Mongoose Firmware: un firmware open source con servizio cloud gratuito
- Open RTOS
ok, ma alla fine, che ci faccio?
L’ESP8266 può essere utilizzato in almeno in due modalità principali: come scheda a sé stante, o come accessorio per il nostro Raspberry.
Vediamo prima quest’ultima: può essere configurato per fare da bridge USB/seriale – Wifi, per trasformare le connessioni seriali o USB in connessioni Wifi senza fili in modo da far acquisire la funzionalità wireless a qualche dispositivo che già usate con Raspberry Pi (controller, centraline varie, apparecchiature industriali..). Oppure è perfetto per raccogliere i dati di diversi sensori e trasferirli via Wifi al Raspberry, o viceversa fare da Hub wireless per diversi attuatori (relè, motori..).
Uso “stand-alone”: avete sviluppato e ottimizato il vostro progetto di physical computing con Raspberry? Bene, perchè sprecare così il Raspberry Pi? Probabilmente, nella maggior parte dei casi, quel compito lo può svolgere anche ESP8266, basterà adattare il vostro programma, e con Python potrebbe essere anche meno complicato che portare pace e armonia nel mondo.
Implementazioni quali quelle che leggono sensori, comandano relè e LED, ma anche che pilotano display o gestiscono interfacce web, possono tranquillamente essere portate su ESP2866, con evidente risparmio di denaro e con una realizzazione meno delicata e più adatta all’ uso embedded (non c’è la SD, il programma andrà a risiedere nella ROM) e più compatta.
Le dimensioni assai contenute e la capacità di connettersi via WiFi, rendono questa scheda perfetta per le applicazioni di domotica: facile da integrare negli impianti esistenti essendo poco ingombrante e non richiedendo cablaggi per la rete ethernet cablata. Per gli stessi motivi, è perfetta anche per le applicazioni nel campo dell’IoT (Internet of Things). Inoltre, è possibile comandarla via smartphone con apposite app.
HARDWARE
ESP-WROOM-02 By Espressif Systems
ESP-01
Note: Alcuni di questi moduli sono dotati di resistori limitatori di corrente con valore errato (47Ohm vs 4.7KOhm). Ciò di solito porta il LED di potenza a sparire in una nuvola di fumo.
ESP-02
ESP-03
Pin | Name | Alternate Functions | Notes |
---|---|---|---|
1 | GND | ||
2 | NC | ||
3 | UTXD | SPICS1, GPIO1, CLK_RTC | Tipicamente usato come seriale uart0 TX |
4 | URXD | I2SO_DATA, GPIO3, CLK_XTAL | Generalmente utilizzato come UART0 RX seriale |
5 | GPIO16 | XPD_DCDC, RTC_GPIO0, EXT_WAKEUP, DEEPSLEEP | Collegato al pin ESP XPD_DCDC, può anche essere collegato al pin ESP EXT_RSTB (reset) chiudendo il jumper vicino al pin 8; Il pin di reset è attivo basso e ha un pull-up interno debole; È necessario il collegamento del ponticello per riattivare l’ESP da deep-sleep: RTC produce impulsi sul pin XPD_DCDC che deve essere inserito nel pin EXT_RSTB |
6 | CH_PD | Power-down: basso input power down chip, alta potenza; legare in alto per il normale funzionamento o il modulo non funzionerà | |
7 | ANT | Wifi Antenna, | |
8 | VCC | 3.3V input (il pin 8 si trova tra antenna e chip ESP) | |
9 | GPIO14 | MTMS, I2SI_WS, SP_CLK | |
10 | GPIO12 | MTDI, I2SI_DATA, MISO | |
11 | GPIO13 | MTCK, I2SI_BCK, MOSI | |
12 | GPIO15 | MTDO, I2SO_BCK, SP_CS | All’avvio: deve essere basso per accedere al flash o all’avvio normale (l’alto entra nelle modalità di avvio speciali) |
13 | GPIO2 | I2SO_WS, U1TXD, U0TXD | All’avvio: deve essere in alto per inserire il flash o il boot normale (il basso entra nelle modalità di avvio speciali); In genere viene utilizzato come TX uart1 per la registrazione di debug |
14 | GPIO0 | SPICS2, CLK_OUT | All’avvio: basso fa sì che il bootloader entri in modalità di caricamento flash; alto provoca un avvio normale |
ESP-04
ESP-05
ESP-06
ESP-07
ESP-08
ESP-09
ESP-10
ESP-11
ESP-12
ESP-12F
ESP-12-E/Q
FLASH SDIO
ESP Pin | Func | Alternate Functions | Flash pin | Err by bimbo385 |
---|---|---|---|---|
18 | SDIO_DATA_2 | [SPIHD] | pin 7 [!HOLD] | 3(!WP [IO2]) |
19 | SDIO_DATA_3 | [SPIWP] | pin 3 [!WP] | 7(!HOLD [IO3]) |
20 | SDIO_CMD | [SDIO_CMD] | pin 1 [!CS] | |
21 | SDIO_CLK | [SPICLK] | pin 6 [CLK] | |
22 | SDIO_DATA_0 | [SPIQ/MISO] | pin 2 [DO] | 5 (DI [IO0]) |
23 | SDIO_DATA_1 | [SPID/MOSI] | pin 5 [DI] | 2 (DO [IO1]) |
ESP-12S
ESP-13
ESP-14
WT8266-S1 By Wireless-Tag
Board ID | #Pins | Pitch | Form factor | LEDs | Antenna | Ant.Socket | Shielded | Dimensions mm | Flash Size in Bytes and (bits) |
---|---|---|---|---|---|---|---|---|---|
ESP-01 | 8 | 0.1“ | 2×4 DIL | Yes | Etched-on PCB | No | No | 14.3 x 24.8 | 512KB (4Mb) ×× |
ESP-02 | 8 | 0.1” | 2×4 notch | No? | None | Yes | No | 14.2 x 14.2 | 512KB (4Mb) × |
ESP-03 | 14 | 2mm | 2×7 notch | No | Ceramic | No | No | 17.3 x 12.1 | 512KB (4Mb) × |
ESP-04 | 14 | 2mm | 2×4 notch | No? | None | No | No | 14.7 x 12.1 | 512KB (4Mb) × |
ESP-05 | 5 | 0.1“ | 1×5 SIL | No | None | Yes | No | 14.2 x 14.2 | 512KB (4Mb) × |
ESP-06 | 12+GND | misc | 4×3 dice | No | None | No | Yes | 16.3 x 13.1 | 512KB (4Mb) × |
ESP-07 | 16 | 2mm | 2×8 pinhole | Yes | Ceramic | Yes | Yes | 21.2 x 16.0 | 1MB (8Mb) ×× |
ESP-07S | 16 | 2mm | 2×8 pinhole | No | None | Yes | Yes | 17.0 x 16.0 | 4MB (32Mb) |
ESP-08 | 14 | 2mm | 2×7 notch | No | None | No | Yes | 17.0 x 16.0 | ?? (please fill if you know) |
ESP-08 New | 16 | 2mm | 2×8 notch | No | None | No | Yes | 18.0 x 16.0 | ?? (please fill if you know) |
ESP-09 | 12+GND | misc | 4×3 dice | No | None | No | No | 10.0 x 10.0 | 1MB (8Mb) |
ESP-10 | 5 | 2mm ?? | 1×5 notch | No | None | No | No | 14.2 x 10.0 | 512KB (4Mb) * |
ESP-11 | 8 | 1.27mm | 1×8 pinhole | No? | Ceramic | No | No | 17.3 x 12.1 | 512KB (4Mb) * |
ESP-12 | 16 | 2mm | 2×8 notch | Yes | Etched-on PCB | No | Yes | 24.0 x 16.0 | 4MB (32Mb) ?? |
ESP-12F | 22 | 2mm | 2×8 notch | Yes | Etched-on PCB | No | Yes | 24.0 x 16.0 | 4MB (32Mb) |
ESP-12E | 22 | 2mm | 2×8 notch | Yes | Etched-on PCB | No | Yes | 24.0 x 16.0 | 4MB (32Mb) |
ESP-12S | 16 | 2mm | 2×8 notch | Yes | Etched-on PCB | No | Yes | 24.0 x 16.0 | 4MB (32Mb) |
ESP-13 | 18 | 1.5mm | 2×9 | ? | Etched-on PCB | No | Yes | 20.0 x 19.9 | 4MB (32Mb) |
ESP-14 | 22 | 2mm | 2×8 + 6 | 1 | Etched-on PCB | No | Yes | 24.3 x 16.2 | ?? (please fill if you know) |
ESP-201 | 22+4 | 0.1” | 2×11 + 4 | 2 | Etched-on PCB ××× | Yes | No | 33.5 x 25.5 | 512KB (4Mb) |
WROOM-02 | 18 | 1.5mm | 2×9 | No | Etched on PCB | No | Yes | 20.0 x 18.0 | ?? (please fill if you know) |
WT8266-S1 | 18 | 1.5mm | 3×6 | 1 | Etched on PCB | No | Yes | 15.0 x 18.6 | 4MB (32Mb) |
Collegare ESP8266
Abbiamo due strade per poter comunicare con il microcontrollore del nostro ESP8266: o via Wifi, o collegandoci via seriale da un computer. Questa seconda via serve anche per installare uno dei vari firmware alternativi che permettono di usare in maniera molto più amichevole questa piccola scheda.
Vediamo quindi di approfondire questa strada, ma… Andiamo con ordine:
Materiale necessario al collegamento
Nel caso in cui, come consigliato nelle precedenti puntate, vi siate procurati un modulo NodeMCU, saltate pure al capitolo Collegamento USB, in quanto possiede già, a bordo della scheda, tutto quel che serve al suo funzionamento e programmazione: un convertitore da 5V a 3,3V, per potere usare la tensione della USB e un adattatore USB / seriale, in modo da alimentare e comunicare con il modulo semplicemente collegando un comune cavetto USB – microUSB , tipo quello per cellulari, tra il pc e la Nodemcu..
Per gli altri modelli e versioni, o comunque per completezza, continuate invece a leggere:
Parlando in linea generale, per collegare via cavo un ESP8266 al computer, serve una porta seriale.
Quindi, o possedete un vecchio computer dotato di seriale (volendo Raspberry ha la seriale su GPIO) o sarà necessario un adattatore da USB a seriale TTL. Il modulo dovrà essere alimentato anche a 3,3V in corrente continua, dovrete quindi trovare il modo più pratico per farlo (anche qui Raspberry può essere utile, offrendo tale tensione sul suo GPIO, ma occhio agli assorbimenti in corrente).
Avete quindi necessità di risolvere questi due problemi (alimentazione e seriale). Si possono usare due piccoli circuiti: un convertitore DC/DC e un adattatore seriale/USB TTL.
Il primo serve a ottenere i 3,3V in corrente continua da tensioni continue più semplici da ottenere con batterie o alimentatori, come quelli USB da parete, diffusi e economici, per alimentare il nostro modulo nel suo funzionamento. Il secondo serve per poter programmare l’ESP dalla USB. Esistono convertitori che forniscono anche la tensione di 3,3V, per alimentare il modulo durante la programmazione dello stesso sempre tramite la USB. Esempi da Amazon:
convertitore dc-dc
adattatore USB seriale
Fate particolare attenzione a non dare mai 5V (o comunque più di 3,3V) alla scheda, sia in alimentazione, sia con la connessione dati (alcuni adattatori, come quello linkato sopra, hanno un ponticello per selezionare la tensione). Altrimenti la danneggereste in modo irriparabile!
Modalità di boot
I moduli realizzati con ESP8266 possono essere avviati in 2 (anzi 3) modalità di funzionamento diverse, a seconda dei segnali forniti a specifici pin al boot:
- Bootloading (o UART): è la modalità per caricare firmware e programmi dalla seriale
- Usage (o FLASH): il chip esegue il programma caricato nella memoria
Esisterebbe una terza modalità: SDIO, in cui dovrebbe eseguire quanto caricato su una scheda SD, ma non ho trovato un modulo ESP dotato di slot SD e forse non è supportata nemmeno dai firmware.
Per selezionare la varie modalità, si deve fare in modo che alcuni pin siano a livello logico ALTO, BASSO o non collegati (NC). Occorre tenere conto di questo se si dispone di pochi pin e li si vuole utilizzare anche nella fase di funzionamento.
Modalità | GPIO 0 | GPIO 2 | GPIO 15 |
---|---|---|---|
Bootloading – UART | BASSO | NC o ALTO | BASSO |
Uso – FLASH | ALTO | NC o ALTO | BASSO |
SDIO | NC | NC | ALTO |
Ove non ci fosse il GPIO15 (MTDO). come su ESP-01 che ha solo 8 piedini, la tabella di rifetimento è questa:
Modalità | GPIO 0 | GPIO 2 |
Bootloading – UART | BASSO | ALTO |
Uso – FLASH | ALTO | ALTO |
La scheda tipo NodeMCU non necessita, invece, di collegamenti particolari ai pin: è dotata di due micro pulsanti: RST (per resettare la scheda) e FLASH (per impostarla in programmazione firmware. In realtà, questa modalità viene ora gestita automaticamente via software, non è quindi necessario, limitatamente a questa versione, fare collegamenti particolari o premerei il tasto, per flashare firmware e programmi).
Collegamento USB
Bene, ora, perchè il pc riconosca il dispositivo, occorre prima installare il driver dell’adattatore seriale / USB utilizzato. Nel caso del kit di sviluppo Nodemcu è già a bordo della scheda, e molto probabilmente sarà il CH341, scaricabile qui, altrimenti potreste avere altri tipi di adattatore, non è molto importante il tipo, basta che installiate il driver corretto per il chip contenuto nel vostro adattatore, dopodichè il computer lo riconoscerà come una porta seriale supplementare.
Verificate come viene nominata questa porta seriale su USB: vi servirà poi per impostare la connessione.
Software
Quindi, se avete collegato il vostro ESP8266 alla USB del pc, tramite cavi o adattatori vari, ci serve ora del software per comunicare con esso.
Terminale
O, per esteso, “programma di emulazione terminale su porta seriale”. Ve ne sono moltissimi, il funzionamento è praticamente lo stesso per tutti: va impostata la porta, la velocità e i parametri di connessione. Dopodichè si potrà “parlare” con il vostro modulo o scheda ESP8266. Scegliete quindi quello che più vi aggrada, alcuni sitemi operativi ne hanno uno di serie, io consiglio MobaXterm perchè, oltre a fare da terminale seriale, consente di connettersi anche in SSH/MOSH, ha SFTP, server grafico X11 e editor integrati.. Insomma è uttilissimo anche nell’uso con RaspberryPi.
Comunque, qualsiasi sia il vostro terminale, impostatelo per usare la porta seriale corretta (spesso presa in automatico), velocità 115200 baud (su alcuni modelli, come i miei, tale modalità non funziona, dipende dalla versione del firmware, nel caso, provate 9600 o 57600), 8 bit, bit di stop 1, nessuna parità e nessun controllo degli errori.
Con questi parametri, provate a connettervi. Se ottenete un errore di connessione, controllate i collegamenti al modulo e all’adattatore, se lo avete utilizzato.
Se invece vi connettete ma non ottenete nessuna scritta, probabilmente siete sulla buona strada.
Usate il reset per farla ripartire e leggere eventuali intestazioni.
Come interagire con l’ESP8266, dipende dal firmware che ha a bordo. Infatti, nel firmware c’è l’interprete dei comandi. Ne esistono diversi, tra cui comandi AT (default del produttore), Nodemcu (che usa il linguaggio lua, default delle schede Nodemcu), Micropython, Basic, Visualbasic, Arduino, ecc..
Voi scrivete un comando, date invio, e l’ESP scriverà la risposta, come se steste chattando con un amico (o forse un bot) lontano. Ad esempio, nel caso del firmware del produttore (AT) basterà digitare AT per ricevere “Ok”.
Oppure print “ciao” o print (“ciao”) ti faranno salutare dall’ ESP8266 rispettivamente in lua (firmware Nodemcu) o in MicroPyton.
I comandi AT del firmware di default non rendono molta giustizia a questo Hardware, relegandolo a un lontano parente di un modem.. Anche se permettono, volendo, di effettuare richieste HTTP GET, che sono sufficienti a usare un servizio cloud per l’IoT come ThingSpeak. Però, è grazie ai firmware alternativi che questo piccolo gioiellino esprime il suo meglio. Dobbiamo quindi imparare bene come caricare i vari firmware.
Addirittura può capitare che il vostro modulo non abbia alcun firmware a bordo.
Vediamo allora che si va a scrivere un firmware (e i programmi) nella memoria dell’ESP8266.