
Raspberry PI PICO – Caratteristiche tecniche
- Sistema – Microcontroller RP2040. Processore dual-core Arm Cortex M0+, velocità di clock flessibile sino a 133MHz, 264KB di SRAM e 2MB di memoria Flash on-board.
- GPIO – 26×multi-function 3.3V GPIO pin, 2×SPI, 2×I2C, 2×UART, 3×12-bit ADC, 16×controllable PWM channel, 8×Programmable I/O (PIO) state machine per il supporto di periferiche custom.
Programmazione – MicroPython
- PICO supporta i linguaggi di programmazione C++ e Python.
- Il codice sorgente non deve essere compilato, ma caricato all’interno della memoria FLASH.
- La compilazione (C++) o l’interpretazione (PICO utilizza l’interprete MicroPython) del codice è eseguita direttamente all’interno del microcontrollore.
- Per poter programmare PICO, il primo passo consiste nel farlo rilevare dal PC come memoria di massa: tenere premuto il pulsante BOOTSEL e collegare il microcontrollore ad una porta USB. Questa passo è necessario sia che si lavori in C++ che in MicroPython.
- Affinchè PICO interpreti gli script realizzati in MicroPython bisogna caricargli l’interprete. L’interprete è un file con estensione .uf2 che, con un semplice drag and drop, deve essere copiato sulla memoria di massa. Al termine della copia, PICO verrà disconnesso come memoria di massa e verrà generata una porta COM sulla quale resterà in ascolto. Da questo momento in poi, ogni volta che PICO verrà riconnesso al PC senza premere il pulsante BOOTSEL verrà riconosciuto come porta COM.
- L’editor che permette di programmare in Micropython e comunicare con PICO è Thonny (Pagina ufficiale).
La guida completa per configurare l’ambiente l’ho trovata su questo sito: www.maffucci.it, seguendola ho avuto qualche problema perché nella lista degli interpreti non ho trovato MicroPython(Raspberry PI Pico), inoltre ho dovuto scaricare un secondo file .uf2 perché con il primo, scaricato da raspberrypi.org (Download diretto), non ci si riusciva a collegare alla porta in ascolto.
Procedura configurazione ambiente
- Scaricare il file .uf2 da micropython.org (Download diretto). La versione che ho utilizzato è la seguente: rp2-pico-20210618-v1.16.uf2.
- Drag and drop del file .uf2 su PICO riconosciuto come memoria di massa. Il comando lsusb, prima del caricamento del file .uf2 riconosce PICO come Raspberry Pi RP2 Boot, dopo il caricamento come MicroPython Board in FS mode e gli assegna: Board CDC (/dev/ttyACM0).
- Selezionare da Thonny, alla voce Esegui->Interprete, l’opzione MicroPython(generic) e come porta quella riconosciuta: Board in FS mode – Board CDC (/dev/ttyACM0).
Il seguente script è stato realizzato per verificarne il funzionamento:
|
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 30 31 32 33 34 35 36 37 38 39 |
from machine import Pin led=Pin(25, Pin.OUT) selezione = 0 acceso=False led.value(0) while True: print ("\n") print ("-----------------------------------") print (" OPERAZIONI") print ("-----------------------------------") print (" 0. Spegnimento LED") print (" 1. Accensione LED") print (" x. Uscita") print ("-----------------------------------") selezione = input("Opzione: ") #*********************************** if selezione=="0": if acceso: led.value(0) acceso=False else: print("Il led è già spento") #********************************** elif selezione=="1": if acceso: print("Il led è già acceso") else: led.value(1) acceso=True #*********************************** elif selezione in ["x","X"]: print (">>> CIAO!") break #*********************************** else: print (" >>> OPZIONE NON VALIDA") #*********************************** |
L’editor Thonny permette di salvare gli script creati, sia in locale (pulsante Questo computer) che su PICO (pulsante MicroPython device). Il nome del file deve avere estensione .py, ma se deve essere salvato su device bisogna ricordarsi che i nomi boot.py e main.py sono riservati.
Esecuzione automatica: main.py
Per far eseguire automaticamente lo script da PICO, dopo averlo creato con Thonny, bisogna salvarlo sul device con nome main.py, questo perchè, all’avvio, MicroPython esegue due script per impostazione predefinita: boot.py e main.py, in quest’ordine. Per testare ‘la cosa‘ è stato realizzato il seguente script che accende/spegne il led on board ogni 3 secondi.
|
1 2 3 4 5 6 7 8 9 |
from machine import Pin from time import sleep led=Pin(25, Pin.OUT) while True: led.value(1) sleep(3) led.value(0) sleep(3) |
NOTA – Se all’interno del file main.py inserisco delle funzioni print("qualcosa"), quando collego PICO al PC tutto funziona perfettamente ma l’output non viene visualizzato in console. Non so se è un problema o la cosa deve andare così. Per visualizzare l’output in console c’è bisogno di un riavvio software da Thonny: Esegui -> Invia un EOF.
