Recentemente ho ricevuto una coppia di moduli Wifi ESP8266-01.
Questo modulo e’
un piccolo transceiver Wifi per progetti Arduino, Raspberry o altri ambienti con
caratteristiche eccezionali [https://github.com/esp8266/esp8266-wiki/wiki] e dal costo molto contenuto di circa 3$
Nei miei vari esperimenti per dotare i miei progettini di un
canale di comunicazione ho provato i vari moduli RF a 433Mhz, connessione
infrarossi, gli stupefacenti moduli Nrf24L01 wireless etc, ottenendo risultati
piu’ o meno soddisfacenti.
Ma nessun modulo da me provato finora mi ha offerto le
incredibili capacita’ del modulo ESP8266-01.
Questo modulo mi permette di dotare i miei progettini di connettivita’
WiFi e quindi permettermi di
controllarli via Internet (sia da casa sia fuori casa).
In questo articolo descrivo il mio primo approccio e test
con questo modulo.
BoM
- 1x modulo ESP8266-01
- 1x breadboard
- 1x PL2302HX USB to TTL converter
- 1x porta batterie AA (riciclato da una vecchia macchinina telecomandata) e 2x batterie stilo AA
- 8x rainbow wire maschio-femmina per i collegamenti
Connessioni
Ho realizzato le connessino come rappresentato nello schema
qui sotto
Alimentazione
Il modulo ESP8266-01 necessita di alimentazione e segnali a
3.3V. Consigli di usare un’alimentazione stabile in quanto ho notato che il
modulo e’ molto sensibile e potrebbe resettarsi di continuo di fatto non
funzionando.
Nel mio caso ho provato a prendere l’alimentazione da
Arduino Uno ma non era sufficiente, quindi ho utilizzato due batterie AA da 1,5
Volt.
Nel schema le batterie di alimentazione vanno collegate
cosi:
- filo blu e’ il positivo (+)
- file nero e’ il negativo (-) [massa]
Connessione Seriale
Ho utilizzato l’unico modulo USB to TTL che posseggo (PL2302HX
USB to TTL converter). Questo modulo fornisce anche l’alimentazione a 3.3V ma
anche in questo caso non e’ sufficiente per alimentare correttamente il modulo
ESP8266-01.
Nello schema il modulo USB to TTL va collegato cosi’:
- filo nero [1] a massa
- filo viola [1] pin RX
- filo grigio [1] pin TX
Modulo EPS8266-01
Il modulo ESP8266-01 che ho usato io ha la seguente
piedinatura (moduli differenti ESP8266-X hanno piedinatura diversa ma comunque
simile e facilmente riconducibile a quanto descritto qui)
Ho connesso il modulo in questo modo:
- filo blu [1] pin VCC
- filo blu [2] pin CH_PD (boot mode – deve essere sempre ad livello logico 1 per far funzionare il WiFi)
- filo viola [2] pix TX
- filo grigio [2] pin RX
- filo nero [2] pin GND
Una volta fatti questi collegati i fili in base alla
colorazione come descritto sopra e’ facilissimo collegarli sulla breadboard.
Basta collegare i fili a coppie di colori.
Quindi tutti i fili neri vanno a massa, tutti i fili blu
vanno a VCC, poi viola con viola (USB RX – Wifi TX) e grigio con grigio (USB TX
– Wifi RX)
ESP8266-01 Test
ESP8266 Wifi Access Point
A questo punto non resta che alimentare il modulo collegando
i due fili delle batterie alla breadboard come indicato sopra.
Se tutto e’ andato a buon fine non si vedra’ niente, ma solo
in apparenza.
Verifichiamo dal nonstro PC le connessioni wireless
disponibili
Con grande piacere e’ comparsa una nuova rete wireless. Il
modulo ESP8266 e’ di default configurato come un wireless access point (il nome
della rete wifi potrebbe variare con il vostrop modulo). Ok i collegamenti sono
corretti in quanto il modulo funziona.
Adesso proviamo a configurarlo come wireless client e a
verificarne il funzionamento
Avremo bisogno di un terminale seriale come il vecchio
hyperterminal, minicom ,etcc.
Io per comodita’ uso l’IDE di Arduino che ne include gia’
uno (Monitor Seriale)
ESP8266 Wifi Client
A questo punto inserisco il modulo USB to TTL in una porta
USB del mio PC.
Nel mio caso questo modulo USB to TTL viene configurato su
windows come COM6. Nel vostro caso il numero di porta seriale potrebbe essere
diverso ma la procedura rimane ovviamente la stessa.
Adesso accertiamoci che la porta seriale in questione sia
configurata correttamente per poter comunicare con il modulo ESP8266
Vado su
E qui trovo la porta COM6. Right-Click e selezione
proprieta’
Selezioni la tab Hardware
Poi dinuovo proprieta’ e poi selezioni la tab Port Settings
(o l’equivalente nella lingua del vostro Windows)
Adesso configuro la porta con gli stessi parametri della
figura sotto
Adesso
lancio l’IDE Arduino e selezioni la porta seriale corretta come in figura
Adesso apro il Monitor seriale e mi accerto che la velocita’
di trasmissione ed i caratteri di terminazione linea siano impostati come in
figura
Adesso resetto il modulo ESP8266 disconnettendo e poi
riconnettendo l’alimentazione.
Se tutto funziona correttamente il modulo risponde con la
scritta ready
Il
firmware standard del modulo ESP8266 mette a disposizione una serie di comandi
standard Hayes (per chi si ricorda questo e’ lo standard usato nei vecchi modem
analogici) anche detti comandi AT [https://en.wikipedia.org/wiki/Hayes_command_set]
Potete
trovare una guida completa qui [https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/]
Verifichiamo innanzitutto che funzioni correttamente
inviando con il comando AT (Test AT startup) .
Se in risposta otteniamo un OK
allora siamo apposto. Tutto funziona correttamente.
I comandi AT si inviano al modulo tramite il vostro
programma di emulazione di terminale. Nel monitor seriale di Arduino che ho
usato io basta scrivere il comando nella barra superiore e premere invio
Solo per curiosita’ verifico la versione del firmware con
AT+GMR (View Version Info). Nel mio caso e’ la versione 0.9.5 ma vostro caso la
versione del firmware puo’ essere diversa.
A questo punto cambio la modalita’ in Wifi client con il
comando AT+CWMODE (Wifi mode)
Come da specifica il modulo ESP8266 commuta in client mode
(station mode) con il parametro 1
Siccome ho ricevuto un OK significa che ora il modulo
ESP8266 non e’ piu’ un access point ma un client wifi, quindi controllo quali
siano gli access point disponibili con il comando AT+CWLAP (List available APs)
Il modulo EPS8266 “vede” tutte le reti wifi che vedo anche
dal mio PC a conferma che tutto funziona correttamente anche in client mode.
Verifico
quale sia l’indirizzo IP assegnato al modulo (ovviamente non mi aspetto nessun
indirizzo siccome non e’ ancora associato a nessuna rete). Per questo uso il
comando AT+CIFSR (Get local IP address)
Il modulo mi conferma che nessun indirizzo e’ assegnato
(0.0.0.0) ed inoltre mi fa vedere qual’e’ il MAC address del modulo (utile per
fare controllo d’accesso nel router wifi del vostro provider).
A questo punto siccome ho cambiato modalita di funzionamento
da AP a client wifi devo fare un reset tramite il comando AT+RST (reset module)
A questo punto mi posso collegare alla mia rete Wifi tramite
il comando AT+CWJAP (Connect to AP), specificando il node della rete e la
password.
Adesso che mi sono collegato alla rete Wifi controllo
dinuovo quale indirizzo IP e’ stato assegnato allo ESP8266 usando lo stesso
comando di prima (AT+CIFSR)
Adesso come si vede dalla figura mi e’ stato assegnato un
indirizzo IP valido
Adesso che il modulo e’ collegato alla mia rete Wifi
verifichiamone il funzionamento a livello TCP/IP
Inizio facendo un ping all’indirizzo dello ESP8266
Ok come mi aspettavo e’ raggiungibile. Buon segno J
ESP8266 come client TCP
Lancio dalla mia VM linux il piu’ semplice TCP/web server possibile tramite il comando nc
(netcat)
Adesso configuriamo il modulo ESP8266 in modo da creare una
sessione TCP col mio server ed inviare alcuni dati
Imposto per semplicita’ una singola connessione tramite il
comando AT+CIPMUX (Enable multiple connections or not). Il parametro 0 (zero)
significa singola connessione
Adesso creaiamo la conneccione TCP verso il server che e’ in
ascolto sulla porta 9090 del mio linux tramite il comando AT+CIPSTART
(Establish TCP connection or register UDP port and start connection).
I parametri da passare sono il tipo di connessione,
l’indirizzo del server e la porta su cui il server e’ in ascolto
Dopo aver eseguto questo comando il modulo ESP8266 mi dice
CONNECT e OK. Quindi il socket TCP e’ aperto verso il server 192.168.1.2:9090
Adesso inviamo una semplice stringa al nostro server tramite
il comando AT+CIPSEND (Send data) e specifichiamno la lunghezza della stringa
(hello ESP8266 = 13 byte). Se inviate una stringa diversa usate la giusta
lunghezza come parametro
Quando riceviamo OK possiamo inserire la stringa da inviare
e premere invio
Il modulo ci informa con SEND OK che i dati sono stati
inviati correttamente.
Adesso chiudo la conneccione TCP con AT+CIPCLOSE (Close TCP
or UDP connection)
L’OK finale mi conferma che il comando e’ stato eseguito
correttamente e’ la connessione TCP e’ chiusa.
Lato server abbiamo la conferma che la stringa inviata dal
modulo ESP8266 e’ stata ricevuta correttamente e che la connessione TCP e’
stata chiusa correttamente
Non so voi ma a me il fatto che questo semplice test abbia
funzionato e pensare che in un piccolo chip come ESP8266 e’ implementato un
intero stack TCP/IP mi galvanizza molto.
ESP8266 come server TCP
Siccome adesso vogliamo che il modulo ESP8266 funzioni come
un server TCP/IP lo imposto in modo che
accetti connessioni multiple (max 4) quindi al comando AT+CIPMUX passo il
parametro 1
Adesso configuro il server TCP con il comando AT+CIPSERVER
(Configure as server) passando come parametri 1 (create server) e la porta 9090
su cui mettersi in ascolto
A questo punto dal mio linux invio una semplice stringa
(ciao) al server sempre il comando nc
Ed il server una volta ricevuta la stringa la stampa
confermandomi che la comunicazione e’ avvenuta con successo.
In conclusione ho verificato che lo ESP8266 funziona come Wifi
Access Point, come Wifi client. Che funziona come TCP server per ricvere dati e
come TCP client per inviare dati.
Come detto all’inizio questo mi conferma che il ESP8266 e’
il miglior modulo che abbiamo mai provato per fornire i miei progettini Arduino
di un canale di comunicazione affidabile e facile da usare.