Come ho installato il firmware MicroPython sul mio ESP8266 / ESP32.

Flashare il firmware MicroPython su ESP8266 / ESP32

09-11-2023

Qualche tempo fa' la fondazione Raspberry Pi ha sfornato un nuovo prodotto: il Raspberry Pi Pico

Si tratta di un microcontrollore con caratteristiche interessanti e dal costo ridotto. La feature che più mi ha colpito è la possibilità di utilizzarlo con firmware MicroPython!

Breve introduzione su MicroPython

MicroPython è un’implementazione snella ed efficiente del linguaggio di programmazione Python 3 che include un sottoinsieme della libreria standard Python ed è ottimizzato per l’esecuzione su microcontrollori.

Devo essere sincero, ho incrociato più di una volta MicroPython sulla mia strada. Nonostante la mia curiosità e la mia esperienza pregressa con Arduino su alcuni progetti in ambito IoT non sono mai riuscito a testarne in prima persona le potenzialità.

Di recente ho ripreso in mano un po' di cose che avevo da parte ed ho ritrovato qualche ESP8266 ed un ESP32, due schedine abbastanza famose nel mondo IoT per la loro versatilità. Entrambe con supporto a MicroPython.

Il mese scorso poi, nella nuova release di MicroPython 1.21, è stato annunciato il supporto per il protocollo Espressif ESP-NOW. Quindi ho guardato i miei ESP e mi sono detto: iniziamo!

Installazione firmware MicroPython su ESP8266 / ESP32

La procedura di installazione è abbastanza facile, tuttavia hai bisogno di alcuni strumenti di base.

Nulla di troppo complesso, non spaventarti. Se qualcosa non è chiaro puoi scrivermi nei commenti o nel canale Telegram.

Non mi dilungo ulteriormente, passiamo alla pratica!

Interprete Python (solo se non è già presente)

Non sarò troppo dettagliato su questo punto. Oltre ad essere un’operazione semplicissima ci sono già migliaia di guide a riguardo.

Per verificare che sul tuo PC sia già installato l’interprete Python, digita nel terminale:

python --version

oppure :

python3 --version

Se in entrambi i casi ricevi un messaggio di errore, vai su python.org, sezione downloads, scegli il tuo sistema operativo e la versione di Python più recente ed esegui l’installer per completare l’installazione.

È consigliato un riavvio del PC.

Esptool e adafruit-ampy

Apri il terminale e digita:

pip install esptool

Questo tool ti serve per poter comunicare con la schedina.

Consiglio anche di installare adafruit-ampy

pip install adafruit-ampy

Lo utilizzeremo più avanti per consultare / trasferire files sulla schedina.

Identifica la schedina (pt. 1)

Questa è la parte facile, basta andare sul sito dove l’hai comprata e controllare nello storico ordini se si tratta di un ESP32 (versione più recente e potente) o di ESP8266 (versione più vecchia e meno prestante).

Se non hai questa informazione sotto mano, perchè magari la schedina te l’hanno regalata, c’è un ulteriore procedura che puoi seguire.

Segui le istruzioni al prossimo passo per capirne di più.

Cerca la porta COM / tty al quale è collegata la schedina

C’è un piccolo trucchetto per identificare velocemente il numero della porta COM (in caso tu stessi usando Windows) o tty (in caso in cui stessi usando Linux o MacOS).

Scarica e installa Arduino IDE, collega con cavo USB la schedina al PC. Sarà lui a dirti tutte le informazioni del caso.

Ora sappiamo come contattare il tuo ESP, puoi anche disinstallare l’IDE, ha svolto il suo ruolo e solitamente la porta COM / tty resta sempre invariata.

Se non vuoi scaricare Arduino IDE hai ovviamente altre opzioni.

Su Windows, come riportato nella documentazione di ESP, devi aprire la finestra di Gestione dispositivi e cercare sotto la voce Porte (COM e LPT).

schema su breadboard esp 8266 e comandi pulsante
Gestione dispositivi in Windows (click per ingrandire)

Su Linux o MacOS invece la documentazione consiglia di lanciare il seguente comando 2 volte. La prima con il nostro ESP staccato dal PC e la seconda attaccando il cavo USB e notando le differenze.

ls /dev/tty*

Identifica la schedina (pt. 2)

Ora che conosciamo la porta COM o il tty della nostra schedina possiamo lanciare il seguente comando per avere più informazioni:

In questo esempio sono su Windows ed il mio ESP è collegato alla COM3.

C:\Users\Progressify>python -m esptool -p COM3 flash_id
esptool.py v4.3
Serial port COM3
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Manufacturer: e0
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

Le informazioni importanti sono fondamentalmente 2:

Detecting chip type... ESP8266

Il chip type vi dirà finalmente se avete un ESP32 o ESP8266.

Detected flash size: 4MB

Il flash size vi servirà soltanto in caso di ESP8266 e solo se è inferiore a 1MB. Per questa versione in particolare dovete scaricare un firmare apposito (tutti i link al prossimo step).

Scarica il firmware adatto alla tua schedina

Ora che sappiamo cosa abbiamo tra le mani è più semplice capire cosa dobbiamo scaricare.

Se hai un ESP8266 vai a questo link: https://micropython.org/download/ESP8266_GENERIC/

Per ESP32 invece devi usare questo: https://micropython.org/download/ESP32_GENERIC/

In entrambi i casi vai alla sezione Firmware > Releases, individua l’ultima release (è indicata con il tag latest), scarica il file .bin.

Come dicevo prima, per le ESP8266 con flash size inferiore a 1MB ci sono i Firmware (512kiB flash) e Firmware (1MiB flash), occhio!

Flash del firmware

Prima di installare o aggiornare il firmware ti consiglio di fare un reset. In caso di aggiornamento se hai file di codice o configurazione da prelevare dalla schedina, ovviamente fai un backup prima del reset.

Ecco il comando per il reset. Nell’esempio sono sempre su Windows, sempre COM3.

C:\Users\Progressify\Downloads>python -m esptool -p COM3 erase_flash
esptool.py v4.3
Serial port COM3
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 10.4s
Hard resetting via RTS pin...

Pochi secondi ed abbiamo il nostro ESP fresco a pulito!

Ora procediamo con l’installazione del firmware.

C:\Users\Progressify\Downloads>python -m esptool -p COM3 --baud 460800 write_flash --flash_size=detect -fm dout 0 esp8266-v1.21.0.bin
esptool.py v4.3
Serial port COM3
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: xx:xx:xx:xx:xx:xx
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00000000 to 0x0009afff...
Flash params set to 0x0340
Compressed 634844 bytes to 419808...
Wrote 634844 bytes (419808 compressed) at 0x00000000 in 9.8 seconds (effective 518.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Per il parametro --baud ho utilizzato il valore di default 460800 che ho preso dalla documentazione.

Bene! Ora sei pronto per iniziare a sviluppare progetti in MicroPython. Al passo successivo verificheremo che tutto sia andato per il meglio.

Controlliamo che tutto sia andato a buon fine

In questo esempio sono su MacOS e la tty è /dev/tty.usbserial-0001.

Tramite l’utility adafruit-ampy installata ai passi precedenti, ho lanciato prima il comando ls per vedere il contenuto della schedina subito dopo l’installazione pulita del firmware.

progressify@mbpro16 esp_micropython % ampy -p /dev/tty.usbserial-0001 ls 
/boot.py

Come puoi vedere è presente solo il file boot.py. Con un get possiamo leggere il contenuto.

progressify@mbpro16 esp_micropython % ampy -p /dev/tty.usbserial-0001 get boot.py
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
import uos, machine
#uos.dupterm(None, 1) # disable REPL on UART(0)
import gc
#import webrepl
#webrepl.start()
gc.collect()

In caso di errore di connessione su Linux

Se sei su Linux e ricevi qualche errore di connessione, a seconda della tua distro, devi lanciare i seguenti comandi:

sudo usermod -a -G dialout $USER

Per Arch Linux invece:

sudo usermod -a -G uucp $USER

Conclusioni

Welcome to the MicroPython side!

Inizialmente questo articolo doveva essere più lungo, ma ho preferito non caricare troppi concetti e dividerlo un più puntate. Così da favorire anche un po' l’indicizzazione ed i motori di ricerca.

Sono contento di aver finalmente sbloccato l’achievement MicroPython 😄

Nel prossimo articolo ti farò vedere come collegare un pulsante all’ESP. Se sei interessato al tema scrivimi un commento ed entra nel canale Telegram.

AP

 

Antonio Porcelli @progressify

Antonio Porcelli

@progressify

Commenta l'articolo

Se non visualizzi il blocco dei commenti è perchè non hai accettato i cookies.
Cancella le preferenze del tuo browser per questo sito, aggiorna la pagina ed accetta i cookies.