- Cos'è MQTT?
- Installazione di Mosquitto MQTT Broker su Raspberry Pi
- Testare il broker Raspberry Pi Mosquitto
- Schema elettrico
- Codice e spiegazione
MQTT è un protocollo utilizzato per inviare e ricevere messaggi su Internet. Abbiamo già utilizzato questo protocollo in Iot Electricity meter e Raspberry Pi Alexa per pubblicare i dati su Internet. In questo tutorial impareremo di più sull'MQTT e sui termini ad esso correlati. Qui useremo il Raspberry Pi come broker MQTT locale e controlleremo un LED collegato a NodeMCU ESP12E tramite il dashboard dell'applicazione MQTT. Un sensore DHT11 è anche collegato a NodeMCU in modo da ottenere la lettura di temperatura e umidità sulla dashboard MQTT, utilizzando nuovamente il Raspberry Pi come broker MQTT locale.
Quindi, iniziamo sottostimando l'MQTT ei termini ad esso correlati.
Cos'è MQTT?
MQTT è l'acronimo di Message Queue Telemetry Transport, progettato da IBM. Questo protocollo è semplice e leggero che viene utilizzato per inviare e ricevere messaggi su Internet ed è progettato per i dispositivi che hanno una larghezza di banda ridotta. Al giorno d'oggi questo protocollo è frequentemente utilizzato nei dispositivi IoT per inviare e ricevere i dati dei sensori. Inoltre, nei sistemi di automazione domestica basati su IoT, questo protocollo può essere facilmente utilizzato senza utilizzare gran parte dei dati Internet.
Ci sono pochi termini che vengono usati frequentemente in MQTT:
- Iscriviti e pubblica
- Messaggio
- Argomento
- Broker
1. Abbonarsi e pubblicare: Abbonarsi significa ottenere i dati da un altro dispositivo e pubblicare significa inviare i dati ad un altro dispositivo.
Quando dispositivo1 invia i dati a dispositivo2, è noto come Publisher e un altro è Sottoscrittore e viceversa.
2. Messaggio: i messaggi sono le informazioni che stiamo inviando e ricevendo. Può essere un dato o qualsiasi tipo di comando. Ad esempio, se pubblichiamo i dati sulla temperatura nella nuvola, questi dati sulla temperatura sono noti come Messaggio.
3. Argomento: questo è il modo in cui registri l'interesse per i messaggi in arrivo o come specifichi dove desideri pubblicare il messaggio. Gli argomenti sono rappresentati con stringhe separate da una barra. I dati vengono pubblicati sugli argomenti utilizzando MQTT, quindi il dispositivo MQTT si iscrive all'argomento per ottenere i dati.
4. Broker MQTT: questa cosa è responsabile della ricezione di tutti i messaggi dagli editori, filtra i messaggi e quindi pubblica i messaggi agli abbonati che sono interessati a loro.
Quando questo broker è ospitato sul cloud, si chiama MQTT cloud. Esistono molti servizi MQTT basati su cloud come Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, ecc. MQTT può essere utilizzato anche con il popolare cloud Amazon AWS, che abbiamo spiegato nel tutorial Introduzione a Amazon AWS.
Possiamo creare il nostro broker MQTT utilizzando Raspberry Pi. Questo sarà il broker MQTT locale, ovvero puoi inviare e ricevere i dati solo sulla tua rete locale, non da nessuna parte. Quindi qui installeremo il broker Mosquitto MQTT in Raspberry Pi per renderlo broker MQTT locale e invieremo i dati sulla temperatura dal NodeMCU all'applicazione dashboard MQTT. Inoltre, controlleremo un LED collegato a NodeMCU utilizzando il broker.
Installazione di Mosquitto MQTT Broker su Raspberry Pi
Apri il terminale nel tuo Raspberry pi e digita i seguenti comandi per installare il broker
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Attendi il completamento dell'installazione. Ora, per avviare il broker all'avvio di raspberry pi, digita il seguente comando
sudo systemctl abilita mosquitto.service
Ecco fatto, siamo tutti pronti per lanciare il nostro broker MQTT. Per verificare che sia installato correttamente, inserisci il seguente comando
mosquitto -v
Questo comando ti darà la versione del tuo broker MQTT. Dovrebbe essere 1.4.xo superiore.
Testare il broker Raspberry Pi Mosquitto
1. Eseguire il broker Mosquitto in background utilizzando il comando seguente
mosquitto -d
2. Ora, sottoscriveremo un argomento in exampleTopic utilizzando il seguente comando
mosquitto_sub -d -t esempioTopic
3. Ora pubblicheremo un messaggio su exampleTopic
mosquitto_pub -d -t exampleTopic -m "Ciao mondo!"
Riceverai il Hello world! Messaggio nel terminale dell'abbonato.
Ora è il momento di controllare e ottenere i dati da un altro dispositivo, nel nostro caso stiamo utilizzando l' applicazione dashboard NodeMCU e MQTT .
- Per prima cosa controlleremo un LED inviando un comando tramite App, quindi in questo caso NodeMCU si comporterà come abbonato e App come editore.
- Quindi ESP12E ha anche un sensore DHT11 collegato e invia questa lettura della temperatura all'applicazione Mobile MQTT, quindi in questo caso il cellulare sarà l'abbonato e NodeMCU sarà l'editore. E per inoltrare questi messaggi sui rispettivi Topics, viene utilizzato il broker Mosquitto MQTT.
Schema elettrico
Collegare il circuito come mostrato nello schema. Qui il DHT11 viene utilizzato per le letture della temperatura, ma è possibile utilizzare anche un sensore di temperatura LM35. Abbiamo già utilizzato il sensore DHT11 in molti dei nostri progetti, incluso NodeMCU per costruire una stazione meteorologica.
Iniziamo a scrivere il codice per il NodeMCU per iscriversi e pubblicare i dati.
Codice e spiegazione
Qui useremo il modello di libreria MQTT di Adafruit e cambieremo le cose richieste nel codice. Lo stesso codice può essere utilizzato per pubblicare e sottoscrivere i dati su Adafruit IO cloud semplicemente cambiando poche cose.Per questo scarica la libreria MQTT di Adafruit da Sketch -> Includi libreria -> Gestisci librerie. Cerca Adafruit MQTT e installalo. Dopo aver installato la libreria. Vai a esempi -> Adafruit mqtt library -> mqtt_esp8266
Quindi modifica questo codice in base al nostro indirizzo IP Raspberry Pi e alle credenziali Wi-Fi.
Include tutte le librerie per ESP8266WIFI e Adafruit MQTT .
#includere
Quindi definire l'SSID e la password per il Wi-Fi, da cui si desidera connettere l'ESP-12e. Assicurati che il tuo RPi e NodeMCU siano collegati alla stessa rete.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Questa sezione definisce il server Adafruit, in questo caso l'indirizzo IP del tuo Raspberry Pi e la porta del server.
#define AIO_SERVER "indirizzo ip del tuo Pi" #define AIO_SERVERPORT 1883
I campi sottostanti rimarranno vuoti perché non stiamo utilizzando il cloud Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Quindi creare una classe WiFiClient ESP8266 per connettersi al server MQTT.
Client WiFiClient;
Imposta la classe client MQTT passando il client WiFi e il server MQTT e i dettagli di accesso.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Imposta un feed chiamato "Temperatura" per pubblicare la temperatura.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Imposta un feed chiamato "led1" per iscriverti alle modifiche.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Nella funzione di configurazione , dichiariamo il PIN di NodeMCU su cui vuoi ottenere l'output. Quindi, collega NodeMCU al punto di accesso Wi-Fi.
void setup () { Serial.begin (115200); ritardo (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Connetti al punto di accesso WiFi. Serial.println (); Serial.println (); Serial.print ("Connessione a"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) { …. …. … Imposta l'abbonamento MQTT per il feed led. mqtt.subscribe (& led1); }
Nella funzione loop , ci assicureremo che la connessione al server MQTT sia attiva utilizzando MQTT_connect (); funzione.
void loop () { MQTT_connect ();
Ora, iscriviti al feed 'led' e ottieni la stringa dal broker MQTT e converti questa stringa in numero usando atoi (); funzione e scrivi questo numero sul pin LED usando digitalWrite (); funzione.
Abbonamento Adafruit_MQTT_Subscribe *; while ((subscription = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Ora, ottieni la temperatura in una variabile e pubblica questo valore usando la funzione Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } altro { Serial.println (F ("OK!")); }
Il codice completo con un video dimostrativo viene fornito alla fine di questo tutorial. Carica il codice sulla scheda NodeMCU e apri l'app dashboard MQTT che hai scaricato sullo smartphone.
Puoi anche controllare Raspberry Pi GPIO da qualsiasi parte del mondo utilizzando il cloud MQTT come Adafruit IO, MQTT.IO ecc., Che impareremo nel prossimo tutorial.