Programmare ESP32 con MicroPython

Da non molto tempo mi sono avvicinato al Python e ne sto apprezzando i vantaggi in termini di semplicità di scrittura del codice e della quantità di librerie disponibili per realizzare qualsiasi cosa. In passato ho scritto un articolo su come programmare l’ESP utilizzando l’Arduino IDE. Fino ad oggi ho utilizzato questo metodo per realizzare tutto quello di cui avevo bisogno con l’ESP. Ho, però, deciso di sperimentare se i vantaggi che ho riscontrato nel Python valessero anche per il Micropython! In questo articolo illustrerò in maniera più breve, schematica e completa possibile quali sono i passaggi per programmare ESP32 con MicroPython, ovvero con il firmware che svolge la funzione di interprete per il MicroPython. Dopodiché caricare sulla board dove è presente il firmware gli script e farceli girare.

Ecco alcuni link per acquisto di ESP32:

1x ESP32 DevKit

3x ESP32 DevKit

1x ESP32 con Display OLED

1x ESP32-CAM (con videocamera)

Configurare il PC

Per adesso ho deciso di scrivere questa guida su come programmare ESP32 con MicroPython utilizzando un PC con installato Ubuntu, nello specifico 18.04.3 LTS. E’ sufficiente averlo installato anche utilizzando una macchina virtuale utilizzando VirtualBox (Gratuito). I passaggi da seguire sono i seguenti:

Aprire il terminale e installare Python sul PC digitando:

$ sudo apt-get update

$ sudo apt-get install python3.x

dove python3.x corrisponde alla versione corrente del Python, nel mio caso specifico ho installato la versione 3.8 con il comando:

$ sudo apt-get install python3.8

Installare quindi il package manager per Python PIP con il comando:

$ sudo apt-get install python3-pip

Adesso sarà possibile installare il tools che ci consentiranno di caricare il firmware e gli script sopra all’ESP32.

Per scaricare il primo tool sarà sufficiente digitare nel terminale:

$ sudo pip3 install esptool

per il secondo invece digitare:

$ sudo pip3 install adafruit-ampy

Caricamento del firmware MicroPython – programmare ESP32 con MicroPython

Utilizzando esptool è necessaria, come prima cosa, cancellare la flash dell’ESP32 con il comando:

$ esptool.py –chip esp32 -p /dev/ttyUSB0 erase_flash

ATTENZIONE: E’ possibile che non abbiate i permessi per poter scrivere sulla porta /dev/ttyUSB0, in tal caso dovrete inserire quelle che si chiamano “Regole di udev”. Per fare questo è necessario creare in file chiamato ad esempio: 50-ttyusb.rules all’interno della cartella /etc/udev/rules.d contenete il seguente testo:

KERNEL==”ttyUSB[0-9]*”,MODE=”0666″

Il numero “50-” conferisce solo al file un’ordine con il quale viene caricato dal Kernell Linux, il nome è arbitrario, mentre è molto importante che l’estensione del file sia “.rules”

Un modo veloce per riuscire a creare il file .rules dal momento che sono necessari i permessi di amministatore è il seguente. Aprire il terminale, creare un file con nome corretto nella cartella /etc/udev/rules.d con il comando:

sudo gedit /etc/udev/rules.d/69-ttyusb.rules

Si aprirà a questo punto il file da editare all’interno del quale ci scriveremo

KERNEL==”ttyUSB[0-9]*”,MODE=”0666″

Salvate il file e riavviate il pc per ricaricare le regole di udev con il comando:

udevadm control –reload-rules

Se non dovesse funzionare, riavviare il PC.

A questo punto, dopo aver scaricato l’ultima versione stabile di firmware da questo link, selezionando la giusta scheda, utilizzando esptool è possibile caricare il MicroPython all’interno dell’ESP32 con il comando:

$ esptool.py –chip esp32 -p <nome_porta> write_flash -z 0x1000 <path_del_firmware>

dove alla voce <path_del_firmware> sarà necessario scrivere il nome del percorso contenente il file corrispondente all’immagine del firmware scaricata e alla voce <nome_porta> è necessario scrivere il nome della porta corrispondente all’ESP32, ad esempio /dev/ttyUSB0 nel mio caso. Le scritte che compariranno al momento della scrittura saranno le seguenti:

Programming

Al termine della scrittura, sarà possibile verificare che il firmware è stato correttamente caricato e che sta girando correttamente, utilizzando il tool chiamato screen, è possibile installare screen con il comando

$ sudo apt install screen

Dopo aver installato screen, sarà possibile scrivere direttamente uno script Python collegandosi con la seriale direttamente al dispositivo con il comando:

$ screen /dev/ttyUSB0 115200

Indicando al il nome della porta che è stata assegnata al vostro dispositivo e la velocità di comunicazione (115200).

Dopo l’apertura di screen, potrete digitare il seguente script che farà blinkare il led a bordo della vostra scheda.

from machine import Pin
from time import sleep
led = Pin(2, Pin.OUT)
while(1):
… led.value(1)
… sleep(1)
… led.value(0)
… sleep(1)

ESP32 Blink LED
Example Script

Caricamento degli script

Ovviamente, la prova che avete appena fatto non è sufficiente programmare ESP32 con MicroPython! Avete infatti la necessita che il vostro script possa girare sull’ESP32 autonomamente, senza bisogno che la scheda sia collegata al PC.

Iniziamo con il dire che, è necessario caricare sopra la scheda, almeno due script, uno chiamato boot.py, che deve essere sempre presente, e qualsiasi altro script che vogliamo far girare. Facciamo un esempio: se volessimo far girare autonomamente lo script main.py che abbiamo utilizzato nel capitolo precedente, la procedura è la seguente.

E’ necessario scrivere due file, uno chiamato boot.py, con all’interno scritto:

import pyb
pyb.main(‘main.py’)

Lo script main.py sarà quindi scritto così:

from machine import Pin
from time import sleep
led = Pin(2, Pin.OUT)
while(1):
led.value(1)
sleep(1)
led.value(0)
sleep(1)

I due script devono essere salvati, chiaramente come boot.py e main.py, dopodiché sarà necessario caricare gli script con il comando:

$ ampy -p dev/ttyUSB0 put boot.py

e successivamente:

$ ampy -p dev/ttyUSB0 put main.py

Riavviando la scheda il led a bordo inizierà a blinkare.