Raspberry Pi: Desk weather station

Il progetto che propongo in questo articolo non è il solito circuito con vari sensori in grado di effettuare letture e registrare dati. Questo è più una sorta di "station" da tavolo che visualizza, su un LCD 20x4, le previsioni meteo lette dal canale Yahoo, l'orario e data, temperatura/umidità esterna e temperatura interna al locale. In realtà il progetto nacque per far pratica sulla board Raspberry Pi poi, invece, si rilevò anche un oggetto utile per la casa. L'articolo si concentra non tanto sulla realizzazione dell'oggetto in sé ma sulle varie funzioni del circuito e sull'approfondimento del programma scritto in Python. Alcune particolarità della station sono la visualizzazione delle previsioni meteo in Italiano, la possibilità di registrare i dati letti dal sensore DS18B20 in Google Drive, l'invio del meteo giornaliero in email e la gestione vocale, tramite un altoparlante amplificato e una scheda audio USB, per la lettura dell'orario e della temperatura.

Come detto, questo progetto nasce per fare pratica con la Raspberry Pi, per tanto ho cercato d'inserire diverse funzioni da sperimentare; tra queste troviamo:

  1. Visualizzazione dei dati sul lcd 20x4 :
    1. Data;
    2. Ora;
    3. Temperatura esterna;
    4. Umidità esterna;
    5. Temperatura interna;
    6. Previsioni meteo odierna di una città a scelta;
    7. Previsioni meteo per i successivi 4 giorni;
  2. Gestione vocale per la lettura della:
    1. Data;
    2. Ora;
    3. Temperatura;
    4. Umidità.
  3. Invio email giornaliero a orario stabilito con:
    1. Previsioni meteo della giornata;
    2. Proverbio del giorno.
  4. Gestione dei dati:
    1. Scrive periodicamente i dati letti su un file xls in Google Drive.

Le informazioni appaiono sullo schermo con data e ora nella prima riga, temperatura interna/esterna e umidità alla seconda riga, nelle restanti due le previsioni meteo alterandosi un giorno alla volta ogni cinque secondi.

PI Weather

Tutte queste funzioni utilizzano vari moduli e applicativi, alcune di terze parti e altre di mia realizzazione, gestite dal programma principale nominato "index.py". Nel dettaglio sono organizzati nel seguente modo:

PI Weather

Index.py: programma principale che gestisce moduli e applicativi come "espeak" per la sintesi vocale, "pywapi" per le previsioni meteo, "gspread" per il salvataggio dei dati in Google Drive, "HD44780_20x4.py" per la gestione del display, inoltre configura e invia l'email con le previsioni del giorno e in fine legge i valori della temperatura interna dal sensore DALLAS DS18B20 (già visto in un altro articolo).

pywapi.py: una classe che, tramite codice della propria città, ricava i dati delle previsioni meteo da un server a scelta tra "Yahoo! Weather", "Weather.com" o "NOAA"; per questo progetto ho scelto di utilizzare "Yahoo! Weather". I dati ricevuti dal server sono in Inglese ma volendo però visualizzare il testo in Italiano ho realizzato un modulo, nominato "previsioni.py", per la traduzione dei testi. Il principio di funzionamento è semplice; ho registrato in una funzione dizionario tutti i testi delle previsioni generabili dal server (circa 47) per essere poi confrontate col dato ricevuto e restituire la corrispondenza in Italiano. Raramente capita che il server meteo venga aggiornato con dei nuovi codici e testi di previsione, di conseguenza il programma (index.py) non troverà la corrispondenza per la traduzione nel suo dizionario, in tal caso provvederà a creare un file di testo, nominato "newforecast", con i testi delle mancate traduzioni. I testi tradotti possono essere inseriti manualmente nel dizionario senza pregiudicare il funzionamento del programma principale. Esempio della struttura di "previsioni.py":

diz_terms={'sunrise':'Alba','sunset':'Tramonto','Partly Cloudy':'Parz. nuvoloso','Sunny':'Soleggiato','Showers':'Pioggia leggera',
           'Scattered Thunderstorms':'Temporali dispersi','PM Thunderstorms':'Temporale al PM','AM Thunderstorms':'Temporali al AM','Thunderstorms':'Temporali', ....

proverbi.py: un dizionario con 366 proverbi corrispondenti uno per ogni giorno dell'anno (29 Febbraio compreso). Il proverbio corrispondente alla data corrente verrà allegato alla email con le previsioni del giorno. In index.py è possibile inserire l'invio email a più destinatari.

HD44780_20x4.py: un modulo per la configurazione e gestione del LCD tipo HITACHI HD44780.

Schema elettrico

PI Weather (1)

Lo schema elettrico è composto da un LCD 20x4 della HITACHI, un trimmer per regolare il contrasto del LCD, un sensore temperatura [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3414 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici PREMIUM e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA con PAYPAL è semplice e sicuro.

Abbonati alle riviste di elettronica

11 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 8 dicembre 2015
    • Ernesto Sorrentino 9 dicembre 2015
  2. Daniele Cacciabaudo 10 dicembre 2015
  3. Fabio Musicco 10 dicembre 2015
  4. f.amantea 18 dicembre 2015
  5. L0cutus L0cutus 19 gennaio 2016
  6. Nicola Ricco 22 gennaio 2016
  7. mihaium 27 gennaio 2016
  8. Ottavio gemelli 19 febbraio 2016
  9. Luca.Confortola 29 novembre 2016

Scrivi un commento

ESPertino è la nuova scheda per IoT compatibile ARDUINO.
Scopri come averla GRATIS!