- Cos'è il protocollo MQTT?
- Come funziona MQTT?
- Il broker Eclipse Mosquitto
- Componenti richiesti
- Circuito di prova Eclipse MQTT - Schema
- Programmazione di ESP8266 per stabilire la comunicazione con il broker
- Test di MQTT con ESP8266 utilizzando Arduino
Negli ultimi anni, i dispositivi IoT (Internet of Things) sono diventati una parte indistinguibile della nostra vita quotidiana. Dalle case intelligenti, alle lampadine intelligenti agli elettrodomestici intelligenti; creatori e sviluppatori stanno incorporando questa tecnologia per creare una rete di dispositivi connessi che rende la nostra vita quotidiana un po 'più eccitante. Tutto questo è stato reso possibile grazie alla facilità di comunicazione. Esistono molti modi possibili per comunicare tra i dispositivi, ma nei prodotti commerciali e per hobby, un unico protocollo comunemente utilizzato è MQTT (Message Queuing Telemetry Transport). In precedenza abbiamo costruito una radio FM a controllo vocale utilizzando Arduino e Google Assistant che utilizza MQTT per comunicare con la scheda NodeMCU. Controlla se ti sembra interessante.
In questo progetto, utilizzeremo un broker MQTT Eclipse gratuito e popolare e impareremo come connettere un dispositivo IoT (nel nostro caso, è un modulo NodeMCU) a un broker MQTT e trasferire i dati tra il broker MQTT e NodeMCU.
Cos'è il protocollo MQTT?
Prima di procedere oltre, è meglio avere una chiara idea del MQTT (Message Queuing Telemetry Transport) protocollo. È un protocollo di messaggistica leggero che utilizza il metodo di pubblicazione / sottoscrizione e traduce i messaggi tra più dispositivi. Utilizzando il protocollo MQTT, possiamo anche inviare / ricevere dati e controllare vari dispositivi di output, come leggere i dati del sensore, ecc. È sviluppato su TCP, motivo per cui è più veloce di protocolli simili come HTTP. Oltre a questo, ha molti altri vantaggi rispetto ad altri protocolli come il suo molto leggero, quindi non consuma memoria in eccesso, può funzionare con una larghezza di banda di rete molto minore, inoltre ha un robusto protocollo di sicurezza integrato. Queste caratteristiche lo rendono adatto a molte applicazioni.
Come funziona MQTT?
Per capire il funzionamento del protocollo MQTT, dobbiamo solo capire tre cose fondamentali; il diagramma sopra lo mostra. Inoltre, lo abbiamo spiegato di seguito nell'articolo.
Cliente MQTT:
Un client MQTT è qualsiasi dispositivo (può essere un microcontrollore o un server) che esegue le funzioni MQTT e comunica con un server centrale, noto come " broker ". Il broker gestisce la comunicazione dei dati tra i client collegati.
Editore MQTT:
Quando un cliente desidera inviare qualsiasi informazione, il client è noto come "Editore". L'editore pubblicherà le informazioni su un particolare argomento. " Argomento " è un percorso in cui possiamo pubblicare / sottoscrivere messaggi. Il broker invia quindi le informazioni pubblicate dall'utente ai client (noti anche come Subscriber) che si sono iscritti a quello specifico argomento.
Abbonato MQTT:
L' abbonato MQTT sottoscrive gli argomenti su un broker MQTT per leggere i messaggi inviati dal broker.
Il broker Eclipse Mosquitto
Eclipse Mosquitto è un broker MQTT open source, leggero ed adatto all'uso su dispositivi IoT per la comunicazione. Il protocollo MQTT fornisce un metodo leggero per trasferire le informazioni utilizzando un modello di pubblicazione / sottoscrizione. Se vuoi saperne di più sull'argomento, puoi visitare il sito ufficiale delle zanzare.
Configurazione del broker Eclipse Mosquitto:
Per stabilire una comunicazione con il broker, dobbiamo prima configurarlo. In questo progetto, viene utilizzata un'applicazione Android per pubblicare e sottoscrivere le informazioni con il Broker. I seguenti passaggi ti daranno un'idea migliore del processo di installazione.
Passo 1:
Innanzitutto, scarica qualsiasi applicazione "client MQTT" disponibile nel Google Play Store / App Store e installala. In questo progetto, viene utilizzata un'applicazione denominata "client MQTT", che assomiglia all'immagine mostrata di seguito.
Passo 2:
Fare clic sul segno "+" per elencare le opzioni aggiuntive nell'applicazione, dove aggiungeremo un nuovo broker. Quando si fa clic sul pulsante, viene visualizzata una nuova schermata come mostrato di seguito.
Passaggio 3:
Successivamente, i dettagli del broker devono essere compilati nel campo richiesto. Innanzitutto, fare clic sull'opzione "Abilitato" mostrato nell'applicazione. In questo progetto viene utilizzato il broker Eclipse MQTT, i dettagli da compilare sono riportati di seguito:
Nick Name: dai un nome alla tua preferenza
Host: mqtt.eclipse.org
Porto: 1883
ID cliente: fornisci un ID della tua preferenza
I dettagli di cui sopra devono essere compilati nei rispettivi campi. Tutti gli altri campi non sono necessari e possono essere lasciati vuoti. Dopo il completamento con successo, fare clic sul pulsante Salva per salvare i dettagli del broker.
Una volta terminato, il processo di configurazione dell'applicazione Android è terminato e ora possiamo passare al lato hardware.
Componenti richiesti
Di seguito viene descritto un elenco completo delle parti richieste. Poiché questo circuito è semplice, puoi trovare tutte le parti necessarie nel tuo negozio di hobby locale.
- NodeMCU
- GUIDATO
- Breadboard
- Cavi di collegamento
- Cavo di programmazione
Circuito di prova Eclipse MQTT - Schema
Di seguito è riportato lo schema elettrico per il progetto Basic MQTT:
Programmazione di ESP8266 per stabilire la comunicazione con il broker
Un semplice codice Arduino si occupa di tutte le comunicazioni necessarie tra il broker MQTT e il NodeMCU. In questa sezione impareremo in dettaglio come funziona questa funzionalità.
Imposta l'IDE di Arduino e carica il codice:
Se stai caricando il codice su NodeMCU per la prima volta, devi prima configurare l' IDE di Arduino. Per farlo, segui le semplici istruzioni fornite di seguito.
Innanzitutto, apri l'IDE di Arduino, quindi vai su File–> Preferenze–> Impostazioni .
Quindi, copia l'URL seguente e incollalo nel campo " URL gestore scheda aggiuntivo " e fai clic su "Ok". Puoi controllare l'immagine qui sotto per sapere come l'abbiamo fatto.
Collegamento:
Successivamente, vai su Strumenti> Board> Boards Manager . Nella finestra del gestore della scheda, digita ESP 8266 nella casella di ricerca e premi invio. Quindi seleziona l'ultima versione dal menu a discesa e fai clic su installa. L'immagine qui sotto ti darà un'idea chiara.
Infine, una volta completata l'installazione, vai su Strumenti -> Scheda -> e seleziona NodeMCU 1.0 (Modulo ESP-12E). Ora puoi programmare NodeMCU con Arduino IDE. Quando abbiamo finito di configurare l'IDE di Arduino, ora possiamo caricare il codice completo. Ma prima, leggi la rapida spiegazione dell'intero codice.
In primo luogo, abbiamo incluso "ESP8266WiFi.h" per l'utilizzo di ESP8266 e "PubSubClient.h" per MQTT.
Puoi trovare la libreria ESP8266 precostruita all'interno della libreria Arduino, ma devi scaricare la libreria PubSubClient dal suo repository GitHub associato.
#includere
Quindi, definire le credenziali di rete come il nome utente e la password Wi-Fi. Sostituisci le tue credenziali rispettivamente al posto di "admin" e "12345678".
const char * ssid = "admin"; const char * password = "12345678";
Successivamente, dobbiamo configurare il server MQTT. Abbiamo utilizzato il server Eclipse MQTT per questo progetto, motivo per cui l'indirizzo del server è "mqtt.eclipse.org". Ma se prevedi di utilizzare qualsiasi altro server come Mosquitto, Adafruit, puoi sostituirlo con l'indirizzo del tuo server e il numero di porta specifici.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Successivamente, le istanze vengono create per la classe WiFiClient e PubSubClient , che verranno utilizzate in tutto il programma.
WiFiClient espClient; Client PubSubClient (espClient);
Nella sezione setup () , chiamiamo prima WiFi.begin () , chiamare questo metodo connetterà l'ESP al tuo HotSpot preferito.
WiFi.begin (ssid, password);
Successivamente, controlliamo la corretta connessione di rete utilizzando il metodo WiFi.status () . Dopo una connessione riuscita, viene stampato un messaggio su Serial Monitor con l'SSID della rete connessa.
while (WiFi.status ()! = WL_CONNECTED) {ritardo (500); Serial.println ("Connessione a WiFi.."); } Serial.print ("Connesso a WiFi:"); Serial.println (WiFi.SSID ());
Ora dobbiamo creare un broker. Per questo, abbiamo utilizzato il metodo setServer ; questo metodo accetta due argomenti che abbiamo predefinito in precedenza. Ora, se vogliamo ricevere messaggi dal server, dobbiamo creare una funzione di callback. Per questo, stiamo usando il metodo setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Ora, abbiamo utilizzato la funzione di connessione (clientID) per connetterci al client ESP8266. Qui clientID è il nome del client e deve essere univoco. Se è collegato, è possibile visualizzare un messaggio di successo all'interno del monitor seriale.
if (client.connect ("ESP8266")) {Serial.println ("connesso"); } else {Serial.print ("failed with state") Serial.println (client.state ()); ritardo (2000); }
Successivamente, chiamiamo client.subscribe () , una funzione MQTT incorporata, utilizzata per iscriversi a un particolare argomento. Per questo progetto, abbiamo utilizzato " esp / test " come nome del nostro abbonato.
client.subscribe ("esp / test");
Ora, viene chiamata la funzione MQTTcallback per verificare se sono disponibili o meno informazioni aggiornate. Se sono disponibili nuovi dati, questa funzione gestisce i dati ricevuti e stampa un messaggio nel monitor seriale con il messaggio originale e il nome dell'argomento in cui viene ricevuto il messaggio.
Successivamente, convertiamo i messaggi in una stringa, in modo che possa essere confrontato e controllato per eventuali azioni di attivazione. In questo progetto, un LED viene acceso / spento utilizzando i comandi MQTT, come mostrato nel codice sottostante.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (messaggio); if (messaggio == "on") {digitalWrite (LED, HIGH); }
Infine, per pubblicare le informazioni sull'argomento. Il client.publish () funzione viene utilizzata. In questo progetto, lo stato di un pulsante viene verificato, se il pulsante viene premuto, viene pubblicato un messaggio in un argomento " esp / test1 " come mostrato di seguito.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Hello from ESP8266"); } altro; client.loop ();
Test di MQTT con ESP8266 utilizzando Arduino
Per i nostri test finali, utilizzeremo l'applicazione Android, che abbiamo configurato in precedenza.
Apri l'applicazione client MQTT e assicurati che il tuo cellulare abbia una connessione Internet attiva. Inoltre, l'hotspot a cui è connesso NodeMCU dovrebbe avere una connessione Internet attiva. Una volta che tutto è connesso a Internet, invieremo una stringa "Hello from ESP8266" dal modulo ESP, che si rifletterà all'interno dell'app Android e riceveremo una notifica. Successivamente, invieremo una stringa dall'app Android, che accenderà un LED collegato alla scheda MCU del nodo ESP8266.
Passaggio 1: (Iscriviti all'argomento):
Fare clic sull'opzione MQTT salvata sull'app, che abbiamo configurato in precedenza. Verrà visualizzata una schermata in cui viene richiesto di "Iscriviti a un argomento". Abbiamo precedentemente configurato l'argomento come " esp / test1 ". Quindi, nell'app Android, scriveremo " esp / test1 ". Fare clic su Iscriviti, così facendo si presenterà una schermata come di seguito, dove sarà scritto come "Nessun messaggio ricevuto" dal particolare argomento.
Ora, fai clic sul pulsante "Connesso" che è connesso a nodeMCU. Ora come da nostro codice, un messaggio " Hello from ESP8266 " verrà pubblicato nell'argomento e ci sarà una notifica sullo schermo con il messaggio ricevuto come mostrato di seguito.
Passaggio 2: pubblica sull'argomento:
Ora per pubblicare nell'argomento, fai clic sul pulsante FRECCIA SU dell'applicazione e si aprirà una schermata come mostrato di seguito.
Ora, nel campo Argomento, scrivi " esp / test " e nel campo del messaggio, scrivi " on " o " off " per accendere e spegnere rispettivamente il LED. Ad esempio, se "on" è pubblicato nell'argomento, il LED si accenderà e se "off" sarà pubblicato nell'argomento, il LED si spegnerà.
Spero che l'articolo ti sia piaciuto e abbia imparato qualcosa di nuovo. Se hai domande riguardo a questo articolo, non esitare a commentare qui sotto oppure puoi utilizzare il nostro forum.