Dopo aver esaminato diversi strumenti di sviluppo per MicroPython negli articoli precedenti
MicroPython – Strumenti di sviluppo Ampy – Eric
MicroPython – IDE MicroPython uPyCraft
in questo articolo si descrivono brevemente le principali caratteristiche di MicroPython. Esaminiamo in particolare la documentazione inerente all’ESP8266, ma i concetti possono essere estesi anche alle altre schede.
La documentazione sul soc ESP8266 e MicroPython è disponibile al link
Documentazione MicproPython ESP8266
Al link si trovano tutte le informazione necessarie per implementare il proprio codice sulla scheda e le caratteristiche di MicroPython nonché le differenze rispetto a Python.
Di seguito i punti principali per la codifica in MicroPython:
- MicroPython ha una consolle REPL (Read Evaluate Print Loop) attraverso la porta seriale cui è connesso il dispositivo sui cui si posso impartire i vari comandi MicroPython in modo interattivo.
- Si può accedere alla consolle REPL anche tramite connessione all’indirizzo IP del dispositivo mediante l’abilitazione della consolle WEBREPL (Web Browser Interactive prompt)
importando il pacchetto webrepl, abilitandolo ed avviandolo ad ogni ripartenza del dispositivo. Per accedere al dispositivo configurato si puo usare il link
o localmente clonandolo da github
1 |
git clone https://github.com/micropython/webrepl |
- I file che vengono eseguiti all’avvio del dispositivo sono boot.py e successivamente main.py.
- Le librerie disponibili per MicroPython sono presenti sul github al link
- Pacchetti aggiuntivi
I moduli aggiuntivi possono essere scaricati dal link delle librerie presentato sopra o scaricati con la utility upip (Package Manager) dalla consolle REPL se presenti nel repository Python Package Index (PyPI)
come descritto di seguito
Di seguito un semplice esempio che si connette al router e ci permette di accedere alla consolle MicroPython con il browser e WEBREPL.
- Codice boot.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#This file is executed on every boot (including wake-boot from deepsleep) import esp #esp.osdebug(None) #Connects to the wifi AP providing a hostname, AP Name and passord def do_connect(): import network sta_if = network.WLAN(network.STA_IF) if not sta_if.isconnected(): print('connecting to network...') sta_if.active(True) #Sets the device hostname sta_if.config(dhcp_hostname='ESP_TEST') print(sta_if.config('dhcp_hostname')) #CHANGE THE VALUES TO YOUR ACCESSPOINT NAME AND PASSWORD sta_if.connect('ACCESSPOINT', 'PASSWORDACCESSPOINT') while not sta_if.isconnected(): pass print('network config:', sta_if.ifconfig()) #Imports various modules for network, webrepl and garbage collector import gc import webrepl import network do_connect() webrepl.start() gc.collect() |
Al primo accesso viene richiesta l’abilitazione di webrepl da eseguire nella consolle REPL con il comando
1 |
import webrepl_setup |
e seguendo le istruzioni si abilita il servizio e si imposta la password di accesso.
La procedura genera sul dispositivo il file webrepl_cfg.py.
Dopo l’impostazione e riavvio accediamo alla consolle web aprendo il file webrepl.html clonato localmente con un browser
Premiamo connetti e dopo aver inserito la password impostata nel setup iniziale accediamo alla consolle
Installiamo ora dalla consolle WEBREPL, ad esempio, il modulo stat utilizzando upip
1 2 |
import upip upip.install("micropython-stat") |
Per incollare del testo nella consolle eseguire Ctrl+A e Ctrl+V
In questo caso il pacchetto è stato prelevato dal repository PYPI, scompattato ed installato sul dispositivo.
Abbiamo notato che alcuni moduli, sebbene presenti sul repository, danno errore in fase di installazione con upip; tali moduli li installiamo direttamente senza usare la utility upip, ma scaricando la libreria dal sito elencato sopra e trasferendo il codice sul dispositivo.
Di seguito il link al codice mostrato sopra
Altra opzione disponibile è compilare il firmware con i moduli richiesti.
Nel prossimo articolo esamineremo degli esempi analoghi a quanto fatto con LUA su ESP8266 in articoli precedenti
MicroPython – Esempi nodi con DHT11, Relé ed MQTT