- Što je MQTT?
- Instaliranje Mosquitto MQTT Broker na Raspberry Pi
- Testiranje Raspberry Pi Mosquitto Broker
- Kružni dijagram
- Šifra i objašnjenje
MQTT je protokol koji se koristi za slanje i primanje poruka putem Interneta. Prije smo koristili ovaj protokol u mjeračima električne energije Iot i Raspberry Pi Alexa za objavljivanje podataka na internetu. U ovom uputstvu saznat ćemo više o MQTT-u i pojmovima povezanim s njim. Ovdje ćemo koristiti Raspberry Pi kao lokalnog MQTT posrednika i kontrolirati LED diodu povezanu na NodeMCU ESP12E preko nadzorne ploče aplikacije MQTT. DHT11 senzor također je povezan s NodeMCU tako da dobivamo očitanje temperature i vlage na MQTT nadzornoj ploči, ponovnom uporabom Raspberry Pi kao lokalnog MQTT posrednika.
Krenimo od podcjenjivanja MQTT-a i pojmova povezanih s njim.
Što je MQTT?
MQTT je kratica od Message Queue Telemetry Transport kojeg je dizajnirao IBM. Ovaj je protokol jednostavan i lagan koji se koristi za slanje i primanje poruka putem Interneta, a dizajniran je za uređaje koji koriste malu propusnost. Danas se ovaj protokol često koristi u IoT uređajima za slanje i primanje podataka senzora. Također, u sustavima kućne automatizacije temeljenim na IoT-u, ovaj se protokol lako može koristiti bez upotrebe velikog broja internetskih podataka.
Malo je izraza koji se često koriste u MQTT-u:
- Pretplatite se i objavite
- Poruka
- Tema
- Posrednik
1. Pretplatite se i objavite: pretplata znači dobivanje podataka s drugog uređaja i objavljivanje sredstava za slanje podataka na drugi uređaj.

Kad device1 pošalje podatke na device2, tada je poznat kao Publisher, a drugi je Subscriber i obratno.
2. Poruka: Poruke su informacije koje šaljemo i primamo. To mogu biti podaci ili bilo koja vrsta naredbe. Na primjer, ako podatke o temperaturi objavljujemo u oblaku, ti su podaci o temperaturi poznati kao Poruka.
3. Tema: Ovo je način na koji registrirate interes za dolazne poruke ili kako odredite gdje želite objaviti poruku. Teme su predstavljene nizovima odvojenim kosom crtom. Podaci se objavljuju o temama pomoću MQTT-a, a zatim se MQTT uređaj pretplaćuje na temu da bi ih dobio.
4. MQTT posrednik: Ova stvar odgovorna je za primanje svih poruka od izdavača, filtriranje poruka i objavljivanje poruka pretplatnicima koji su za njih zainteresirani.

Kada je ovaj broker hostiran u oblaku, tada se naziva MQTT oblak. Mnogo je MQTT usluga temeljenih na oblaku poput Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure itd. MQTT se također može koristiti s popularnim Amazon AWS oblakom, što smo objasnili u Uvodu u početak rada s Amazon AWS.
Pomoću Raspberry Pi možemo izraditi vlastitog posrednika za MQTT. Ovo će biti lokalni MQTT posrednik, tj. Podatke možete slati i primati na svojoj lokalnoj mreži samo ne s bilo kojeg mjesta. Dakle, ovdje ćemo instalirati Mosquitto MQTT posrednika u Raspberry Pi kako bi postao lokalni MQTT posrednik i poslat ćemo podatke o temperaturi iz NodeMCU u aplikaciju MQTT nadzorne ploče. Također ćemo upravljati LED-om povezanom na NodeMCU pomoću posrednika.
Instaliranje Mosquitto MQTT Broker na Raspberry Pi
Otvorite terminal u vašem Raspberry pi i upišite sljedeće naredbe da biste instalirali posrednika
sudo apt update sudo apt install -y mosquitto mosquitto-klijenti
Pričekajte da instalacija završi. Sada, da biste pokrenuli posrednika pri pokretanju malina pi, upišite sljedeću naredbu
sudo systemctl omogućiti mosquitto.service
To je to, svi smo spremni pokrenuti našeg MQTT brokera. Da biste provjerili je li ispravno instaliran, unesite sljedeću naredbu
komarac -v
Ova će vam naredba dati verziju vašeg MQTT brokera. Trebao bi biti 1.4.x ili noviji.
Testiranje Raspberry Pi Mosquitto Broker
1. Pokrenite Mosquitto brokera u pozadini pomoću naredbe u nastavku
komarac -d
2. Sada ćemo pretplatiti temu u exampleTopic pomoću sljedeće naredbe
mosquitto_sub -d -t primjerTema
3. Sada ćemo objaviti neku poruku exampleTopic
mosquitto_pub -d -t exampleTopic -m "Zdravo svijete!"
Dobit ćete Hello world! Poruka u pretplatničkom terminalu.

Sada je vrijeme za kontrolu i dobivanje podataka s drugog uređaja, u našem slučaju koristimo NodeMCU i MQTT aplikaciju nadzorne ploče .
- Prvo ćemo kontrolirati LED slanjem naredbe pomoću aplikacije, tako da se u ovom slučaju NodeMCU ponaša kao pretplatnik, a aplikacija kao izdavač.
- Tada je ESP12E također povezan s DHT11 senzorom i to očitanje temperature šalje u aplikaciju Mobile MQTT, tako da će u ovom slučaju mobilni biti pretplatnik, a NodeMCU izdavač. I za prosljeđivanje ovih poruka na odgovarajuće teme, koristi se Mosquitto MQTT broker.
Kružni dijagram

Spojite krug kako je prikazano na dijagramu. Ovdje se DHT11 koristi za očitanje temperature, ali također se može koristiti i temperaturni osjetnik LM35. Već smo koristili senzor DHT11 u mnogim našim projektima, uključujući NodeMCU za izgradnju meteorološke stanice.
Počnimo s pisanjem koda za NodeMCU za pretplatu i objavljivanje podataka.

Šifra i objašnjenje
Ovdje ćemo koristiti predložak biblioteke Adafruit MQTT i promijenit ćemo potrebne stvari u kodu. Isti se kôd može koristiti za objavljivanje i pretplatu podataka na Adafruit IO cloud samo mijenjanjem nekoliko stvari.Za ovo preuzmite biblioteku Adafruit MQTT iz programa Skica -> Uključi biblioteku -> Upravljanje knjižnicama. Potražite Adafruit MQTT i instalirajte ga. Nakon instalacije knjižnice. Idite na primjere -> Adafruit mqtt knjižnica -> mqtt_esp8266

Zatim uredite ovaj kôd u skladu s našom Raspberry Pi IP adresom i vjerodajnicama za Wi-Fi.
Uključite sve knjižnice za ESP8266WIFI i Adafruit MQTT .
#include
Zatim definirajte SSID i lozinku za svoj Wi-Fi, s kojeg želite povezati svoj ESP-12e. Provjerite povezuju li se RPi i NodeMCU s istom mrežom.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Ovaj odjeljak definira Adafruit poslužitelj, u ovom slučaju IP adresu vašeg Raspberry Pi i porta poslužitelja.
#define AIO_SERVER "ip adresa vašeg Pi" #define AIO_SERVERPORT 1883
Ispod polja ostat će prazna jer ne koristimo oblak Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Zatim stvorite klasu ESP8266 WiFiClient za povezivanje s MQTT poslužiteljem.
Klijent WiFiClient;
Postavite klasu MQTT klijenta unošenjem WiFi klijenta i MQTT poslužitelja i podataka za prijavu.
Adafruit_MQTT_Client mqtt (& klijent, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Postavite feed pod nazivom "Temperatura" za objavljivanje temperature.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feed / temperature");
Postavite feed pod nazivom "led1" za pretplatu na promjene.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feed / led");
U funkciji postavljanja deklariramo PIN NodeMCU-a na kojem želite dobiti izlaz. Zatim spojite NodeMCU s Wi-Fi pristupnom točkom.
void setup () { Serial.begin (115200); kašnjenje (10); pinMode (LED, IZLAZ); Serial.println (F ("Demofruit MQTT demonstracija")); // Povezivanje s WiFi pristupnom točkom. Serial.println (); Serial.println (); Serial.print ("Povezivanje s"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); dok je (WiFi.status ()! = WL_CONNECTED) { …. ... ... Postavite pretplatu na MQTT za led feed. mqtt.subscribe (& led1); }
U funkciji petlje osigurat ćemo da veza s MQTT poslužiteljem bude aktivna pomoću MQTT_connect (); funkcija.
petlja void () { MQTT_connect ();
Sada se pretplatite na 'led' feed i preuzmite niz od MQTT brokera i pretvorite ga u broj pomoću atoi (); funkcionirati i zapisati ovaj broj na LED pin pomoću digitalWrite (); funkcija.
Pretplata na Adafruit_MQTT_Subscribe *; while ((pretplata = mqtt.readSubscription (20000))) { if (pretplata == & led1) { Serial.print (F ("Dobio:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Sada izračunajte temperaturu u varijabli i objavite ovu vrijednost pomoću funkcije Temperature.publish (t) .
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Failed")); } else { Serial.println (F ("U redu!")); }
Potpuni kôd s demonstracijskim videozapisom nalazi se na kraju ovog vodiča. Prenesite kôd na ploču NodeMCU i otvorite aplikaciju MQTT nadzorne ploče koju ste preuzeli na pametni telefon.
Također možete kontrolirati Raspberry Pi GPIO s bilo kojeg mjesta na svijetu pomoću MQTT oblaka poput Adafruit IO, MQTT.IO itd., Što ćemo naučiti u sljedećem vodiču.
