Raspberry Pi: Monitor meteo
Python: realizzare
un monitor meteo
Trasformatevi in esperti delle previsioni meteorologiche e tenete sotto
controllo la temperatura con la RP e Python
34
Rast tina iataomaperts
[oeerrscrermtentcmdevn
perauteedcazrcan ats pert
Samar stare, necedowes ie? newsto peas
Mmosrerano cme coun nied arpa
ab tncznrcoanfranol aac ase
suungutechemesirl erddlin epoca
colaees acerca amber
(qaunquerode con una cress ore ana
those danpersiraOSIBEDD un conan
‘co do tm tel etc tnmnevoat.
Satur otware eter dsOpen
esther Mapper egg idameto Satta AP
tea beanie tar erent
tga egrpata calm etna
tenon ance mse presen oda sto Pesae
(DotA dowtreptro ecco suMti7
cromosthemeron/apoctere wrecks Remote
dnomatangenedtwlnpocnoavetuonea
teoposenae Lav perme espera
te davon ou Wraps eco
nate moaloPytonpyoum che cere
Sraeroccre no scpsPVoncan soto re Pe
fare dow oaren ayo pcg ree
Toldotbreiovte Raby Recronloe ope
tate sen untamabe agane
cco progetto fini, Potete aimentarto usando una
batteriaaggiuntiva per smartphone cost da piazzare
circuit in mezzo al giardina Per proteggerto dalle intemperie
Ccomene perd mettera sotto un contenitore di plastica
sudo pip32 install prowm
Oraavate feditor Python (IDLE), aprteuna nuova finest
andando in Fle > Newe nziateilcodie importando
| madull necessar, Byowm él wrapper Python per
OpentWeatherMap, mentre dal modulo time dovete importare
solos funzione sleep che ser via successivamente por
controlare la veloc dl esecuzione del programma:
‘import pyowm,
fom time import sleep
Subito dopo bisogna dete una funzione che consente
Vinterrogezione de servizio meteo usando un solo co
invece ch una lungs sequenza distruzicn'
def got_weather(n:
Sinz assagrusido nome get weather als [unione,
Abbiamoinseito un argomento (n) rake perentesitondk: €
Uunlopzione per cambiar luogo d cui si cercano idati meteo.
Ps crea una variable owm che cortiene la vostra chive:
‘ow = pyown, OWML
(COPIATE QUILA VOSTRA CHIAVE)
Doveto copiare la vostra chive tra plc sgl per asicurar
che Python capisca che sitratta dna stringa. Nota questa
linea indentata per mostrare che appartiene ala funzione
appera creata. Subito dopo serve unatra variable:
‘observation = owm:weather_atplace())
(Questa vriablesi china observation e siusa come
seorciatoia.al nome dfunzione che raporesenta la posizione
usatanalloserpt
Controllare il tempo
Servoro tre due variabil da usare come scoriatoie une per
recuperere idatimeteoe unaperleggerela temperatura in
trad Cals:
cbeervaton get weather)
get temperature cass)
Nelutimalinea dela furzicne use ls funzone print per
stampare un messagaro per utente, quaicosa de tipo "La
temporctura.atuale a. Per creare questa stringa adopererete
la.concatenazione per inser posto cui avete ltt dat
(eppresentato dalla variable) fondo iloateruto
data variable a contenonto la tomperatura. Quest uma
variable putostospecaleperché reat sitatta un
dizionario Python che merexiza valor usando na copra
chave-valoreInquesto caso incichereteaPython dl cercare
lachiave tempi mostrare i sv0 valor:
rint("The curenttempercturea’,n)isaltemp‘DRaspberry Pi: Monitor meteo
Le API utilizzabili con Python
In questa guida facciamo ricorso adue API
(Application Program interfaces) necessari
| recuperare ica un servinio Web e per
creare un gratice partendo da determinati
‘Valor, Luso dalle API sono il metodo pid
valoce per patensiare i prop scrigt Python
avo iloro use pubessere anche
divertente,Pensate, per esempo, di sostture
le API Poty con quete di Meecraft
Potrestececidere ch maceire i monde
del gioco intase ala temperatura esterna:
se dove vitrovate dovesce neveae,potreste
{fare lnmodo che la stessa cosa cada
Nol abbiamo usato una breadboard per creare it
prototipo del nostro progetto, ma se volete dargll un
_aspetto pi professionale e “definitive” potete usare una
Perfboard (http://en.wikipedia.org /wiki/Perfboard)
‘odisegnare un PCB
La funzione di test & terminate, quindi salvate i
progetto e selezionate Run -> Run Medule dalla barra
doi menu di IDLE. La shell Python prendera vita ma
non accadra nulla, almeno finché non fornirete un
posizione richiamando 'apposita funzione:
‘et weather(“London uk")
Inaltemativapotete usare anche be ZIP code:
et weather("W12 7L5")
Dovteste vedere un output simte al seguente
4# The curent temperature at London ules 2206
Se tuito & andato come doveva, avete appena termineto
la funzione che recupers il valor della temperatura dal
servizio OpentWeatherMap.£ il momento di passare al
sensore di temperatura,
Prepara il sensore
I sensore ai temperatura goca un rca fondamentale in
questo progeta Vieneusato per leggere le temperatura det
luago incu vi trovete os de potertaconfrontre on valor
ffertida OperiMeatherMp. I sensee che abbiamo usato
2 1Dalas DSIBR20 che a 'aspetio dun ansistorAess0
vero calle refi quelorosso ve al pines 3.3 cella:
Le API offrono un metodo rapido ed
t’tficace per estendere le capacita di uno
script. Sono moti i progetti Open Source
‘a metterle a disposizione della comunita
Naps
cei
‘nso pogo
2tbare pazaio
tesco a
40nm ale
ei3veqlo
‘het
let omer
Ouest reste,
toa ul
seveatendor
state agalee
ssasserche
Siacomprscento
Flr eve
CColegati tutti component alimentate ta Raspberry Pi
eeattendte lawio dal desktop d Raspbian. Per usare#sensore
dovete configure la vostra RP. qundiaprteun terminate
edattae larga seguente:
sido leafpad fbootlonfigot
‘Siaperilfle d configurazione di boot. Scendete in fondo
afflce aggiungeto larga soguente:
lovelay=w-gpio
‘Salate @ navviaro 2 RP. Provate a vedere e tutto funziona
sempreda LXTerminal dgitat=
‘Saude modprobe v-gpio
‘Sudo modprobe wl therm
(Quest due comand caricano | modiul det keel necessar
per actedere a sonsore:esso legerala temparaturaatuale
la scriveré nun fle: poteteosservareiiconterustodi questo
‘io nol modo seguant:
‘Se /eysfoushe/devices
In questa directory dovete cercare una crtalla cheinizia con
28, quind deitate
Sis
per vedere i contenuto del folder. Indviduta la cartela
centratecicon ed
Sed 25.
.epo)starnpatea schermo ilcontenuto de fe wh_stave:
Scatwi slave
{Loutput di questo comando @ pttosto lungs. voi davete
corcarola riga cho nz con t=. Nelnostrocasoilvaloraetto
12 17.125 che, dviso per 1000 id 17125%, ichedmostra
che il sensor furziona corettamente, Saré quad pessibie
sarle per memorizareivalon temperatura grazie al codice
Python che vi mostriamo di segue, Comeal soltosiiniza
importendo i moduli necessarialfurz:onamento del progetto
In questo caso occorre|l modulo OS per concentra aPythen
dlinteragre con sisterra operativosottostant. i modulo
‘elob serve a gestreinomi de percors alterna det
flosystem, montre time viene utiizata per controlar
\elocta éesecuzione de! programma
Import os
impat giob
poet time
‘Aquesto punto si pud usare la funzione system i OS
per caticare due driver del kernel, uno per il GPIO e uno
por i sensor:
ca.ysteny{ modprobe wi-gpic})
cssystem{ maxrobe wher’) »Raspberry Pi: Monitor meteo
Subito dopo bisogna creare tre veriabil. La prima gestra
' posizione dol sensore di temperatura al interno do
filesystem. La seconda usa glob per trovare la directory
che contiene i dati del sensore. ultima viene usata per
agglungere il nome del fle che contiene | valor reg: strats
alla variable precedente:
base_dir= ‘sys/bushvidevicas*
device folder = glob giob(base dir +280]
Aovice file = device foldr +ft_save’
(Ora arrivano due linee di codice particolan.La prima crea
una variable globale chiamata temp_e che pud essere
sata allinterne e llesterno di una funzione che creerete
ta poco. La seconda, invece, genera una lista vuota,
Le liste sono siril agl array usati in altri linguage:
ein essa memorizzerete i dati di temperatura
Global temp
sensor=[
Serve ora la funzione che leggerd la temperatura
‘memorizzata nella variabile deviee file creata prima,
Aprirete questa file in sola lettura,leggete il suo
Eden
ETP
> Potete scaricare il codice di questa gud dall'URL t://bit!y/LXPIS7.meteo
contenuto ¢ pol richiudotelo, Pill avanti stamperete
{questi valor nella shel:
def ead temp ral:
S=open(device. le, ¥)
lines = freadlinead)
fciose)
retum lines
Lafunzione seguente gestise Ia lettura dela temperaturs
dal sonsore e manipoa i fusso di dati perelminareo cosa
supertiue. Come mostrato prima, bisogna diuidere per1.000
ildato registrao cos! da ottenore la corretta temperatura
def read temp
jbl temp_e
lines = eed temp raw)
‘while ines( stip){-3] = "YES:
timesleep(0.2)
tines = read temp sow
esquals_ pos = lines} nd
‘fequals_pos
temp. string =lines{afequals_pos 2]
‘emp.c=floatemp_sting)/ 10000
return temp_c
ra serve un cicloda esequie cinque vote: ogni terazione
‘stampa a tomperatura lta dal sonsore, s aggiunge questo
numero ali ista sensor e pola sistampa aspettanda 3600
second (urore) prima di ripetereil processo:
fori in range:
ineadterp0)
sensorappend{temp_«)
rint{sensor)
time.skop(3600)
Cormpltatoilcocice,savatelo ed eseguteo usando Run >
Run Module Senttew ther di cambiareintenvalo tempo
dattesa tra un ciclo e Fair
Impostare Plotly
Orasipassa ala parte gratia del progetto. Questa gestta
a Ploty. una sluziene grata hasta sulle che fonisce
uriecoalete AP per Python Davete cree un acount su
ittps:/ platy eottenere anche in questacaso ina chive
(on questa sottomana, aprte Terminal sulavostra
Raspbarry Pie insalateiimadul rehsto:
sudo pi-32 instal peiy
Aquesto punto doveteindfcae a Pct 1 vstonome uterte
sla vostrachiave dalle API. Sempre da termieae digtate
larga seguente (lunge. mad ununiceriga)
Spsthon-< impor plot pltytoos set credentials
Acquistare il sensore di temperatura
Per quest tule abbiaro usato snore
temperatura 0518620, checasta crea 5&
led 2un componente standard presente ache
Inaleunikit di ektvonica Adrelaventane
‘ste una versione modfiata,con ca ps
lung eresistontoalfacqua. incluso nol it
CamJam EduKit n2 vento ca stoMttpe//
thepitut.com.Prtrorpo questosito Web non
verde nelnosto paese per cucowete corre
‘al sensore standard che va comune
berissima, Sul marcato eison cwarents
‘anche desenscriaternativ, come popolan
DHT eDHTZ2. Quest senson, pero, uRaND uN
‘mado diferente dal DSIBB20 perinterfaciasi
conlaRaspoerry Pi. DHTIL/22 utizzane math
Lurautputanslogco perinvare it alla scheda
UsandoloconArduire nancasarebbero
problemi visto che questa pittaformaé dotata
diportearalogiche, mala RP non neha. Quin
sevolete sare questotino sensor cenlaRP,
dete poeurars un ADS (Analog fo Distal
Converter er consent al picool computer
cileggere dati sul temperatura. Questoct
portaa de che tsonsoredanoiusato lascoka
economics eanche quel id face do
‘mettere opera, ma sl lteter cee
civersarente,Raspberry Pi: Monitor meteo
{il{useriame=IL VOSTRO NOME UTENTE! apLhey=
[API KEY:stroam_ids=['STREAM ID:'STREAM ID]
Trovee tutte quest nfoerazion alTURL https://ploty/
python/getting-started dopo ave creeto un eccount
Assemblare il tutto
Finer aete croato eas delprogetto adesso bi momento
nie evare par, Asscuraten ck aver IDLE con pee)
dh ammestratore usando I comande segue da terminate
Ssuio idles
odie niin cane itruzion per importarei moduli necessa
per sistema operatno, nomi de flere flesysto, AP! per
| dat metea la tom porizazione ei gat
Import os
‘import glob
Jmport pyowmn,
fon time impor sleep
import plotlyplotly as py
from plotly.graph_objs import *
Subst dopo serve un posto cartralzatoin cuimemorzare
le chia dee AP OperteatherMape Paty
‘pysign_in' USERNAME’, ‘API KEY")
‘key = (API KEY’)
Poibisogracaricare modu del kama perilsesore:
cssystem( modprobe wi-gpo)
caystem( modprobe wither)
questo punto necessar create alcune vara pe
rmemorzzarelaposiione del sensore nel flesysteme defile
incuiessomemorzza dat, Servo ptr liste Latstax
contineiperodootempo considera perl regstezone
dala ernperatura per eserpio dale le Lalstay
@ wuota ed euseta per memorzare dat dela temperatura
che arwvano da OpeneatherMap, mente sensor anchiossa
wo, ogra dat registra dal sensor
‘age dit = Joyebush/dvices?
device folder = glob.glob(base_dir + 28")[0}
device lo = doves der + Yr slaw
bal temp _¢
= ['10:00"11:00712.00'/13:007,14:00]
‘Dopo ver preparato fo Siazio per regstrare datibisogna
creare le funcienche I rlevino eli laborino.La prima furzione
legge dati da OpeniteatherMlaped molto simile aquola
visia nela prima parte del progetto, con ‘unica diferenza che
Fultmarigac get weather(n) viene usata per aggiungere
valor di temperatura ala stay creata poco fa:
‘yappena(atemp')
La seconda tunzione read temp raw( renanela stessa
delfesempio precedente. A questo puntos passa cadice del
loop daripeterecinque vlte Esso recupera dati meteo dela
localta incicata ero legge a temperatura registrata dal
sensor. Entrar valonvengono seri nal rispetive liste,
Usendole funzione append, Giusto come controlb.a questo
punto cocice stampa a schermo valor ltto al serisore
Inne si mete in pausa ciclo per 3600 second (unre)
prima di passare alla successivaitrazione dl cco:
foriimrangets)
gc_weather Blackpool uk)
read temp0)
sensorappenditem <)
prittemp_c)
sleep( 3600)
Lutte brano di codice da sonvere senveadisegnare il gratico
con dati Vrranno mostrat due tracciati TaeaO viene creata
om dat recuperati da OpenWeatherMap per fassey.rentre
perl'asse x iusano i vlorpredefnitilegat foraclettura
PorTracel fassex2 lo stesso, menive y conten valor
registra del sensore. Infie simpacchetta tutto in una listae
Inviano | data https://plotly. in questo modo:
{uace0 = Seaterteh 4)
‘uacel = Seater(xhy-{eens01))
data = Data(traceo, tacel))
‘unique_ url= pyplot(data, flename = Blackpool Temperature’)
(rai cosice & completo: eseguitelo come indicato prima,
‘Altarmine dalfasocuzione si apirain automatico una fnostra
del browser che mostra il grafco csegnato da Phot. AB
> Quando eseguite il codice a questo progetto, ess0 Invia suo output alla console Python. Vedrete qui | messaggi sulla
‘temperatura attuale. Alla fine del loop verrainvece creato un grafico da Plotly che appar
in una finestra del browser
37