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. I programmi sono stati modificati per poter funzionare con ESP01, che offre solo due porte disponibili per l'utente. |
INVIARE dati per mezzo di MQTT |
Lo
schema elettrico
|
![]() |
Per
testare il programma di invio informazioni via MQTT, sono
stati collegati due pulsanti, rispettivamente a GPIO0
e GPIO2. La pressione di uno o entrambi i pulsanti cambia il segnale inviato. |
![]() La basetta sperimentale per ESP01 in formato 1:1 con i due pulsanti posti su DG1 (GPIO2) e DG2 (GPIO0) |
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 e GPIO2. 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 due
switch: un KY-004 (o un qualsiasi sensore digitale che dia
come risposta "0" o "1"), si connette alla porta GPIO0,
mentre un secondo si connette su GPIO2 (vedi schema
riprodotto sopra). Sulla destra appare la routine per l'intercettazione dello stato degli switch. Quando i valori Rvalue, Rvalue2 sono posti a "1", lo switch è stato premuto; quando sono = "0" sono disattivati. Una curiosità: nel caso si usassero dei touch switch (tipo TTC223) hanno un comportamento oinverso rispetto a KY-004. Infatti quest'ultimo è premuto quando digitalRead(0) o digitalRead(2)è uguale a "0" e non attivato quando il valore è uguale a "1", mentre touch switch sono attivi (si è avvicinato un dito alla loro superficie) quando digitalRead(0) o digitalRead(2) è 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. |
![]() |
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). |
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, è necessario 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 selezionato nel programma trasmettitore, lo
stato dei due switch. Questo è al momento, semplicemente un
programma dimostrativo. Clicca qui per visualizzare il programma trasmettitore Clicca qui per scaricare in formato ".zip" il programma trasmettitore Clicca qui per visualizzare il programma ricevitore Clicca qui per scaricare in formato ".zip" il programma ricevitore |