materiali del corso Vibe Coding con Led e Sensori
2 febbraio 2026 - Santarcangelo
10 aprile 2026 - Rimini
Esempio di riepilogo usando ChatGPT versione free.
Imparare a collegare:
- input analogici (sensori)
- output digitali (LED WS2812)
- dati da Internet (meteo)
- Board: ESP32-C3 Supermini
- Firmware: CircuitPython 10
- A2 → IO2 → sensori analogici Grove
- D20 → IO20 → strip 8 LED WS2812
- Potenziometro
- Temperatura
- Luce
- Suono
Accendere un LED alla volta ruotando il potenziometro.
- Il potenziometro produce valori da 0 a 65535
- Li trasformiamo in numeri da 0 a 7 (8 LED)
importboardimportanalogioimportneopixelimporttimepot=analogio.AnalogIn(board.IO2)
leds=neopixel.NeoPixel(board.IO20, 8)
whileTrue:
valore=pot.valuelivello= (valore*8) //65536iflivello>7:
livello=7leds.fill((0, 0, 0))
leds[livello] = (0, 10, 0)
time.sleep(0.05)Usare il potenziometro come se fosse una temperatura reale.
- 10°C → freddo
- 30°C → caldo
- Convertire il valore analogico in temperatura
- Convertire la temperatura in LED
- Cambiare colore
importboardimportanalogioimportneopixelimporttimepot=analogio.AnalogIn(board.IO2)
leds=neopixel.NeoPixel(board.IO20, 8)
whileTrue:
valore=pot.value# temperatura simulata (10–30°C)temperatura=10+ (valore*20//65535)
# temperatura → LEDlivello= (temperatura-10) *8//20iflivello<0:
livello=0iflivello>7:
livello=7# coloriiflivello<=2:
colore= (0, 10, 20) # freddo (azzurro)eliflivello<=5:
colore= (20, 8, 0) # medio (arancione)else:
colore= (20, 0, 0) # caldo (rosso)leds.fill((0, 0, 0))
leds[livello] =coloretime.sleep(0.05)Visualizzare la temperatura di domani usando Internet.
- SSID: Ospiti-88
- Password: Ospiti-88
- Open-Meteo (gratis, senza API key)
importboardimportneopixelimportwifiimportsocketpoolimportsslimportadafruit_requestsimporttimeleds=neopixel.NeoPixel(board.IO20, 8)
wifi.radio.connect("Ospiti-88", "Ospiti-88")
pool=socketpool.SocketPool(wifi.radio)
requests=adafruit_requests.Session(pool, ssl.create_default_context())
whileTrue:
url="https://api.open-meteo.com/v1/forecast?latitude=44.06&longitude=12.57&daily=temperature_2m_max&timezone=auto"response=requests.get(url)
dati=response.json()
temperatura=dati["daily"]["temperature_2m_max"][1]
print("Temperatura domani:", temperatura)
livello=int((temperatura-10) *8/20)
iflivello<0:
livello=0iflivello>7:
livello=7iflivello<=2:
colore= (0, 10, 20)
eliflivello<=5:
colore= (20, 8, 0)
else:
colore= (20, 0, 0)
leds.fill((0, 0, 0))
leds[livello] =coloreresponse.close()
time.sleep(600)- Lettura input analogico
- Conversione di valori (mapping)
- Uso dei LED WS2812
- Colori RGB
- Connessione WiFi
- Richieste HTTP
- Lettura dati JSON
- Barra LED (tipo termometro)
- Colori graduali (sfumature)
- Mostrare temperatura minima e massima
- Cambiare città
- Animazioni LED
- Codice semplice
- Poche funzioni
- Tutto visibile e modificabile
- Imparare facendo (Vibe Coding)