Raspberry: sensore DHT 11 con invio dati su Telegram

Come ben sappiamo il mondo Raspberry permette di creare una moltitudine di progetti interessati. Rispetto ad Arduino con Raspberry è possibile realizzare interfacce di invio dati tramite App su smartphone e PC in quanto l’instaurarsi di una connessione a internet è più semplice rispetto alla board Arduino dal momento che non vi è la necessità di utilizzare shield o componenti particolari per connettersi al proprio router-modem poiché il modulo per la connessione wifi è integrato negli ultimi modelli di Raspberry.

Fase preliminare: idea

In questo articolo sarà illustrato un progetto tramite il quale sarà possibile misurare i valori di temperatura e umidità tramite un sensore di temperatura DHT 11 in un determinato luogo a nostra scelta. La visualizzazione dei dati avverrà tramite l’ausilio di un messaggio di testo inviato da un bot Telgram. Inoltre saranno illustrati in questa guida la metodologia per la creazione del bot su Telegram e di varie estensioni al progetto.

Componenti

Le componenti basilari di questo progetto sono i seguenti:

Vi sono altri componenti da poter utilizzare ma sarà visto in seguito nel momento in cui si parlerà delle possibili estensioni.

Sensore DHT 11: datasheet

Il sensore DHT è un  sensore in grado di rilevare umidità e temperatura grazie alle semplici librerie forniteci da Adafruit.

Le specifiche tecniche sono le seguenti:

  • Range di misurazione: Umidità: 20-90%RH , Temperatura: 0-50°
  • Accuratezza umiditià: Umiditià ±5%RH
  • Accuratezza Temperatura: ±2℃
  • Risoluzione: 1
  • Alimentazione: 3-5.5v

Attenzione, in alcuni modelli di sensore DHT 11 i pin Vcc e Signal possono essere invertiti. Un eventuale problema per il quale il programma compilato non funzioni potrebbe consistere in questo motivo.

Il sensore DHT11 espone 3 pin denominati:

  • GND: piedino di massa
  • VCC: piedino di alimentazione
  • sitgnal: piedino di comunicazione dati 1-wire

Il DHT11 va alimentato con una tensione compresa tra i 3 e 5V. In che modo rileva l’umidità relativa e la temperatura?  Il DHT11 è in grado di rilevare il valore percentuale dell’umidità relativa misurando la resistenza elettrica tra i due elettrodi. La conduttività tra gli elettrodi aumenta all’aumentare dell’umidità relativa. Mentre per quanto concerne la temperatura il DHT11 utilizza un sensore NTC.

Collegamenti con la board Raspberry

Il piedino signal sarà collegato al pin 7 (GPIO). Il piedino Vcc sarà collegato al pin 2, mentre il pedino GND sarà collegato al pin 6.

ecco qui una schema dei pin GPIO

È importante notare che la numerazione in figura è valida solo per i seguenti modelli:

ecco qui il diagramma di collegamento

Creazione bot

Il primo passo consiste nell’aprire l’applicazione telegram. Una volta aperta cerchiamo “BotFather” tramite la funzione cerca cliccando sull’apposita lente di ingrandimento.

“BotFather” è un bot che permette di creare altri bot.

Avviamo il bot scrivendo “/start“, poi premiamo invio.

Per creare un nuovo bot digitiamo “/newbot”.

BotFather ci chiederà di assegnare un nome al nostro nuovo Bot, basta digitare un qualsiasi nome e poi premere Invio.

Dobbiamo anche inserire un username che lo renderà riconoscibile pubblicamente. Username deve terminare in “Bot” o ” _bot”.

In seguito alla assegnazione del nome e dell’username BotFather ci comunicherà informazioni importanti in seguito per compilare il codice per il funzionamento del sensore e dell’invio dati. ATTENZIONE: QUESTE INFOMAZIONI LE DOVREMMO TENERE SOLO PER NOI. La prima parte riguarda il percorso per trovare il nostro bot. La seconda è la API che sarà utilizzato nel nostro codice.

Raspberry

Operazioni preliminari per la programmazione del codice su Raspberry

Per utilizzare il sensore dobbiamo scaricare la libreria Adafruit. Digitiamo sul terminale la seguente stringa:

sudo apt-get install git-core

Se da errore provare ad utilizzare la stringa sudo apt-get update e riprovare.

Installiamo la libreria utilizzando la seguente stringa:

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

Cambiamo directory con la seguente stringa:

cd Adafruit_Python_DHT

Ora digitiamo;

sudo apt-get install build-essential python-dev

e installiamo la libreria con:

sudo python setup.py install

Tutto questo per il funzionamento del sensore DHT 11. Per l’implementazione del bot occorre una specifica libreria. Per installare questa libreria basta eseguire il comando (prima usciamo dalle eventuali directory digitando cd).

pip install telepot

Codice completo

Ecco il codice in python che permette di leggere i dati dal sensore e inviarli tramite messaggio di testo tramite il bot creato da noi.

Per far si che i miei passaggi corrispondano con quelli degli esempi seguenti è consigliabile creare un nuovo file dal nome “simple_bot_DHT.py” nella cartella “examples” contenuta a sua volta nella cartella “Adafruit_Python_DHT”.

Ecco qui il codice:

Spiegazione codice

Vediamo adesso passo passo come funziona il codice implementato sopra.

Per prima cosa abbiamo importato varie librerie:

Le righe seguenti permettono di identificare di che sensore si tratti e a che pin BMC è collegato.

In seguito è stata definita la funzione on_chat_message. Questa funzione verrà richiamata ogni qual volta il nostro bot riceve un messaggio, ed è (a tutti gli effetti), il vero cuore del nostro programma.

Questa funzione riceverà sempre un argomento, che corrisponde al messaggio che è stato inviato al bot, contenuto nel parametro msg. Per capire come si comporta una funzione vi è un articolo che approfondisce questo contenuto: Arduino IDE: cosa sono le funzioni #9.

All’interno della funzione vengono eseguite 4 istruzioni.

Per prima cosa, estraiamo dei dati importanti dal messaggio usando il comando content_type, chat_type, chat_id = telepot.glance(msg). In questo modo, creiamo 3 variabili con i seguenti significati:

  • content_type dice che tipo di dati sono contenuti nel messaggio (se un messaggio di testo, un’immagine, un messaggio vocale, o altro);
  • chat_type contiene informazioni sul tipo di chat: se privata, gruppo, ecc.
  • chat_id contiene un identificativo univoco alla chat, e può essere usato per rispondere nella stessa chat in cui è stato mandato il messaggio.

La seconda istruzione consiste nel calcolo da parte del sensore della temperatura è umidità.

Come terza operazione, controlliamo che il messaggio che è stato mandato al bot sia di tipo testuale, andando a fare un check sul contenuto di content_type, con la rica if content_type == 'text':.

Nella quarta istruzione il bot invia sulla chat da cui è arrivato il messaggio un messaggio riguardante i dati di temperatura e umidità:

Rivediamo la funzione completa:

Una volta importata la libreria, possiamo andare a creare il nostro bot con questi semplici passaggi. In particolare, all’interno della variabile TOKEN dovremmo andare a inserire il token ritornato dal botFather (attezione, si tratta di una stringa).

Una volta ottenuto il token creiamo realmente il bot con il comando bot = telepot.Bot(TOKEN).

Con l’istruzione bot.message_loop(on_chat_message) la funzione verrà richiamata.


L’ultima parte del codice, serve semplicemente per evitare che il programma termini. Senza un ciclo il programma terminerebbe e il bot non potrebbe rispondere alla chat.

Test del programma

per testare il programma dobbiamo utilizzare il terminale usando diversi comandi:

Una volta comparsa nel terminale la scritta “listeling…” apriamo la chat telegram ed iniziamo a messaggiare con il nostro bot.

Per chiudere il programma basta premere i pulsanti ctrl-C dal terminale.

Possibili estensioni

Vi sono tantissime estensioni per quanto riguarda questo progetto. Una tra le tante è l’uso di una cassetta di  derivazione in plastica al cui interno è inserita la board Raspberry alimentato da un power bank. In questo sarà possibile inserire questa cassetta nel balcone della propria abitazione (la board deve essere connessa a internet) e osservare in che modo i dati cambino durante il corso della giornata.

Raspberry

Inoltre è possibile anche realizzare una “piccola stazione meteo” dotata di più componenti come un barometro BME280 che ci permette di misurare la pressione.

Raspberry

Vi è data anche la possibilità di salvare i dati in locale sulla propria board Raspberry tramite l’utilizzo dei File. Vi è un tutorial del nostro caro Luigi Morelli a riguardo: Pillole di Python #020 – Files e persistenza

Componenti utilizzati (link per acquisto)

Conclusioni

Raspberry

Il progetto in questione è davvero interessante e può avere davvero tante estensioni che variano in base alle proprie esigenze e grazie al bot telegram potremmo sempre reperire i dati in qualsiasi momento.

Link utili

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.