MicroPython
Vuoi mettere in pausa Arduino e provare a scrivere qualche riga di codice sfruttando le potenzialità di python (micropython) direttamente sul tuo ESP8266 tenendolo collegato al router e inviando gli aggiornamenti OTA.
Materiali
- ESP8266
- Cavetto usb
- Qualche conoscenza di micropython → python in versione light (per il resto c'è google)
Inizio
Siccome non ho inventato niente inserisco qui i link e un recap che mi hanno permesso di muovere i primi passi :
Introduzione : http://docs.micropython.org/en/latest/esp8266/tutorial/intro.html
link al .bin (già compilato) → si può anche compilare il firmware localmente (l'ho fatto ma perché dover fare più del necessario) http://micropython.org/download#esp8266 http://micropython.org/resources/firmware/esp8266-20180511-v1.9.4.bin ← al momento ho utilizzato la versione 1.9.4 che ha preinstallato una serie di funzionalità molto comode (non attive però) che vedremo a breve.
Procediamo :
- puoi iniziare dal punto dell'introduzione → pip install esptool (bisogna aver installato pip - gestore pachetti python).
questa è la versione che sto utilizzando (solo per riferimento) → pip 18.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7) …i successivi passaggi (esptool.py –port /dev…) permetteranno di caricare il firmware su ESP8266 che hai collegato al PC. Segui le indicazioni specificando su quale /dev hai collegato l'ESP8266 (p.e. /dev/ttyUSB0)
- adesso bisogna comunicare via seriale con il dispositivo → io ho usato minicom (p.e. minicom -D /dev/ttyUSB0)
- magicamente apparirà un simbolo “maggiore” > altro non è che l'interprete python a cui possiamo dare in pasto comandi python
- faccio subito un test > 5+5 ⏎ dovrebbe restituire 10
- se fai uno scan delle connessioni wifi troverai una nuova connessione che inizia con → MicroPython- (però siccome non ti voglio perdere seguiremo la procedura che permette di associare la wifi del tuo router direttamente) e rendere disponibile l'interprete python a tutti quelli connessi sulla WIFI tramite l'indirizzo che verrà rilasciato dal DHCP - di default il firmware ha attivata la modalità STA_AP (Access Point) che può lavorare in combinata con la modalità STA_IF (tarmite il Router)
Come dicevo prima riporto il link per un lettura più ricca di dettagli :
http://docs.micropython.org/en/v1.9.3/esp8266/esp8266/tutorial/network_basics.html
La procedura consiste nel passare all'interprete python alcune istruzioni per attivare la WIFI doveroso il link http://docs.micropython.org/en/v1.9.3/esp8266/esp8266/tutorial/network_basics.html della documentazione ufficiale (che trovo ben strutturata)
Codice
import network sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect('<your ESSID>', '<your password>') ap_if.ifconfig()
l'ultima istruzione permetterà di conoscere qual'è l'ip che ha rilasciato il DHCP
Importante (ci siamo quasi) prima di procedere abilitare il modulo webrepl necessario per connettersi con lo strumento web
Codice
import webrepl_setup
(rispondi alle domande che propone l'interprete python)
adesso arriva la parte più interessante → è arrivata l'ora di abbandonare la connessione seriale e quindi anche i “cavi”!
Siccome questo è un recap passiamo alla modalità “tutto pronto” :
http://micropython.org/webrepl/ ← non servirà quindi installarlo localmente e lanciarlo p.e. con un server node.js oppure http-server - link al sorgente (ti servirà la sola pagina webrepl.html) https://github.com/micropython/webrepl
a questo link troverai l'applicativo per acceddere tramite IP (che abbiamo scovato con il comando ap_if.ifconfig() nell'interprete python)
ws://192.168.4.1:8266/ di default viene proposto questo indirizzo per la modalità AP ma si può cambiare in p.e. 192.168.5.54 (dipende dal tuo DHCP)
Git :
https://git.mittelab.org/glavermi/ccalendar - Link al codice (fetch eventi da google calendar)
Per chi volesse usare webrepl da Android e si fosse accorto che ne Chrome né altri browser sn compatibili c'è questo apk
https://microcontrollerelectronics.com/sourcecode/micropython.apk
Hw / Hands-on :
Tra i vari dispositivi reperibili online che montano ESP8266 è possibile trovare questo hw che ho scelto perché presentava una serie di connettori già saldati per permettere l'upload del fw senza dover saldare ponticelli sul pinout dell'ESP.
Vediamo però come farlo funzionare, online non ho trovato nessun riferimento a parte
A0 01 01 A2 hex switch on A0 01 00 A1 hex switch off
Con il dispositivo collegato normalmente e con fw originale ho letto dal canale TX dell'esp8266 (pin16) i comandi spediti per i due comandi (on/off).
Inizialmente pulseView mi ha restituito 0xA3 e 0x83 che ho provato ad utilizzare emulandolo con micropython ma senza risultato, così ho provato a scalare la velocità di lettura del canale TX a 115200 e togliere il bit di stop (non me lo sarei mai aspettato - di solito per questi dispositivi utilizzano velocità basse come 9600bps). Magicamente con i valori impostati a 115200 e senza bit di stop ho trovato il comando di accensione dichiarato dalla casa costruttrice (A0 01 01 A2) preceduto da altri dati che penso siano l'identificativo della board (credo che il fw installato sul MCU di questa board sia standard per tutti gli IOT di loro realizzazione).
Riporto quindi le informazioni per tutti quelli che vogliono divertirsi con questi dispositivi e/o con programmatori diversi da micropython :
0D 0A 2B 49 50 44 2C 30 2C 34 3A A0 01 01 A2
0D 0A 2B 49 50 44 2C 30 2C 34 3A A0 01 00 A1
Buon lavoro!