Ethical DIY

Progetti hardware & software etici


Menu orizzontale con sottomenu CSS






 




Pagina principale per Raspberry



Informazioni di base




La basetta sperimentale (BDS)


Applicazioni



Librerie e programmi
  • La gestione delle librerie

  • Programmi applicativi
    • Protocollo_I2C
    • I2C_BME280
    • I2C_BME680
    • I2C_ Display_LCD_1602
    • I2C_Display_SSD1306
    • I2C_SGP30-SGP40
    • SPI_RFID_RC522
    • One-wire_18B20
    • DHT11/DHT22
    • Motore_elettrico
    • Servomotore
    • Motore a passo
    • Encoder_Joystick
    • Pulsanti/piccoli_sensori
    • Led
    • Telecamera_OpenCV
    • Gestione_immagini
    • Ingressi_Analogici
    • Display: LCD1602
    • Display: SSD1306 Oled
    • Display: ST7735
    • Ingressi analogici
    • Programmi vari














 








 
















Raspberry PI 3/4/5
Programmi  con Thingspeak

"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.



t1

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".
t2

È 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.

t3
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:

t4

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)

d3
BME680

a6
SGP30    

  t6        
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) term 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;
t6
t7
A questo punto si possono inserire le librerie necessarie.
Ecco l'istallazione per DHT11:
t8
Poi ecco la libreria per BME680:
s9
La libreria per SGP30:
t10
e, nel caso si usi il buzzer (che per il momento ho disattivato), GPIOZERO:
t11








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 primo programma l'ho trovato su internet e ho effettuato pochissime modifiche.
Rileva la temperatura e la invia a Thingspeak ogni 60 secondi. Naturalmente l'intervallo può essere variato a piacere. Se per esempio si volesse effettuare un aggiornamento ogni mezz'ora, il valore da inserire in      sarà 1800 (30 minuti = 1800 secondi), e così via.
Illuistrerò più dettagliatamente questo programmi; ai successivi ho semplicemente variato il sensore e aggiornato sia il "print" su terminale, che l'invio dati a Thingspeak.
Il programma per Raspberry è piuttosto semplice, perché rispetto ad Arduino ESP32, ecc., nel sistema operativo ha già tutti i dati di collegamento wi-fi e Internet.

ts1
Il codice Write API key" che si è salvato precedentemente, va inserito nella casella evidenziata.
Non modificare assolutamente l'URL indicato in BASE_URL !

ts2
Le informazioni presenti in questa linea inviano i dati a Thingspeak a Thingspeak ogni 20 secondi. Naturalmente l'intervallo può essere variato a piacere. Se per esempio si volesse effettuare un aggiornamento ogni mezz'ora, il valore da inserire in      sarà 1800 (30 minuti = 1800 secondi), e così via.

ts3
Queste linee sono relative al rilevamento dei dati dal DHT11 e le stampano sul terminale.
Nel riquadro verde sono presenti le descrizioni dei campi: "Humidity" e "Temperature".  le informazioni {:.2f}
significano che ci saranno due decimali, mentre "%" e "C", indicheranno che l'umidità si esprime in percentuale "%" e che la temperaturà sarà in gradi Celsius "C".
Nel riquadro blu, si sono create le variabili temperature e humidity, che poi verranno riportate sia nella riga che inizia con "print" e anche nel riquadro successivo.

ts4
In questa tabella si vedono le informazioni (riquadro rosso) che verranno inviati a Thingspeak, mentre nel riquadro blu sono indicate le sequenze dei campi.
Come si vede sono esattamente gli stessi di quelli stampati sul terminale



Nota: le informazioni presenti nei due riquadri blu sono relativi a due informazioni: umidità e temperatura. Nel caso si usino altri sensori (BME680) che registrano per esempio quattro informazioni, dovranno essere adeguate per fornire le corrette descrizioni e informazioni, oltre alla giusta sequenza dei campi.



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_dht.py"

Controllare di aver attivato l'ambiente virtuale e scaricato le librerie necessarie.

t11
Il grafico di temperatura e umidità con 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.

ts12
Questa è la sezione che si riferisce alla configurazione del sensore BME680. Una unica considerazione relativa a "temperature_offset": verificando la temperatura misurata dal sensore con un termometro di riferimento, risulta che BME680 misura tre gradi di più circa; quindi li sottraggo dalla lettura. Questo dato va misurato sperimentalmente caso per caso.

ts13
Come per il DHT11, questa sezione è relativa alle variabili relative al sensore BME680. Queste stesse variabili andranno ustate anche nelle righe successive, relative all'invio di dati a Thingspeak.
In questo caso le variabili sono cinque, che saranno lette anche sul terminale. La temperatura in gradi Fahrenheit non sono state inviate a Thingspeak.

ts14
Questa è la linea che invia i dati a Thingspeak. Le quattro varaibili devono avere esattamente lo stesso nome.
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.

t80
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.

ts20
Queste sono le informazioni relative alle configurazioni dei due sensori.

ts21
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.

ts22
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.


ttss
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:

ts40
In questa sezione vengono inseriti i parametri di temperatura minima, massima e umidità massima (prime tre righe): le quattro righe successive abbinano un led a ogni situazione che si verifica in base ai dati rilevati da DHT11.
- 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è.

ts41
Questa lunga sezione illustra tutti i controlli necessari per accendere il condizionatore, la pompa di calore oppure il deumidificatore. Normalmente non ci sarà bisogno di intervenire su queste righe di programma; sarà sufficiente modificare le variabili mostrate nella tabella precedente.




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.

tts
I cinque valori forniti dai grafici di ThingSpeak:
  • la temperatura in gradi Celsius (Temperatura °C;
  • la temperatura in gradi Fahrenheit (Temperatura °F);
  • la soglia di intervento, che si regola con il trimmer, può essere solo due valori: "0" sotto la soglia; "1", sopra la soglia. Il livello di soglia si regola con il trimmer.Se dopo aver superato il livello di soglia, la temperatura scende, il valore passa da "1" a "0" in modo automatico.
  • L'allarme: esso scatta quando si supera il livello di soglia, e al calare della temperatura sotto questo livello non si azzera automaticamente, ma richiede che venga premuto il tasto touch BT1. Infatti, come si vede dai grafici,  "soglia" e "allarme" non sono perfettamente simmetrici. Questo è voluto, in modo da rendersi conto se il livello di soglia sia stato superato anche per un tempo breve.
  • L'ultimo grafico è relativo all'andamento della temperatura in funzione della resistenza del sensore, che penso sia un termistore NTC). Come si vede, la resistenza scende al crescere della temperatura. Infatti il primo e il quinto grafico sono simmetrici, solo ribaltati di 180° sull'asse X.
Ed ora una breve analisi del programma:





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.
tt6

Queste invece sono le informazioni necessari per inviare i dati a ThingSpeak:
tt7
le due righe evidenziate in verde, in effetti sono un'unica riga; è stata divisa solo per poterla leggere più chiaramente.

Ecco i dati che appaiono sul terminale, paralelamente ai grafici che vedremo su ThingSpeak.
Per questo programma sono stati usati i seguenti moduli:
  • Sensore KY-028 sullo zoccolo AD1/A (GPIO16; A5);
  • un led su LED1 GPIOI19), quando il livello di temperatura è sotto la soglia;
  • un led su LED2 (GPIO18), a segnalare un allarme di superamento di soglia, stabile fino a quando non viene azzerato;
  • un led su LED3 (GPIO21), che indica un superamento temporaneo della soglia di temperatura:
  • il pulsante touch BT1 (GPIO24) che azzera l'allarme.

Nota:     a LED1 può essere abbinato si DG1(GPIO19) un relè;
               a
LED2 può essere abbinato si DG2(GPIO18) un relè;
               a LED3 può essere abbinato si DG3(GPIO21) 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.

 
tt4

Ecco come si presentano i dati sul monitor del Raspberry.
Attenzione: quando ai relè si collegano degli apparecchi da allacciare alla rete elettrica a 220v, si corrono gravi pericoli, anche mortali! In questi casi rivolgersi sempre a personale esperto e qualificato!







Ulteriori  informazioni su Thingspeak

Caratteristiche Principali di ThingSpeak:
  • Raccolta Dati: Riceve dati da dispositivi connessi a Internet (come Arduino, ESP8266, Raspberry Pi) utilizzando protocolli REST API o MQTT.
  • Visualizzazione in Tempo Reale: Offre grafici e dashboard (chiamati "canali") per visualizzare immediatamente i dati, come temperatura, umidità o livelli di sensori.
  • Analisi con MATLAB: Consente di elaborare i dati archiviati utilizzando il codice MATLAB direttamente nel cloud, permettendo analisi avanzate e apprendimento automatico.
  • Automazione e Azioni: È possibile configurare azioni automatiche basate sui dati ricevuti, come l'invio di email, tweet o messaggi ad altri dispositivi (TalkBack).
  • Accessibilità: Disponibile come versione web pubblica gratuita (con limitazioni) e come opzione ospitata su server privati.
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...















Per contatti: etdiy@centroanahata.it