Basi · 13 min di lettura

Raspberry Pi Pico programmazione a blocchi: sensori e MicroPython

Raspberry Pi Pico e programmazione a blocchi: leggi un LDR e un HC-SR04 con i blocchi accanto al C++, usa il Monitor seriale e passa a MicroPython con Thonny.

La programmazione a blocchi del Raspberry Pi Pico con MicroPython diventa molto più semplice quando sai già leggere un sensore con i blocchi. Leggere un sensore con i blocchi significa ottenere un valore senza scrivere codice: il blocco «lettura analogica A0» prende il livello di luce da un LDR e il blocco «stampa su seriale» invia quel numero al Monitor seriale del computer. In questo articolo leggerai prima i sensori con i blocchi su Arduino attraverso i progetti con LDR e HC-SR04, confrontando ogni blocco con la sua riga analogRead(), Serial.begin(), Serial.println() o pulseIn(). Poi farai il passo dalla programmazione a blocchi a MicroPython sul Raspberry Pi Pico e vedrai cosa cambia quando gli stessi blocchi diventano codice Python.

Questo articolo è la parte 5 della serie Dai blocchi al codice. Nella parte precedente abbiamo confrontato cicli e variabili nei blocchi e in C++; la prossima e ultima parte è un piano di lezione di robotica con la programmazione a blocchi per insegnanti.

Finora tutti i programmi della serie agivano verso l'esterno: abbiamo acceso LED, letto un pulsante e costruito un contatore con un ciclo. Leggere un sensore funziona al contrario: la scheda misura l'ambiente e tu vedi il numero. Per questo qui entra in gioco la porta seriale, perché il modo più semplice per capire cosa misura un sensore è vederne il valore sullo schermo. Nella seconda metà, i blocchi dei progetti per Raspberry Pi Pico corrispondono a MicroPython invece che al C++. Tutti i progetti usati sono gratuiti in BlueGrays e il codice citato è esattamente quello del progetto.

Cosa significa leggere un sensore: ingressi digitali e analogici

Un pulsante segnala solo due stati: premuto o no. Lo leggi con il blocco di lettura digitale del pin (digitalRead) e il risultato è 0 o 1. Componenti come un LDR, un potenziometro o un sensore di umidità del terreno danno invece tutti i valori intermedi: la tensione sul pin varia in modo continuo tra 0 e 5 V. Il circuito che trasforma questa tensione in un numero è l'ADC (convertitore analogico-digitale). L'ADC dell'Arduino Uno è a 10 bit: divide la tensione in 1024 passi e restituisce un numero da 0 a 1023, con ogni passo pari a circa 4,9 mV. ESP32 e Pico hanno ADC a 12 bit che lavorano a 3,3 V. Questa differenza tra le schede è una delle fonti di confusione più comuni quando si passa dai blocchi al codice; trovi i dettagli nell'articolo ADC e conversione analogico-digitale.

SchedaADCIntervallo di valoriTensione di riferimentoCodice
Arduino Uno10 bit0–10235 VanalogRead(A0)
ESP3212 bit0–4095Circa 3,3 VanalogRead(34)
Raspberry Pi Pico12 bit (read_u16 li scala a 16 bit)0–655353,3 VADC(26).read_u16()

Leggere un LDR con i blocchi su Arduino

Il nostro primo esempio è il progetto Misurare l'intensità luminosa con LDR. Un LDR è una resistenza il cui valore scende quando la luce aumenta; da solo non produce alcuna tensione. Per misurarlo lo mettiamo in serie con una resistenza fissa da 10 kΩ, formando un partitore di tensione, e colleghiamo il punto centrale ad A0. Con il collegamento qui sotto l'LDR sta dal lato dei 5V, quindi con più luce salgono la tensione su A0 e la lettura; se scambi l'LDR e la resistenza, il verso si inverte. Puoi calcolare l'uscita del partitore per diversi valori dell'LDR con il calcolatore del partitore di tensione e vedere quanti ohm ha un LDR al buio e in piena luce nell'articolo sensore di luce LDR. La colonna del Pico la useremo nell'esempio MicroPython alla fine.

CollegamentoArduino UnoRaspberry Pi Pico
Piedino 1 dell'LDR5V3V3(OUT), pin fisico 36
Piedino 2 dell'LDR + un capo della 10 kΩ (punto centrale)A0GP26 / ADC0, pin fisico 31
Altro capo della 10 kΩGNDGND, pin fisico 38 (o AGND, pin 33)
Intervallo di lettura0–10230–65535
Blocchi del progetto Misurare l'intensità luminosa con LDR
Blocchi del progetto Misurare l'intensità luminosa con LDR: value viene dichiarata in «variabili globali (all’inizio)», «setup (una volta)» avvia la porta seriale e «ripeti per sempre» legge A0 e lo stampa ogni 500 ms.

Leggi i blocchi dall'alto verso il basso. Il blocco «dichiara intero (int) value = 0» dentro variabili globali (all’inizio) è la riga int value; in cima al codice. La sezione setup (una volta) contiene un solo blocco, «avvia seriale a 9600 baud», cioè Serial.begin(9600);. Dentro ripeti per sempre c'è prima «imposta value a lettura analogica A0», che è la riga value = analogRead(A0);. Poi ci sono due blocchi «stampa su seriale». Il primo stampa il testo «Value:» con l'opzione stessa riga e diventa Serial.print(); il secondo stampa value con a capo e diventa Serial.println(). Così ogni misura compare su una sola riga, per esempio «Value: 512». L'ultimo blocco, «attendi 500 ms», è delay(500);, quindi ottieni due letture al secondo. Per trasformare la lettura in tensione usa value × 5,0 / 1023: 512 corrisponde a circa 2,5 V. In una stanza buia il valore scende a qualche centinaio, con una torcia puntata sull'LDR supera 900; i numeri esatti dipendono dal tuo LDR e dalla luce ambiente.

C++ (Arduino IDE)
1int value;   // Işık değeri / Light reading (0-1023)
2
3void setup() {
4  Serial.begin(9600);   // Seri port 9600 baud / Serial at 9600 baud
5}
6
7void loop() {
8  value = analogRead(A0);   // LDR gerilimini oku / Read the LDR voltage
9  Serial.print("Value: ");
10  Serial.println(value);
11  delay(500);               // 0,5 sn bekle / Wait 0.5 s
12}

Aprire il Monitor seriale e leggere i valori

  1. Incolla il codice nell'Arduino IDE, scegli scheda e porta e fai clic su Carica.
  2. Al termine del caricamento fai clic sull'icona della lente in alto a destra oppure apri Strumenti > Monitor seriale (scorciatoia Ctrl+Maiusc+M).
  3. Imposta la velocità del Monitor seriale uguale a quella del codice: 9600 baud in questo progetto.
  4. Ogni mezzo secondo scorre una riga «Value: …». Copri l'LDR con la mano e guarda il numero scendere.
  5. Se vuoi vedere la variazione come grafico, apri Strumenti > Plotter seriale; gli stessi dati vengono disegnati come linea nel tempo.
  6. Le impostazioni di fine riga e l'invio di dati dal Monitor seriale alla scheda sono spiegati in dettaglio nell'articolo Monitor seriale di Arduino.
Se il Monitor seriale mostra caratteri senza senso, la velocità non corrisponde a quella del codice: se il programma ha il blocco «avvia seriale a 9600 baud», anche il monitor deve essere a 9600. Se tutti i numeri escono attaccati su una sola riga, nell'ultimo blocco «stampa su seriale» è selezionato stessa riga invece di a capo; nel codice significa scrivere print invece di println.

Distanza con l'HC-SR04: attesa in µs e durata dell'impulso

Blocchi del progetto HC-SR04 Misura della distanza (display seriale)
HC-SR04 Misura della distanza (display seriale): un impulso di 10 µs arriva a trigPin, la durata dell'impulso su echoPin viene moltiplicata per 0.034 e divisa per 2, e se la distanza è tra 3 e 100 cm viene stampata sulla seriale.

Il secondo progetto con sensore è HC-SR04 Misura della distanza (display seriale). Qui compaiono due blocchi nuovi. Il terzetto che comincia con «scrivi ALTO sul pin trigPin» dice al sensore di emettere un impulso di ultrasuoni: il blocco «attendi 10 µs» in mezzo è delayMicroseconds(10); ed è un'attesa mille volte più breve di «attendi … ms». Poi arriva «imposta duration a durata impulso ALTO sul pin echoPin (µs)», cioè la riga unsigned long duration = pulseIn(echoPin, HIGH);, che misura per quanti microsecondi il pin Echo resta ALTO. Il suono percorre nell'aria circa 0,034 cm/µs e quel tempo comprende andata e ritorno. Per questo «imposta totalPath a duration × 0.034» calcola il percorso completo e «imposta distance a totalPath ÷ 2» la distanza di sola andata. Per esempio, un impulso di 1000 µs vale 34 cm di percorso, quindi 17 cm di distanza; dato che distance è un int, i decimali vengono scartati. Infine il blocco «se distance > minDistance e distance < maxDistance» diventa if (distance > minDistance && distance < maxDistance) e stampa solo le misure tra 3 e 100 cm. Se il sensore non riceve l'eco, pulseIn() restituisce 0, e questo controllo tiene lontani dallo schermo anche quegli zeri sbagliati. Nel codice i pin sono trigPin = 7 ed echoPin = 6. Portata e precisione del sensore sono nell'articolo sensore di distanza HC-SR04.

La stessa idea sull'ESP32: un ADC a 12 bit

La versione ESP32 della stessa logica dell'LDR è il progetto Lettura dell'intensità luminosa con il modulo LDR ESP32. I blocchi corrispondono ancora al C++ e si leggono come su Arduino, con tre differenze. Primo, setup() fissa l'ADC a 12 bit con analogReadResolution(12), quindi analogRead() restituisce 0–4095 invece di 0–1023, e una soglia scritta per Arduino come «buio sotto 500» sull'ESP32 non ha lo stesso significato. Secondo, la porta seriale lavora a 115200 baud invece di 9600, quindi imposta anche il Monitor seriale a 115200. Terzo, sull'uscita AO del modulo LDR la tensione e il valore grezzo scendono quando la luce aumenta. Per questo il codice usa i valori di calibrazione RAW_DARK = 4000 e RAW_LIGHT = 100, mantiene la lettura in questo intervallo con constrain() e con map() la trasforma in 0 % per il buio e 100 % per la luce. Su un ESP32 DevKit classico l'LDR va al GPIO 34, un pin di solo ingresso collegato all'ADC1. Poiché i pin dell'ADC2 non si possono leggere con il Wi-Fi attivo, collegare i sensori analogici ai pin dell'ADC1 è una buona abitudine. Le caratteristiche generali della scheda sono nell'articolo Cos'è l'ESP32.

Dai blocchi a MicroPython sul Raspberry Pi Pico

Nei progetti per Pico i blocchi corrispondono a MicroPython invece che al C++. I blocchi hanno un aspetto familiare, ma il linguaggio sottostante è diverso: niente parentesi graffe né punti e virgola, i blocchi di codice sono delimitati dall'indentazione e non esistono le funzioni setup() e loop(). Facciamo il passaggio con il progetto più semplice, Accensione di un LED esterno con Raspberry Pi Pico (GP14 + breadboard). Il circuito è minimo: GP14 (pin fisico 19) va al piedino lungo del LED attraverso una resistenza da 220–330 Ω e il piedino corto va a GND (per esempio il pin fisico 18). Il programma accende il LED per mezzo secondo, lo spegne per mezzo secondo e a ogni passo scrive una riga nella Shell di Thonny. Se il Pico è nuovo per te, comincia dall'articolo Cos'è il Raspberry Pi Pico.

Blocchi del progetto LED esterno con Raspberry Pi Pico
Accensione di un LED esterno con Raspberry Pi Pico (GP14 + breadboard): il blocco «pin led : GP LED_PIN, USCITA» prepara il pin e dentro «ripeti per sempre» il LED resta acceso 0.5 secondi e spento 0.5 secondi.
MicroPython
1from machine import Pin
2import time
3
4# ============ PIN / PIN ============
5LED_PIN = 14                    # Boştaki herhangi bir GPIO / Any free GPIO
6led = Pin(LED_PIN, Pin.OUT)
7
8print("== BlueGrays: Pico Harici LED Blink ==")
9print("LED pin: GP" + str(LED_PIN))
10print("500ms yakip 500ms sonduruyor / 500ms on 500ms off")
11
12# ============ ANA DÖNGÜ / MAIN LOOP ============
13while True:
14    led.on()                    # LED'i yak / Turn the LED on
15    print("[LED] ACIK / ON")
16    time.sleep(0.5)
17
18    led.off()                   # LED'i söndür / Turn the LED off
19    print("[LED] KAPALI / OFF")
20    time.sleep(0.5)
BloccoMicroPythonNota
variabili globali (all’inizio) → dichiara intero (int) LED_PIN = 14LED_PIN = 14Python non usa nomi di tipo; la parola int non compare nel codice
setup (una volta)Tutte le righe prima di while TrueNon c'è un setup() separato; il file viene eseguito una volta dall'alto in basso
pin led : GP LED_PIN, USCITAled = Pin(LED_PIN, Pin.OUT)Pin arriva dalla riga from machine import Pin
stampa su seriale «…» a capoprint("…")print() aggiunge sempre un a capo
crea testo con «LED pin: GP» LED_PIN"LED pin: GP" + str(LED_PIN)Un numero non si può unire a un testo finché str() non lo trasforma in testo
ripeti per semprewhile True:Le righe interne sono rientrate di 4 spazi
accendi (on) il pin ledled.on()Porta il pin a 3,3 V, il LED si accende
attendi 0.5 seconditime.sleep(0.5)Il tempo è in secondi; 500 ms = 0.5
spegni (off) il pin ledled.off()Porta il pin a 0 V, il LED si spegne

Nella tabella saltano all'occhio quattro cose. Primo, le righe from machine import Pin e import time non hanno un blocco; in Python importi in cima i moduli che ti servono e i blocchi lo danno per scontato. Secondo, il blocco Arduino «avvia seriale a 9600 baud» qui non ha equivalente: sul Pico l'uscita di print() va direttamente via USB alla Shell di Thonny, senza velocità da impostare. Terzo, è cambiata l'unità dell'attesa: su Arduino «attendi 500 ms» è delay(500), mentre sul Pico «attendi 0.5 secondi» è time.sleep(0.5). Quarto, e più importante, l'indentazione: ogni blocco incastrato dentro «ripeti per sempre» si scrive nel codice con quattro spazi di rientro sotto la riga while True:. Se cancelli il rientro di una riga, quella riga esce dal ciclo; in Python gli spazi fanno il lavoro delle parentesi graffe del C++. Le altre regole di base sono nell'articolo basi di MicroPython.

Le stesse operazioni in tre linguaggi: blocchi, C++ e MicroPython

OperazioneBloccoArduino C++MicroPython (Pico)
Eseguito una voltasetup (una volta)void setup() { … }Righe prima di while True
Ripeti per sempreripeti per semprevoid loop() { … }while True: (rientrato)
Variabiledichiara intero (int) LED_PIN = 14int LED_PIN = 14;LED_PIN = 14
Pin di uscitaimposta pin … come USCITA / pin led : GP LED_PIN, USCITApinMode(14, OUTPUT);led = Pin(14, Pin.OUT)
Accendere il LEDscrivi ALTO sul pin … / accendi (on) il pin leddigitalWrite(14, HIGH);led.on()
Attendereattendi 500 ms / attendi 0.5 secondidelay(500);time.sleep(0.5)
Attesa breveattendi 10 µsdelayMicroseconds(10);time.sleep_us(10)
Lettura analogicalettura analogica A0analogRead(A0) → 0–1023ADC(26).read_u16() → 0–65535
Avviare la serialeavvia seriale a 9600 baudSerial.begin(9600);Non serve
Stampare e andare a capostampa su seriale … a capoSerial.println(x);print(x)
Stampare sulla stessa rigastampa su seriale … stessa rigaSerial.print(x);print(x, end="")
Unire testocrea testo conDue Serial.print() separati"LED pin: GP" + str(x)

Il tuo esempio: leggere un LDR sul Pico con MicroPython

Adesso portiamo il progetto LDR di Arduino sul Pico. Il collegamento segue la colonna del Pico nella tabella precedente: un piedino dell'LDR al pin 3V3(OUT), l'altro sia a GP26 sia a un capo della resistenza da 10 kΩ, e l'altro capo della resistenza a GND. Il Pico ha tre pin in grado di leggere valori analogici: GP26 (ADC0), GP27 (ADC1) e GP28 (ADC2). In MicroPython crei un oggetto ADC(26) e chiami read_u16(); anche se l'ADC del Pico è a 12 bit nell'hardware, questa funzione scala il risultato su 0–65535. Per ottenere la tensione moltiplica il valore per 3,3 e dividi per 65535. Il programma segue lo stesso flusso della versione Arduino: misura, stampa, attendi mezzo secondo. In più abbiamo aggiunto una soglia: quando la stanza diventa buia si accende il LED integrato. Ragionando a blocchi, le righe prima di while True sono la sezione «setup (una volta)», while True: è «ripeti per sempre», l'if/else è il blocco «se» della parte 3 della serie, led.on() è «accendi (on) il pin led», time.sleep(0.5) è «attendi 0.5 secondi» e il + str() dentro print() è il blocco «crea testo con». La riga ADC(26).read_u16() fa il lavoro del blocco Arduino «lettura analogica A0». Regola THRESHOLD in base ai numeri che vedi nella Shell nella tua stanza.

MicroPython
1from machine import Pin, ADC
2import time
3
4# ============ PIN / PIN ============
5ldr = ADC(26)                   # GP26 = ADC0, bölücünün orta noktası / divider midpoint
6led = Pin(25, Pin.OUT)          # Dahili LED; Pico W'de Pin("LED") / Onboard LED; Pico W: Pin("LED")
7THRESHOLD = 20000               # Karanlık eşiği, odana göre ayarla / Darkness threshold, tune for your room
8
9print("== BlueGrays: Pico LDR ==")
10
11# ============ ANA DÖNGÜ / MAIN LOOP ============
12while True:
13    value = ldr.read_u16()                      # 0-65535
14    voltage = value * 3.3 / 65535               # Volt / Volts
15    print("Value: " + str(value) + "  Voltage: " + str(round(voltage, 2)) + " V")
16
17    if value < THRESHOLD:                       # Az ışık = küçük değer / Little light = small value
18        led.on()
19    else:
20        led.off()
21
22    time.sleep(0.5)                             # 0,5 sn = 500 ms / 0.5 s = 500 ms

Caricare il codice sul Pico con Thonny e main.py

  1. Installa Thonny sul computer. Se il Pico non ha ancora MicroPython, tieni premuto il pulsante BOOTSEL mentre colleghi il cavo USB; alla prima connessione Thonny propone di installare MicroPython.
  2. In basso a destra in Thonny scegli MicroPython (Raspberry Pi Pico) come interprete. Se nella Shell in basso vedi il prompt >>>, la connessione è pronta.
  3. Copia il codice del progetto da BlueGrays e incollalo nell'editor di Thonny.
  4. Fai clic sul pulsante verde Esegui o premi F5. Il codice gira sul Pico e l'uscita di print() compare nella Shell. Per fermarlo usa il pulsante Stop (Ctrl+F2).
  5. Se vuoi che il codice funzioni senza computer, scegli File > Salva con nome, seleziona Raspberry Pi Pico nella finestra e chiama il file main.py. Il Pico esegue questo file automaticamente a ogni accensione, quindi basta un caricatore USB o un power bank.
  6. Se Thonny non vede la scheda, controlla cavo e driver nell'ordine indicato nell'articolo Raspberry Pi Pico non riconosciuto.

Altri progetti gratuiti a blocchi per Pico

  • Lampeggio LED integrato Raspberry Pi Pico (GP25): nessun cablaggio; fa lampeggiare il LED della scheda con LED_PIN = 25. Il codice è quasi identico a quello del progetto precedente: aprili uno accanto all'altro e vedrai che cambia solo il numero del pin. Sul Pico W il LED integrato è collegato al chip Wi-Fi, quindi si usa Pin("LED").
  • Raspberry Pi Pico Due LED alternati (GP14 + GP13): parte da stati opposti con led1.value(1) e led2.value(0) e nel ciclo applica toggle() a entrambi i LED. Poiché il codice scrive from time import sleep, l'attesa appare come sleep(0.5) invece di time.sleep(0.5).
  • Simulatore semaforo Raspberry Pi Pico (GP11/GP12/GP13): una funzione chiamata all_off() spegne tutti i LED; il verde resta acceso 4 secondi, il giallo 1,5 e il rosso 3, poi arriva una fase di partenza rosso+giallo di 1 secondo.
  • Raspberry Pi Pico Effetto lampeggiante polizia (GP11 + GP12): questa volta l'attesa è in millisecondi con sleep_ms(WAIT_MS), dove WAIT_MS = 300. Vedere la funzione in secondi e quella in millisecondi in due progetti diversi è il modo migliore per evitare l'errore più comune qui sotto.

Errori comuni e soluzioni

ErroreSintomoSoluzione
Scrivere time.sleep(500)Il LED si accende e resta così per più di 8 minutiIn MicroPython il tempo è in secondi: scrivi time.sleep(0.5) o time.sleep_ms(500)
Spostare l'indentazioneIndentationError o righe che non vengono eseguite nel cicloInizia ogni riga sotto while True: con gli stessi 4 spazi e non mescolare tabulazioni e spazi
Unire un numero a un testo senza str()TypeError: can't convert 'int' object to str implicitlyScrivi "LED pin: GP" + str(LED_PIN)
Dare 5 V a un pin ADC del PicoLetture sbagliate e rischio di danni permanentiIl Pico lavora con logica a 3,3 V; alimenta il partitore dal pin 3V3(OUT)
Portare una soglia Arduino sul PicoLa condizione «value < 500» dà sempre lo stesso risultatoConsidera l'intervallo: Uno 0–1023, ESP32 0–4095, Pico read_u16() 0–65535
Velocità del Monitor seriale diversaCaratteri senza sensoImposta il monitor alla velocità del codice: 9600 o 115200
Usare un pin ADC2 sull'ESP32Con il Wi-Fi attivo la lettura non funzionaCollega i sensori analogici ai pin dell'ADC1, come GPIO 32–39
Non salvare il file come main.pyIl codice gira da Thonny ma non dopo aver scollegato l'USBSalva il file sul Pico con il nome main.py

Continuare con i blocchi nell'app BlueGrays

Tutti i progetti di questo articolo sono gratuiti nell'app BlueGrays. Attivando l'interruttore Mostra a blocchi nella sezione codice di un progetto, al posto del codice compare lo stesso programma a blocchi; tocca l'immagine per aprirla a schermo intero. La scheda Capire i blocchi spiega il programma passo per passo e a ogni passo mostra solo i blocchi di quel passo e cosa fanno. Lì puoi vedere con calma cosa misura il blocco della durata dell'impulso nel progetto HC-SR04, o perché la parte di setup di un progetto per Pico viene prima di while True. Anche tutti gli esempi di comandi Arduino e MicroPython della Guida al codice sono mostrati a blocchi. Per mettere alla prova ciò che hai imparato, le Domande del giorno offrono ogni giorno 5 domande dal livello A1 al C2, una classifica settimanale e dei badge. Ricorda che i blocchi non vengono mai caricati direttamente sulla scheda: la scheda riceve sempre il codice reale del progetto, che copi nell'Arduino IDE per Arduino ed ESP32 o in Thonny per il Pico. Puoi filtrare l'elenco dei progetti per il badge dei blocchi e trovare tutti i progetti a blocchi per Arduino, ESP32 e Pico nella pagina programmazione a blocchi.

Con la porta seriale e la lettura dei sensori ora sai leggere tutti i mattoni di base di un progetto, sia a blocchi sia in codice. L'ultima parte della serie porta questi passi in classe: un piano di lezione di robotica con la programmazione a blocchi per insegnanti. Nel frattempo, nell'app BlueGrays puoi seguire passo per passo gli schemi e il codice dei progetti con LDR, HC-SR04 e LED su Pico, passare alla versione a blocchi dello stesso programma con Mostra a blocchi e seguire cosa fa ogni passo con Capire i blocchi.

Domande frequenti

Come si passa dalla programmazione a blocchi a MicroPython?

Il modo più semplice è guardare uno accanto all'altro i blocchi di un programma e il suo codice MicroPython. Dopo aver visto in qualche progetto che «ripeti per sempre» è while True:, «accendi (on) il pin led» è led.on() e «attendi 0.5 secondi» è time.sleep(0.5), cominci a leggere il codice senza blocchi. Poi modifica tu stesso piccoli dettagli come il tempo di attesa o il numero del pin.

Si può programmare il Raspberry Pi Pico con i blocchi?

In BlueGrays 10 progetti per Pico hanno la versione a blocchi, e quei blocchi corrispondono uno a uno al codice MicroPython; 5 sono completamente gratuiti. Sulla scheda si carica il codice MicroPython del progetto, non i blocchi: lo incolli in Thonny e lo esegui. Così capisci la logica con i blocchi e programmi la scheda con codice vero.

Perché analogRead di Arduino restituisce valori da 0 a 1023?

L'ADC dell'Arduino Uno è a 10 bit e divide l'intervallo 0–5 V in 1024 passi. 0 V si legge come 0 e 5 V come 1023, con ogni passo pari a circa 4,9 mV. Per trasformare la lettura in tensione usa value × 5,0 / 1023.

Perché read_u16 arriva fino a 65535 sul Raspberry Pi Pico?

L'ADC del Pico è a 12 bit nell'hardware, ma read_u16() di MicroPython scala il risultato a 16 bit perché l'intervallo sia lo stesso su schede diverse. Per questo 0 V si legge come 0 e 3,3 V come circa 65535. Le soglie che porti da Arduino vanno ricalcolate per questo intervallo.

In MicroPython time.sleep è in secondi o in millisecondi?

time.sleep() lavora in secondi: time.sleep(0.5) attende mezzo secondo. Per i millisecondi usa time.sleep_ms(500) e per i microsecondi time.sleep_us(10). Se lo confondi con il delay(500) di Arduino e scrivi time.sleep(500), il programma attende più di 8 minuti.

Come faccio a far girare sempre sul Pico il codice scritto in Thonny?

Salva il codice sul Raspberry Pi Pico con il nome main.py da File > Salva con nome. Il Pico esegue main.py automaticamente a ogni accensione, senza bisogno del computer. Se premi solo Esegui, il codice non viene salvato sul Pico e dopo un riavvio non parte.

Vedi tutti i progetti
Misurare l'intensità luminosa con LDR
#11Principiante

Misurare l'intensità luminosa con LDR

Vuoi vedere quanto è luminosa la tua stanza sotto forma di numero? L'LDR, un piccolo componente sensibile alla luce, misura la luce ambiente e l'Arduino scrive il valore sullo schermo del computer ogn

4.6(81)
138
HC-SR04 Misura della distanza (display seriale)
#27Principiante

HC-SR04 Misura della distanza (display seriale)

Il sensore HC-SR04 funziona come un pipistrello che trova la strada al buio: manda un suono che non puoi sentire, ne ascolta l'eco e misura quanto è lontano l'oggetto davanti a sé. L'Arduino scrive qu

4.6(46)
71
Lettura dell'intensità luminosa con il modulo LDR ESP32
#113Principiante

Lettura dell'intensità luminosa con il modulo LDR ESP32

Monitoraggio in tempo reale sul Serial Monitor del valore grezzo dell'ADC del modulo LDR e della percentuale relativa di luce calcolata dai valori di riferimento al buio e alla luce. Questa percentuale non è una misurazione in lux. Spiega il principio di calibrazione del modulo. È consigliabile eseguirlo prima del Progetto 10, poiché serve a determinare il valore di soglia.

4.6(36)
55
Accensione di un LED esterno con Raspberry Pi Pico (breadboard)
#148Principiante

Accensione di un LED esterno con Raspberry Pi Pico (breadboard)

Il passo successivo dopo il LED integrato di Pico: collegare un LED esterno alla breadboard e controllarlo tramite il pin GP14. Con questo progetto imparerai come utilizzare qualsiasi pin GPIO generico del Pico come uscita, la polarità del LED (stelo lungo = anodo/+, stelo corto = catodo/–) e perché è indispensabile un resistore di limitazione della corrente (220 Ω). Se non inserisci il resistore, l’LED riceverà una corrente eccessiva e potrebbe bruciarsi. Il circuito è molto semplice: Pico GP14

4.5(2)
7
Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W)
#147Principiante

Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W)

Il progetto di apertura della serie Raspberry Pi Pico! Facciamo lampeggiare il LED verde integrato per verificare che la scheda funzioni — un classico primo esperimento "Hello World". NESSUN componente esterno, solo Pico e cavo USB. Il codice è scritto in MicroPython (il linguaggio ufficialmente supportato dalla Raspberry Pi Foundation). Impara la classe machine.Pin, la modalità Pin.OUT, i metodi led.on()/off() e time.sleep() in Thonny IDE. Segui ogni commutazi

5.0(1)
10
Raspberry Pi Pico Due LED alternati (Flip-Flop)
#149Principiante

Raspberry Pi Pico Due LED alternati (Flip-Flop)

Il passo successivo dopo il LED singolo sul Pico: due LED lampeggiano alternativamente in un pattern flip-flop classico. Due LED di colori diversi (rosso su GP14, verde su GP13) scambiano stati ogni 500ms. Pin.toggle() di MicroPython rende il codice breve. Base di semafori, lampeggianti.

5.0(2)
19
Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali)
#150Principiante

Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali)

Simuliamo un vero semaforo con LED rosso, giallo e verde. Verde 4 sec "vai", giallo 1,5 sec "preparati", rosso 3 sec "fermati" e rosso+giallo 1 sec "partenza" (pattern europeo). Impara la definizione di funzione, la logica della macchina a stati e la sincronizzazione multi-GPIO. Circuito semplice: 3 LED su GP11/GP12/GP13.

4.0(1)
12
Raspberry Pi Pico Effetto Lampeggiante Polizia (Rosso + Blu Stroboscopio)
#151Principiante

Raspberry Pi Pico Effetto Lampeggiante Polizia (Rosso + Blu Stroboscopio)

Simuliamo il lampeggiante di un'auto della polizia con un Raspberry Pi Pico nella sua forma più semplice! I LED rosso e blu si alternano (flip-flop): mentre il rosso è acceso il blu è spento, e ogni 0,3 secondi si scambiano, all'infinito. Il codice scrive i due passi direttamente in un unico ciclo while True; la velocità si regola con la costante WAIT_MS.

4.7(3)
10