MQTT
(Message Quering Telemetry Transport) è un protocollo di
messaggistica leggero di tipo publish-subscribe posizionato
su TCP/IP. È stato progettato per le situazioni in cui è
richiesto un basso impatto energetico e dove la banda è
limitata ed è molto usato anche su Arduino, Rasberry, ecc. e
per i progetti di domotica. Poichè in rete si trovano ottimi manuali su MQTT, non sto a dilungarmi. Ecco alcuni siti /video utili che ho trovato in rete: https://www.cloud.it/tutorial/come-installare-e-mettere-sicurezza-mosquitto-su-ubuntu-20-04.aspx Alcuni progetti chiari e interessanti su questi video di Paolo Aliberti, a cui va sempre la mia gratitudine: https://www.youtube.com/watch?v=k5HJ6G0YeWw Creare un subscriver https://www.youtube.com/watch?v=cLRuWwKkSp4 Creare un publisher |
Schema a blocchi del funzionamento del protocollo MQTT |
In
questa pagina si troveranno inizialmente due programmi: - un primo, che invia dati al broker MQTT - un secondo, che riceve dati attraverso al broker MQTT. Entrambi i programmi sono stati prelevati dal sito di Arduino https://docs.arduino.cc/tutorials/uno-wifi-rev2/uno-wifi-r2-mqtt-device-to-device/ e leggermente modificati. Anche l'immagine iniziale è stata prelevata dalla stessa pagina. |
INVIARE dati per mezzo di
MQTT |
In
questo programma ci si collega ad un broker MQTT. Alla
scheda ESP8266 sono collegati tre interruttori, che
manderanno un segnale di apertura/chiusura al receiver ogni
tot secondi. |
Lo
schema elettrico |
Lo
schema elettrico con un pulsante (KY-004) su GPIO0 e due
touch switch rispettivamente si GPIO14 e GPIO12. E' stata usata questa particolare configurazione perché sulla basetta sperimentale ci sono due touch switch, ma sia questi ultimi che KY-004 possono essere sostituiti da tre sensori digitali (stati "0" e "1"). |
La basetta sperimentale in formato reale con i componenti e i collegamenti necessari. |
Il
programma |
E'
sempre necessario di avere caricato le librerie necessarie
per poter compilare il programma. Ecco quelle che sono necessarie: |
ArduinoMqttClient.h ESP8266WiFi.h |
In
questo programma dapprima ci si collega alla rete WiFi,
quindi è necessario inserire i dati della propria rete WiFi
e la password. Effettuata la connessione, si aggancia un broker (=server) pubblico MQTT, utile per fare i nostri test. Essendo pubblico, si consiglia di usarlo solo per brevi prove, in modo che resti disponibile (e veloce nelle risposte) per tutti. Si collegheranno tre pulsanti (o sensori digitali con risposte on/off) rispettivamente alle porte GPIO0, GPIO14, GPIO12. Il programma (publisher), dopo essersi agganciato al broker, controlla lo stato degli interruttori, e invia ogni tot millisecondi invia al broker e stampa i risultati sul monitor seriale. Una ulteriore scheda ESP8266, cha fungerà da ricevitore (subscriber), riceverà i dati dal broker e li pubblicherà sempre sul proprio monitor seriale. |
La richiesta della SSID e password L'attesa tra un invio e l'altro. 8000 millisec = 8 secondi |
E'
neceassario inserire l'indirizzo IP (o il nome) del proprio
broker, che può essere locale nella propria rete o nel wob,
come nel nostro caso: "test.mosquitto.org". La porta
usata è abitualmente la "1883". |
I tre
switch: un KY-004 (o un qualsiasi sensore digitale che dia
come risposta "0" o "1"), si connette alla porta GPIO0,
mentre i due touch switch inseriti a bordo della basetta
sperimentale si collegano alle porte GPIO13 e GPIO14 (vedi
schema riprodotto sopra). Sulla destra appare la routine per l'intercettazione dello stato degli switch. Quando i valori Rvalue, Rvalue2, Rvalue3 sono posti a "1", lo switch è stato premuto; quando sono = "0" sono disattivati. Una curiosità: i touch switch hanno un comportamento opposto rispetto a KY-004. Infatti quest'ultimo è premuto quando digitalRead(0) è uguale a "0" e non attivato quando il valore è uguale a "1", mentre i due touch switch sono attivi (si è avvicinato un dito alla loro superficie) quando digitalRead(13) o digitalRead(14) è uguale a "1". Tenerne conto nel caso si usino switch differenti, altrimenti si otterranno messaggi opposti a quello che ci si aspetta! A questo punto, i dati verranno inviati al broker e stampati sul monitor seriale. Nota: ci vogliono diversi secondi, da quando il programma è stato compilato a quando cominciano ad apparire i dati sul monitor seriale. |
La
routine che interroga
i
tre switch
|
|
Ricevere dati per mezzo di MQTT |
Caricando
questo programma, potremo ricevere lo stato dei tre switch
controllati dal programma "sender".Con questo genere di
programma, avremo bisogno di due scehde per testare inostri
programmi; una invierà i dati e l'altra li riceverà. Poichè
con il programma che verificheremo ora non avremo degli
attuatori (verificheremo solo con il monitor seriale lo
stato degli switch), come ricevitore potremmo usare anche in
"piccolo" ESP01. |
E' sempre necessario di avere caricato le librerie necessarie per poter compilare il programma. Ecco quelle che sono necessarie: |
ArduinoMqttClient.h ESP8266WiFi.h |
Come
per il programma trasmettitore, è neseccario dichiarare nel
programma il nome della propria rete WiFi e la password. Sarà già inserito anche l'indirizzo del broker, sia la porta di collegamento. |
|
Dopo
aver atteso qualche secondo, si comincerà a vedere scorrere,
con l'intervallo seletionato nel programma trasmettitore, lo
stato dei tre switch. Questo è al momento, semplicemente un
programma dimostrativo. |
|