|
"ThingSpeak™ è un servizio di analisi IoT che consente di aggregare, visualizzare e analizzare flussi di dati in tempo reale nel cloud. ThingSpeak fornisce visualizzazioni istantanee dei dati pubblicati dai tuoi dispositivi su ThingSpeak. Grazie alla possibilità di eseguire il codice MATLAB® in ThingSpeak, è possibile effettuare analisi online ed elaborare i dati man mano che arrivano. ThingSpeak viene spesso utilizzato per la prototipazione e la proof-of-concept di sistemi IoT che richiedono analisi." Quella
che hai appena letto è la spiegazione ufficiale di cosa
offre Thingspeak. È un servizio molto utile, che permette
di visualizzare, salvare e analizzare dati rilevati da uno
o più sensori, attraverso Internet in ogni zona del mondo.
E, oltretutto, è un servizio gratuito per scopi non
commerciali! Se
desideri informazioni più dettagliate, clicca
qui. |
| |
|
|
| |
| Come
utilizzare Thingspeak |
| L'utilizzo
di ThingSpeak è veramente semplice. Prima di tutto è
necessario effettuare il login, oppure registrarsi, se si
accede per la prima volta. Consultare la documentazione ufficiale di ThingSpeak. |
![]() |
Quando
si è effettuato il login, apparirà una pagina simile a
quella evidenziata a sinistra. Se è la prma volta che si accede, sarà necessario creare un primo canale, cliccando su "New Channel". |
![]() |
È
necessario dare un nome al canale, e se si desiderascrivere
una descrizione di cosa vedremo. Passaggio molto importante è quello di dare dei nomi chiari ai campi che si intendono utilizzare (in genere se ne possono usare fino a otto campi, che devono corrispondere scrupolosamente nell'ordine in cui saranno inseriti nel programma. |
![]() Attualmente il canale è privato (Private View); può diventare pubblica, cliccando su "Sharing" e scegliere come renderlo pubblico. Per poter pubblicare i dati, è fondamentale inserire nel proprio programma le API Keys: |
![]() |
Salvare
il codice presente in "Write API Key"e inserirla nel
proprio programma (vedi in seguito) |
| A
questo punto, si può cominciare a lavorare sui nostri
programmi. Ho cercato su internet una serie di programmi per Raspberry PI4 che utilizzino Thingspeak. Fortunatamente ne ho trovati vari, abbastanza simili, ma (non so se per una carenza della mia ricerca) esclusivamente con il sensore di temperatura e umidità DHT11. Ho usato questo come ottima base, adattandolo però anche per altri sensori. |
| |
|
|
| |
| Come inserire DHT11 (o DHT22), BME280, SGP30 sulla BDS |
| Nei nostri programmi ho utilizzato tre sensori: DHT11 (o DHT22); BME 680 e SGP30. Gli ultimi due utilizzano il protocollo I2C, quindi possono condividere gli stessi GPIO del Raspberry (GPIO2 per SDA e GPIO3 per SCL) perchè hanno indirizzi interni diversi. Tenendo come base i programmi proposti, si possono facilmente inserire altri sensori. |
DHT 11 (DHT22)
|
BME680
|
SGP30
|
| DHT11
verrà inserito su DG3 (GPIO21) |
BME680 si inserirà sullo zoccolo I2C2 | SGP30 si inserirà su I2C3 |
| |
|
|
| |
| La creazione dell'ambiente virtuale e l'inserimento delle librerie necessarie |
| Ipotizziamo che sul desktop del proprio Raspberry si crei una cartella "Projects" e all'interno una sottocartella "thingspeak " in cui creeremo l'ambiente virtuale (che chiameremo "thing"), le librerie necessarie e i programmi. Nota: naturalmente i nomi dati alle sottocartelle possono essere variati a piacere. Postulando che si siano create le cartelle indicate, si può iniziare con la programmazione. Aprire un terminale (la quarta icona in alto a destra) e digitare quanto segue:cd Desktop/Projects/thingspeak per spostarsi nella cartella "thingspeak "; python3 -m venv thing per creare l'ambiente virtuale "thing "; source thing /bin/activate per attivare l'ambiente virtuale: apparirà (thing) all'inizio della nuova riga; ![]() ![]() A questo punto si possono inserire le librerie necessarie. Ecco l'istallazione per DHT11: ![]() Poi ecco la libreria per BME680: ![]() La libreria per SGP30: ![]() e, nel caso si usi il buzzer (che per il momento ho disattivato), GPIOZERO: ![]() |
| |
|
|
| |
| Altri
programmi che usano DHT11, BME680, SGP30 |
| In queste pagine del sito troverai altri programmi per i sensori indicati: Clicca qui per DHT11. Clicca qui per DHT11 e Dispaly Oled SSD1306. Clicca qui per BME680. Clicca qui per BME680 e Dispaly Oled SSD1306. Clicca qui per SGP30. Clicca qui per SGP30 e Dispaly Oled SSD1306. Clicca qui per KY-028 |
|
| |
|
|
| |
| Il primo programma: Thingspeak e DHT11 |
|
|
|
| Il secondo programma: Thingspeak e BME680 |
Questo secondo programma usa la stessa identica strutura di quello precedente; semplicemente al posto di DHT11 è stao sostituito con un BME680, che registra 4 valori: temperatura, umidità, pressione e qualità dell'aria. Le prime righe di testo restano le stesse. Naturalmente la libreria richiesta è quella per BME680.
In questo caso le variabili sono cinque, che saranno lette anche sul terminale. La temperatura in gradi Fahrenheit non sono state inviate a Thingspeak.
Da notare anche le scritte in colore ambra, che riportano i quattro campi da passare al web. Nota: la qualità dell'aria all'interno si considera buona quando il suo valore è superiore a 80.000/100.000 Ohm. |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/thingspeak" e lanciarlo con il seguente comando: "python thing_680.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
![]() I grafici di temperatura, umidità, pressione e qualità dell'aria con BME680 |
|
|
| Il terzo programma: Thingspeak con BME680 + SGP30 |
Il programma illustrato qui è piuttosto interessante, perchè usando due sensori, BME680 e SGP30, mostra ben otto grafici! I primi quattro relatibi a BME680, e gli ultimi, grazie a SGP30, mostrano la qualità dell'aria: la presenza di CO2, di TVOC (composti organici volatili totali), di H2 (idrogeno) e Etanolo dispersi nell'aria. Sono necessarie le librerie per BME680, SGP30 ed eventualmente per GPIOZERO se si usa il buzzer. L'interpretazione delle righe di codice è la stessa che per i programmi precedenti; solamente ci sono più informazioni.
Come
per il programma precedente, questa sezione è relativa
alle variabili relative ai sensori BME680 e SGP30.
Queste stesse variabili andranno ustate anche nelle
righe successive, relative all'invio di dati a
Thingspeak.
In questo caso le variabili sono otto, che saranno lette anche sul terminale. La temperatura in gradi Fahrenheit non sono state inviate a Thingspeak.
Questa
è una sola linea di testo, che per motivi di lettura è
stata divisa in tre tronconi.
La seconda linea è relativa alla sequenza dei campi e all'eventualenumero dei decimali; la terza è relativa alle otto variabili, che devono essere assolutamente identiche a quelle mostrate nella tabella precedente. Nota
1: la
qualità dell'aria (misurata da BME680) all'interno si
considera buona quando il suo valore è superiore a
80.000/100.000 Ohm. In questo programma abbiamo però
delle indicazioni più apprfondite, con SGP30; i seguenti
valori sono accettabili all'interno: CO2, tinferiori a
400/600 ppm; TVOC: inferiori a 200/300 ppb
Nota 2: per dare valori realistici, il sensore SGP30 deve restare acceso una prima volta per almeno 48 ore; nell'uso abituale i valori si stabilizzano dopo 30 minuti di uso. |
Clicca qui per scaricare il programma in formato ".zip" Clicca qui per visualizzare il programma in formato testo. Se stai eseguendo queste operazioni direttamente dal Raspberry, puoi scaricare e scompattare direttamente il programma nella cartella "Desktop/Projects/thingspeak" e lanciarlo con il seguente comando: "python thing_multi.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
![]() Gli otto grafici ottenuti da questo programma: temperatura, umidità, pressione e qualità dell'aria con BME680: CO2,
TVOC, H2, Etanolo con SGP30
|
|
|
| Il quarto programma: DHT11 e il controllo di un condizionatore |
Questo programma è basato sul primo programma di questa pagina, con aggiunte alcune parti prese dal programma presente sulla pagina del dht11, che gestisce un condizionatore/pompa di calore, con le seguenti regole: - se la temperatura è maggiore di quella limite, accende il condizionatore; - se la temperatura è minore di quella limite, accende la pompa di calore (se il condizionatore ha questa funzione); - se l'umidità e superiore a un certo limite, e se non sono accesi il condizionatore o la pompa di calore, attiva il deumidificatore. È stata aggiunta la parte relativa a Thingspeak, così anche quando siamo fuori casa potremo monitorere lo stato di temperatura e umidità di casa nostra. Ecco le parti aggiunte:
- al ledr (GPIO19) può essere connesso un relè che attiva il condizionatore (temperatura alta) - al ledb (GPIO18) può essere connesso un relè che attiva la pompa di calore (temperatura bassa) - al ledy (GPIO5) può essere connesso un relè che attiva il deumidificatore (umidità alta) - il ledg (GPIO12) indica semplicemente che la temperatura/umidità è ottimale, e non avvia alcun relè.
|
Clicca qui
per scaricare il programma in formato ".zip"
Clicca qui per visualizzare il programma in formato testo.
Se stai eseguendo queste operazioni direttamente dal
Raspberry, puoi scaricare e scompattare direttamente il
programma nella cartella
"Desktop/Projects/thingspeak" e
lanciarlo con il seguente comando:
"python thing_11.py" Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie. |
|
|
| Il quinto programma programma: controllo della temperatura con KY-028 |
Il sensore analogico/digitale KY-028 è piuttosto interessante, perchè come tutti i sette sensori che usano lo stesso modulo elettronico, fornisce in uscita un segnale digitale ("0" o "1", "on" oppure "off") è molto utile, per esempio, per attivare un relè, che a sua volta puo scatenare un allarme, accendere una luce o un condizionatore, una stufa... mentre l'uscita analogica (richiede sia presente un integrato MCP3008, un convertitore analogico/digitale), fornisce un uscita a 10 bit, compresa tra valori o e 1023. La trasformazione da valore analogico a un indicazione di temperatura è piuttosto complessa, ma prorpio per questo dà una notevole soddisfazione quando la si raggiunge! Penso che la serie di programmi che si trovamo su questa pagina e su quella "vari", mostrino forse l'unico programma in rete che per KY-028 non fornisca solo dati banali, ma una vera lettura della temperatura. Un trimmer multigiro regola il livello di soglia, che si raggiunge quando il led appena sotto di esso si accende. A volte sembra che il trimmer giri a vuoto, ma se si ha pazienza, si raggiunge il punto di attivazione/disattivazione del livello di soglia. ![]() I cinque valori forniti dai grafici di ThingSpeak:
|
| Puoi
trovare le informazioni sulla rivelazione della temperatura
sul programma
specifico. Ecco invece le righe relative al passaggio dei dati a ThingSpeak: Ecco le righe necessarie per il collegamento con ThingSpak. Nel paragrafo iniziale troverai come ottenere la Write Key.
Queste invece sono le informazioni necessari per inviare i dati a ThingSpeak:
|
| Ecco
i dati che appaiono sul terminale, paralelamente ai grafici
che vedremo su ThingSpeak. Per questo programma sono stati usati i seguenti moduli:
Nota:
a LED1 può essere abbinato si
DG1(GPIO19) un relè; A un
relè può essere collegato un allarme, un condizionatore,
una pompa di calore, ecc.; in questo modoil programma può
avere non solo una funzione di monitotaggio, ma anche di
domotica. |
|
![]() Ecco
come si presentano i dati sul monitor del Raspberry.
|
|
|
|
| Ulteriori informazioni su Thingspeak |
Caratteristiche Principali di ThingSpeak:
Utilizzi
Comuni:
ThingSpeak è ampiamente utilizzato per prototipare sistemi IoT, monitoraggio ambientale , domtica, e applicazioni che richiedono l'analisi di dati di sensori. |
|
|
| Ulteriori
idee per altri programmi con Thingspeak |
Thingspeak offre molte possibilità; per esempio si potrebbe usare anche il sensore BME280, che è il "fratello minore" di BME680, più economico e forse presente tra il nostro materiale; per programmi che usano un display oled come SSD1306, si potrebbero inviare i dati su internet invece che sul visore locale... |
|
|