• Lun. Apr 28th, 2025

ESP 8266

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

The etching on the shield reads: 'STM8S003 INSIDE'

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

schema collegamento

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

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.

Total Page Visits: 72 - Today Page Visits: 1