ESP8266

Da raspibo.


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.

Vari modelli ESP8266

Me ne sono procurati alcuni pezzi e qui raccolgo alcune notizie in vista di usarli in qualche progetto.

Indice

ESP8266

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

boot.log

Al boot può capitare che vengano visualizzati caratteri incompresibili e che poi il modulo non sia più contattabile: modificare la velocità della porta a 74880 per vedere i messaggi di boot e proseguire con l'analisi.

Flashing ESP-01 V3.0

Il modulo (ESP-01 V3.0 ?) che alla richiesta "AT+GMR" risponde:

AT version:1.3.0.0(Jul 14 2016 18:54:01)
SDK version:2.0.0(656edbf)
compile time:Jul 19 2016 18:44:44

Si deve programmare utilizzando l'opzione di "esptool.py" "-fm dout", un'esempio:

esptool.py -p /dev/ttyAMA0 -b 115200 write_flash -ff 40m -fm dout -fs 4m 0x00000 out/firmware/0x00000.bin 0x0a000 out/firmware/0x0a000.bin

Riferimenti:

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.

ESPlorer.png

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

ESP8266Ref.pdf

https://github.com/esp8266

http://www.esp8266.com/

http://www.esp8266.com/wiki/doku.php

FAQ

Cancellare completamente la flash del modulo ESP8266
esptool.py --port </dev/ttyAMA0> --baud <115200> erase_flash
Controllare la versione
esptool.py --port </dev/ttyAMA0> --baud <115200> flash_id

Pagine sul wiki

ESP8266/DHT22toMQTTESP8266/DS1820toMQTTESP8266/PIRtoMQTT
ESP8266/SerialToMQTT RepeaterESP8266/SmingESP8266/collegamentoarduino
ESP8266/templogger
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti