Differenze tra le versioni di "Installare MicroPython su NUCLEO-F401RE"
Riga 59: | Riga 59: | ||
Boochow fornisce dei firmware già compilati su https://blog.boochow.com/micropython-firmware-for-mbed-boards basta scegliere la board giusta e caricare il file .bin nel volume "NUCLEO" che si monta quando si collega la USB. | Boochow fornisce dei firmware già compilati su https://blog.boochow.com/micropython-firmware-for-mbed-boards basta scegliere la board giusta e caricare il file .bin nel volume "NUCLEO" che si monta quando si collega la USB. | ||
− | |||
− | == | + | == Caricare uno script == |
− | + | Un modo piuttosto comodo di inviare e ricevere file sulla flash della Nucleo è usare uPyLoader: | |
− | https:// | + | https://github.com/BetaRavener/uPyLoader/ |
+ | ma quasi sempre dà un errore di timeout. | ||
− | + | Il programma fornito da Adafruit sembra funzionare decisamente meglio | |
+ | https://learn.adafruit.com/micropython-basics-load-files-and-run-code/install-ampy | ||
− | + | Per installarlo usare pip (o pip3): | |
− | + | pip install adafruit-ampy | |
− | + | Per usarlo: | |
+ | ampy -p <porta seriale> put <nome file> |
Versione delle 16:43, 2 mar 2019
Questa guida è basata quasi tutta su quella di Carmine Noviello https://www.carminenoviello.com/2015/06/03/running-micropyton-stm32nucleo-f4/ che peraltro trovate anche in italiano https://www.carminenoviello.com/it/2015/08/11/compilare-micropython-una-scheda-stm32nucleo-f4/ per cui scriverò solo le differenze.
La versione di Carmine di micropython, che si trova sul suo github, risolve il problema relativo alla mancanza di memoria SD della scheda Nucleo. Il file con il programma .py sarà caricato direttamente sulla flash.
La scheda
NUCLEO-F401RE della STMicroelectronics è una scheda basata su ARM Cortex M4 e fa parte della famiglia STM32 Nucleo Boards. Ha 512KB di Flash, 96 KB di SRAM, un clock di 84MHz, 50 GPIO, RTC, supporto I²C, SPI, USART e molto altro (maggiori info). La sua forma le permette di alloggiare sia gli shield per Arduino che le estensioni Morpho di STMicroelectronics. Il prezzo è abbastanza contenuto (attorno ai 12€ su Mouser) il che ne fa una scheda piuttosto interessante.
Normalmente si programmerebbe tramite l'editor online di Mbed. Il compilatore genererà dal nostro codice un file con estensione bin. Collegando la scheda verrà montato un volume, chiamato "NUCLEO" sul quale caricare il file bin. Quando la scheda verrà resettata, il codice verrà eseguito. È possibile anche usare editor offline con toolchain di compilazione come Eclipse. Non credo sia possibile usare la IDE di Arduino.
Installazione MicroPython
Primo tentativo
Toolchain e OpenOCD
Per compilare vi servirà la toolchain gcc-arm-embedded. Non è nei repo ufficiali quindi la dovete installare a mano oppure aggiungere un PPA. https://launchpad.net/gcc-arm-embedded Il programma per comunicare col debugger della scheda, openocd, invece è nei repo di Debian.
Come installare MicroPython
Potete seguire la guida di Carmine per la compilazione. Ovviamente se avete installato la toolchain con apt non è necessario aggiungere il path a tutti i comandi, perché sono già dentro a /usr/bin.
OpenOCD ci permette di caricare il firmware che abbiamo crosscompilato. Basterà lanciare il comando:
$ openocd -f board/st_nucleo_f4.cfg
Un LED della scheda dovrebbe lampeggiare rosso/verde. Il debugger è attivo. Per collegarcisi:
$ telnet localhost 4444
e poi scrivete:
> reset halt
e infine:
> flash write_image erase <file .elf da flashare>
Inizialmente non sembrava funzionare. Il tentativo finale che ha sbloccato la situazione è stato dare il comando shutdown. Non sono sicuro però che sia stato proprio quel comando e bisognerebbe indagare meglio.
Usare MicroPython dall'interprete
Aprendo la porta della nostra scheda (la trovate su dmesg non appena la attaccate, è /dev/ttyACMx dove x è un numero che parte da 0) con un emulatore di terminale (come console) alla velocità di 115200 baud, dovreste vedere l'interprete dei comandi di MicroPython. Provate a dare il comando:
>>> pyb.LED(1).on()
per vedere se si accende il LED onboard.
Usare MicroPython dal PC
Fra i tool di MicroPython, che trovate nella cartella di git micropython/tools, c'è pyboard.py, un programma che vi permette di eseguire uno script in MicroPython. Se la vostra porta non è accessibile dall'utente dovrete usare sudo.
# ./pyboard.py <nome file>.py
Caricare uno script
Carmine ha fatto una modifica a pyboard in modo che possa caricare un file sulla board.
# ./pyboard.py --device=/dev/ttyACMx --send <nome file>.py
MicroPython ha due file di default quando viene installato: boot.py e main.py. Il primo è un file di sistema che serve allo stesso MicroPython di partire. Non occorre di solito modificarlo. Il secondo, main.py, è uno script che viene eseguito all'avvio. Se carichiamo un file main.py questo verrà eseguito all'accensione.
Considerazioni finali
Molto bene, ma la versione di micropython non è aggiornata. Forse è per questo che non riesco a far funzionare la porta I²C?
Secondo tentativo
Boochow fornisce dei firmware già compilati su https://blog.boochow.com/micropython-firmware-for-mbed-boards basta scegliere la board giusta e caricare il file .bin nel volume "NUCLEO" che si monta quando si collega la USB.
Caricare uno script
Un modo piuttosto comodo di inviare e ricevere file sulla flash della Nucleo è usare uPyLoader: https://github.com/BetaRavener/uPyLoader/ ma quasi sempre dà un errore di timeout.
Il programma fornito da Adafruit sembra funzionare decisamente meglio https://learn.adafruit.com/micropython-basics-load-files-and-run-code/install-ampy
Per installarlo usare pip (o pip3):
pip install adafruit-ampy
Per usarlo:
ampy -p <porta seriale> put <nome file>