ESP8266
Negli ultimi tempi ho visto diversi articoli riguardanto un modulo WiFi low cost venduto principalmente da siti cinesi.
Il prezzo è veramente interessante si va da 3 a 5 dollari mediamente.
Me ne sono procurati alcuni pezzi e qui raccolgo alcune notizie in vista di usarli in qualche progetto.
Il modulo funziona a 3.3 Volts perciò attenzione ad usarlo in combinazione con Arduino perchè si rischia di bruciarlo se alimentato a 5 Volts. Si rischia di bruciare arduino se il modulo wifi viene collegato all'uscita 3.3.V perchè i consumi di sono maggiori di quello che arduino può erogare.
Passiamo ai collegamenti, oltre all'alimentazione ed ai collegamenti TX - RX, per dialogare con il modulo va collegato a Vcc il pin CH_PD.
Quando il modulo viene alimentato si accende un led rosso e lamepggia per un attimo il led blu.
Ci sono diverse versioni della board in giro, e con diverse versioni di firmware che comunicano in seriale a diverse velocità. Per controllare la versione:
esptool.py --port </dev/ttyAMA0> --baud <115200> flash_id
E verificare il risultato: http://code.coreboot.org/svn/flashrom/trunk/flashchips.h (http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family)
Colleghiamoci usando picocom:
picocom --omap crcrlf /dev/ttyUSB0 -b 9600
Se non funziona possiamo provare ad una velocità maggiore
picocom --omap crcrlf /dev/ttyUSB0 -b 57600
O ancora a 115200, dipende da come è configurato il firmware
picocom --omap crcrlf /dev/ttyUSB0 -b 115200
Per uscire premiamo il tasto control, poi A e senza lasciare il tasto control premiamo anche il tasto X.
Il modulo si programma con i comandi AT in maiuscolo (forse anche questo dipende dalla versione del firmware) seguiti da enter:
- AT risponde OK e serve a capire sel il modulo è in ascolto
- AT+RST resetta il modulo
- AT+CWMODE=<mode> (seleziona in quale modalità deve lavorare il chip (1= Client, 2= AccessPoint, 3=entrambi), quindi es AT+CWMODE=1 trasforma il modulo in un client wifi
- AT+CWLAP lancia una scansione degli access poinT di seguito un esempio di output
AT+CWLAP +CWLAP:(3,"Cast_WiFi",-80,"00:22:b0:43:8d:7b",1) +CWLAP:(0,"D-Link DSL-2640B",-58,"b8:a3:86:e9:e2:6c",1) +CWLAP:(4,"Cast_WiFi",-49,"9c:97:26:d3:be:23",1) +CWLAP:(0,"NinuxBO",-56,"6a:72:51:00:df:f6",11) +CWLAP:(0,"NinuxBO-mesh",-57,"68:72:51:00:df:f6",11) +CWLAP:(0,"NinuxBO",-81,"12:fe:ed:2b:19:e2",11) +CWLAP:(3,"Cast_WiFi",-52,"a0:21:b7:ba:ff:d6",6) OK
- AT+CWJAP="<access_point_name>","<password>" connette il modulo ad un access point
AT+CWJAP="NinuxBO",""
- AT+CWJAP? verifica a quale access point si è agganciato il modulo
AT+CWJAP? +CWJAP:"NinuxBO" OK
- AT+CIFSR verifica l'ip del modulo
AT+CIFSR 10.51.22.40 OK
+CWLAP:(3,"Cast_WiFi",-80,"00:22:b0:43:8d:7b",1) +CWLAP:(0,"D-Link DSL-2640B",-58,"b8:a3:86:e9:e2:6c",1) +CWLAP:(4,"Cast_WiFi",-49,"9c:97:26:d3:be:23",1) +CWLAP:(0,"NinuxBO",-56,"6a:72:51:00:df:f6",11) +CWLAP:(0,"NinuxBO-mesh",-57,"68:72:51:00:df:f6",11) +CWLAP:(0,"NinuxBO",-81,"12:fe:ed:2b:19:e2",11) +CWLAP:(3,"Cast_WiFi",-52,"a0:21:b7:ba:ff:d6",6) OK
- AT+CWJAP="<access_point_name>","<password>" connette il modulo ad un access point
AT+CWJAP="NinuxBO",""
- AT+CWJAP? verifica a quale access point si è agganciato il modulo
AT+CWJAP? +CWJAP:"NinuxBO" OK
- AT+CIFSR verifica l'ip del modulo
AT+CIFSR 10.51.22.40 OK
Upload di un nuovo firmware
Per aggiornare il firmware collegare a massa il pin GPIO0 e RST a Vcc (garantisce reset anche se il mudulo ha uno script che va in errore e provoca il riavvio).
Ora passiamo ad aggiornare il firmware (ispirato a questa guida):
git clone https://github.com/themadinventor/esptool sudo python esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_latest.bin
durante queste operazioni oltre all'avanzamento a video lampeggia il led blu
Terminato l'aggiornamento scollegare da massa il ping GPIO0 e riavviare, ora possiamo dare comandi al modulo pilotando i pin del gpio, creando file da eseguire all'avvio ecc....
Per capire meglio cosa è possibile fare con questo firmware si può fare riferimento al readme su github, vedi anche ESP8266/templogger
Ora si possono caricare degli script e qualcuno ha creato un comodo script in python
Il nuovo firmware è molto potente, permette di creare dei files direttamente sul modulo in formato lua che ho scoperto proprio ora. Sul modulo si può creare un file init.lua che verrà eseguito all'avvio oppure altri files che possono essere richiamati a piacimento oppure direttamente dal file init.
Questo firmware permette ad esempio di collegarsi in wifi dal prompt in modo semplice digitando pochi comandi:
ip = wifi.sta.getip() print(ip) --nil wifi.setmode(wifi.STATION) wifi.sta.config("SSID","password") ip = wifi.sta.getip() print(ip) --192.168.18.110
Questo ad esempio è un semlice server telnet, collegandoci all'indirizzo del modulo sulla porta 23 quello che digitiamo sulla tastiera verrà trascritto sui pin tx ed rx.
Quindi se questo lo colleghiamo ad un mcrocontrollore avremo aggiunto un'interfaccia wifi ad esempio ad Arduino, sempre ricordando di adattare i livelli di tensione e di non alimentare il modulo direttamente da 3.3V di Arduino
s=net.createServer(net.TCP,180) s:listen(23,function(c) c:on("receive",function(c,l) -- i comandi verranno scritti direttamente sulla porta seriale del microcontrollore print(l) end) end)
Usando solo il modulo, si possono comandare i 2 pin del gpio del modulo come su arduino, inoltre i due pin possono essere usati come interfaccia verso i noti bus i2c, 1wire ecc..... rimando al file Readme del firmware nodemcu
Ci sono esempi in rete per creare sensori wifi, o comunicare a distanza lo stato di uno switch.
Qui invece la lista dei comandi disponibili per il firmware nodemcu.
Problemi e debug
Al boot può capitare che vengano visualizzati caratteri incompresibili e che poi il modulo non sia più contattabile: modificare la velocità edlla porta a 74880 per vedere i messaggi di boot e proseguire con l'analisi.
Ide di sviluppo
Per semplificare tutte le operazioni viste sopra è disponibile un comodo IDE multipiattaforma in Java ESPlorer che permettere sia di impartire i comandi al vecchio firmware che di interrogare e programmare il nodemcu.
Dopo pochi minuti di utilizzo si rivela molto utile, ci sono comandi da inviare al volo al modulo per fare test, si possono creare bottoni per i comandi usati più di frequente, alcune macro per listare i files in memoria, vale la pena di provarlo.
Riferimenti
A questo indirizzo una lista completa dei comandi AT: ESP8266
Ho trovato questo documento che ho usato per qualche indicazione: ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf