Raspberry Pi Pico W per ricordarsi di annaffiare le piante

Come sviluppare un sistema basato su Raspberry Pi Pico W che informa l'utente quando una pianta deve essere annaffiata. Un esempio di codice MicroPython da personalizzare secondo le proprie esigenze e necessità.

Raspberry Pi Pico W è una scheda di sviluppo a basso costo che integra, diversamente rispetto al modello rilasciato in precedenza, anche la connettività wireless WiFi. La lettera “W” si riferisce  proprio alla presenza di questa utile caratteristica. Il dispositivo poggia il suo funzionamento sul microcontrollore RP2040, sviluppato da Raspberry Pi Foundation.

Uno degli esempi di utilizzo più classici di un prodotto come Raspberry Pi Pico W, è la realizzazione di un dispositivo capace di rilevare l’umidità del terreno e segnalare all’utente quando essa scende al di sotto del valore soglia impostato. I maker possono quindi utilizzare Raspberry Pi Pico W per realizzare un sistema in grado di ricordare quando annaffiare le piante, particolarmente utile nel periodo estivo.

Come funzionano i sensori di umidità del terreno

I sensori di umidità del terreno, noti anche come sensori di umidità del suolo, utilizzano generalmente il principio della misurazione capacitiva. Questi sensori sono infatti costituiti da due elettrodi o piastre conduttive separate da un dielettrico. Il terreno umido funge da conduttore elettrolitico, con il terreno secco che risulta meno conduttivo.

Il sensore converte il segnale di variazione della capacità elettrica del terreno in un segnale elettrico proporzionale al valore di umidità rilevato. Quest’ultimo può quindi essere mostrato su un display oppure trasmesso a un sistema di monitoraggio o controllo. L’idea è quella di collegare il sensore ai pin GPIO (General Purpose Input/Output) presenti sulla scheda Raspberry Pi Pico W quindi sviluppare del semplice codice che permetta di gestire i valori via via acquisiti.

Schema Raspberry Pi Pico W

L’immagine appartiene a Raspberry Pi Ltd, è tratta dalla documentazione ufficiale ed è pubblicata sotto licenza CC BY-SA.

Raspberry Pi Pico W per ricordarsi di annaffiare le piante, soprattutto d’estate

Il progetto di un sistema per rilevare l’umidità del terreno e informare l’utente quando è necessario innaffiare le piante è uno dei più “gettonati” in ambito Raspberry. Sul sito Web della fondazione, sono pubblicati esempi per realizzare il sistema ascrivibile a pieno titolo al mondo dell’Internet delle Cose (IoT).

Oltre alla scheda Raspberry Pi, per provare a sviluppare il progetto, è possibile ricorrere a una mezza basetta o breadboard: è uno strumento utilizzato per creare prototipi e sperimentare circuiti elettronici in modo rapido senza bisogno di saldature permanenti. C’è inoltre bisogno del sensore di umidità del terreno da acquistare anch’esso a parte e da collegare poi ai pin GPIO sulla Raspberry Pico W. Il collegamento è piuttosto semplice: servono i due pin di alimentazione 3V3 e GND mentre un terzo cavetto deve essere connesso al pin GP26 per trasferire alla scheda il valore letto dal sensore. In alternativa, come mostrato in questo video, è possibile provare a utilizzare un pezzo di corteccia di pino o di abete a mo’ di sensore.

MicroPython e Thonny: per dialogare con il sensore Raspberry Pi Pico W tramite codice

Raspberry Pi Pico W supporta diversi linguaggi di programmazione, inclusi MicroPython e C/C++. Una caratteristica, questa, che rendono la scheda adatta sia ai principianti che agli sviluppatori più esperti.

MicroPython è una versione del linguaggio di programmazione Python ottimizzata per i microcontrollori e le piattaforme embedded. È una implementazione leggera di Python che offre un ambiente di sviluppo semplice e intuitivo per la programmazione di dispositivi a bassa potenza. Il download di MicroPython può essere effettuato dal sito Web di Raspberry.

Tenendo premuto il pulsante BOOTSEL sulla scheda Raspberry Pi Pico W, quindi collegandola al PC mediante un cavo USB, il pulsante deve essere rilasciato non appena la scheda è riconosciuta dal sistema operativo (dispositivo di memorizzazione di massa chiamato RPI-RP2). Trascinando il file UF2 di MicroPython sull’unità di memorizzazione corrispondente alla scheda Raspberry, quest’ultima provvede ad avviarsi accettando in ingresso codice Python.

Per scrivere codice MicroPython è necessario ricorrere a un editor. L’editor di base, peraltro anche il più semplice che consiglia Raspberry, si chiama Thonny. Dopo aver installato e avviato il programma, è necessario portarsi nel menu Tools, Options quindi fare clic sulla scheda Interpreter. Qui va selezionata la voce MicroPython (Raspberry Pi Pico).

Scrivere il codice per il sistema di rilevamento di umidità

Semplice codice MicroPython come il seguente definisce due funzioni: una (connect_wifi) viene utilizzata per stabilire la connessione della scheda Raspberry Pi Pico W con la rete WiFi locale; l’altra (send_email) si occupa di inviare un’email all’utente allorquando l’umidità del terreno dovesse scendere sotto il valore soglia impostato.

Ovviamente non ci sono limiti per quanto riguarda l’invio delle notifiche: si può spedirle, ad esempio, tramite Telegram (servendosi delle sue API) oppure servirsi di AWS e del protocollo MQTT (Message Queue Telemetry Transport), ampiamente abbracciato dai dispositivi IoT moderni.

import machine
import time
import urequests
import network

# Configurazione della connessione WiFi
WIFI_SSID = “NOME_WIFI”
WIFI_PASSWORD = “PASSWORD_WIFI”

# Configurazione del server di posta elettronica
EMAIL_SERVER = “smtp.abc.test”
EMAIL_PORT = 587
EMAIL_USERNAME = “username_posta”
EMAIL_PASSWORD = “password_posta”
EMAIL_SENDER = “mittente@abc.test”
EMAIL_RECIPIENT = “destinatario@abc.test”

# Definisci il pin a cui è collegato il sensore di umidità del suolo
moisture_sensor_pin = machine.ADC(26)

# Valore di soglia per l’umidità del suolo, da regolare in base alle esigenze della pianta
umidita_soglia = 400

# Funzione per inviare un’email
def send_email(subject, body):
payload = {
“subject”: subject,
“body”: body,
“from”: EMAIL_SENDER,
“to”: EMAIL_RECIPIENT
}

response = urequests.post(“http://{}:{}/send-email”.format(EMAIL_SERVER, EMAIL_PORT), json=payload, headers={“Content-Type”: “application/json”})
print(“email inviata. Codice risposta:”, response.status_code)

# Connetti Raspberry Pi Pico W alla rete WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
pass
print(“Connesso alla WiFi:”, wlan.ifconfig())

connect_wifi()

while True:
# Leggi il valore di umidità del terreno
valore_letto = moisture_sensor_pin.read_u16()

# Verifica se il valore di umidità è inferiore alla soglia
if valore_letto < umidita_soglia:
subject = “La pianta ha bisogno di essere annaffiata!”
body = “La pianta necessita di acqua. Provvedi ad innaffiarla prima possibile.”
send_email(subject, body)

time.sleep(3600) # Attendi un’ora prima di effettuare una nuova lettura

L’ultima parte del codice attiva un ciclo while infinito che si occupa di leggere il valore dell’umidità del terreno a distanza di un’ora (3600 secondi). Quando il valore letto è inferiore a quello di soglia, il codice MicroPython così sviluppato dispone l’invio di un messaggio di posta.

Ovviamente, tutti i valori definiti nella parte iniziale devono essere personalizzati specificando i dati per l’accesso alla rete WiFi locale e i parametri per inviare le email tramite un server SMTP.

Memorizzando il codice con il nome di main.py nella scheda Raspberry Pi Pico W, il caricamento della semplice routine avviene ogni volta che la scheda viene spenta e poi riaccesa.

Infine, seguendo le indicazioni riportate nel documento di supporto Powering your Pico, è possibile valutare l’alimentazione a batteria del sistema così da svincolarsi dalla connessione alla presa elettrica a muro mediante cavo USB.

Ti consigliamo anche

Link copiato negli appunti