- Kas ir MQTT?
- Mosquitto MQTT Broker instalēšana Raspberry Pi
- Pārbauda Raspberry Pi Mosquitto Broker
- Ķēdes shēma
- Kods un skaidrojums
MQTT ir protokols, ko izmanto ziņojumu sūtīšanai un saņemšanai internetā. Iepriekš mēs izmantojām šo protokolu Iot Electricity meter un Raspberry Pi Alexa, lai datus publicētu internetā. Šajā apmācībā mēs uzzināsim vairāk par MQTT un ar to saistītajiem noteikumiem. Šeit mēs izmantosim Raspberry Pi kā vietējo MQTT brokeri un vadīsim LED, kas savienots ar NodeMCU ESP12E, izmantojot MQTT lietojumprogrammas vadības paneli. DHT11 sensors ir pievienots arī NodeMCU, tāpēc mēs iegūstam temperatūras un mitruma rādījumus MQTT vadības panelī, atkal izmantojot Raspberry Pi kā vietējo MQTT brokeri.
Tātad, sāksim ar MQTT un ar to saistīto terminu nenovērtēšanu.
Kas ir MQTT?
MQTT apzīmē IBM izstrādāto Message Queue Telemetry Transport. Šis protokols ir vienkāršs un viegls, ko izmanto ziņojumu sūtīšanai un saņemšanai internetā, un tas ir paredzēts ierīcēm, kurām ir mazs joslas platums. Mūsdienās IoT ierīcēs šo protokolu bieži izmanto sensoru datu sūtīšanai un saņemšanai. Arī IoT balstītās mājas automatizācijas sistēmās šo protokolu var viegli izmantot, neizmantojot lielu daļu interneta datu.
Ir daži termini, kurus MQTT lieto bieži:
- Abonēt un publicēt
- Ziņojums
- Temats
- Brokeris
1. Abonēt un publicēt: Abonēt nozīmē iegūt datus no citas ierīces un publicēt - nosūtīt datus uz citu ierīci.
Kad device1 nosūta datus uz device2, tas ir pazīstams kā Publisher un cits ir Subscriber un otrādi.
2. Ziņojums: Ziņojumi ir informācija, kuru mēs sūtām un saņemam. Tie var būt dati vai jebkura veida komanda. Piemēram, ja mēs publicējam temperatūras datus mākonī, šie temperatūras dati ir pazīstami kā Message.
3. Tēma: Tas ir veids, kā reģistrējat interesi par ienākošajiem ziņojumiem vai kā jūs norādāt, kur vēlaties publicēt ziņojumu. Tēmas tiek attēlotas ar virknēm, kuras atdala ar slīpsvītru uz priekšu. Dati tiek publicēti par tēmām, izmantojot MQTT, un pēc tam MQTT ierīce abonē tēmu, lai iegūtu datus.
4. MQTT brokeris: šī lieta ir atbildīga par visu ziņojumu saņemšanu no izdevējiem, filtrēšanu un pēc tam ziņojumu publicēšanu abonentiem, kuri par tiem interesējas.
Kad šis brokeris tiek mitināts mākonī, to sauc par MQTT mākoni. Ir daudz mākoņdatošanas MQTT pakalpojumu, piemēram, Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure utt.
Mēs varam izveidot savu MQTT brokeri, izmantojot Raspberry Pi. Tas būs vietējais MQTT brokeris, ti, datus vietējā tīklā varat nosūtīt un saņemt tikai ne no jebkuras vietas. Tātad šeit mēs instalēsim Mosquitto MQTT brokeri Raspberry Pi, lai padarītu to par vietējo MQTT brokeri, un nosūtīsim temperatūras datus no NodeMCU uz MQTT informācijas paneļa lietojumprogrammu. Tāpat mēs vadīsim LED, kas savienots ar NodeMCU, izmantojot brokeri.
Mosquitto MQTT Broker instalēšana Raspberry Pi
Atveriet termināli savā Raspberry pi un ierakstiet šādas komandas, lai instalētu brokeri
sudo apt update sudo apt install -y mosquitto mosquitto-klienti
Pagaidiet, līdz instalēšana ir pabeigta. Tagad, lai sāktu brokeri, palaižot aveņu pi, ierakstiet šādu komandu
sudo systemctl iespējojiet mosquitto.service
Tas ir viss, mēs visi esam gatavi palaist mūsu MQTT brokeri. Lai pārbaudītu, vai tā ir pareizi instalēta, ievadiet šādu komandu
ods -v
Šī komanda sniegs jums jūsu MQTT brokera versiju. Tam vajadzētu būt 1.4.x vai jaunākam.
Pārbauda Raspberry Pi Mosquitto Broker
1. Palaidiet Mosquitto brokeri fonā, izmantojot zemāk esošo komandu
ods -d
2. Tagad mēs abonēsim tēmu exampleTopic, izmantojot šādu komandu
mosquitto_sub -d -t piemērsTēma
3. Tagad mēs publicēsim ziņojumu exampleTopic
mosquitto_pub -d -t exampleTopic -m "Sveika pasaule!"
Jūs saņemsiet Hello pasauli! Ziņojums abonenta terminālā.
Tagad ir pienācis laiks kontrolēt un iegūt datus no citas ierīces, un mūsu gadījumā mēs izmantojam NodeMCU un MQTT informācijas paneļa lietojumprogrammu.
- Vispirms mēs kontrolēsim LED, nosūtot komandu, izmantojot lietotni, tāpēc šajā gadījumā NodeMCU izturas kā abonents un lietotne kā izdevējs.
- Pēc tam ESP12E ir pievienots arī DHT11 sensors, un tas nosūta šo temperatūras rādījumu Mobile MQTT lietojumprogrammai, tāpēc šajā gadījumā mobilais būs abonents, un NodeMCU būs izdevējs. Lai nosūtītu šos ziņojumus attiecīgajās tēmās, tiek izmantots Mosquitto MQTT brokeris.
Ķēdes shēma
Pievienojiet ķēdi, kā parādīts diagrammā. Šeit temperatūras rādījumiem izmanto DHT11, bet var izmantot arī LM35 temperatūras sensoru. Mēs jau izmantojām DHT11 sensoru daudzos mūsu projektos, tostarp kopā ar NodeMCU, lai izveidotu meteoroloģisko staciju.
Sāks rakstīt kodu NodeMCU, lai abonētu un publicētu datus.
Kods un skaidrojums
Šeit mēs izmantosim Adafruit MQTT bibliotēkas veidni un mainīsim nepieciešamās lietas kodā. To pašu kodu var izmantot, lai publicētu un abonētu datus Adafruit IO mākonī, vienkārši mainot dažas lietas.Šajā lejupielādē Adafruit MQTT bibliotēku no Sketch -> Include Library -> Manage Libraries. Meklējiet Adafruit MQTT un instalējiet to. Pēc bibliotēkas instalēšanas. Pārejiet uz piemēriem -> Adafruit mqtt bibliotēka -> mqtt_esp8266
Pēc tam rediģējiet šo kodu atbilstoši mūsu Raspberry Pi IP adresei un Wi-Fi akreditācijas datiem.
Iekļaujiet visas ESP8266WIFI un Adafruit MQTT bibliotēkas .
# iekļaut
Pēc tam definējiet SSID un paroli savam Wi-Fi, no kura vēlaties savienot savu ESP-12e. Pārliecinieties, ka RPi un NodeMCU ir savienoti ar vienu un to pašu tīklu.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Šajā sadaļā ir noteikts Adafruit serveris, šajā gadījumā jūsu Raspberry Pi un servera porta IP adrese.
#define AIO_SERVER "jūsu Pi IP adrese" #define AIO_SERVERPORT 1883
Zemāk esošie lauki paliks tukši, jo mēs neizmantojam Adafruit mākoni.
#define AIO_USERNAME "" #define AIO_KEY ""
Pēc tam izveidojiet ESP8266 WiFiClient klasi, lai izveidotu savienojumu ar MQTT serveri.
WiFiClient klients;
Iestatiet MQTT klienta klasi, ievadot WiFi klientu un MQTT serveri un pieteikšanās datus.
Adafruit_MQTT_Client mqtt (& klients, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Lai publicētu temperatūru, iestatiet plūsmu ar nosaukumu “Temperatūra”.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ padeves / temperatūra");
Lai abonētu izmaiņas, iestatiet plūsmu ar nosaukumu “led1”.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Pēc iestatīšanas funkciju, mēs paziņojam PIN no NodeMCU, uz kuru vēlaties saņemt produkciju. Pēc tam pievienojiet NodeMCU Wi-Fi piekļuves punktam.
void setup () { Serial.begin (115200); kavēšanās (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demonstrācija")); // Savienojuma izveide ar WiFi piekļuves punktu. Seriālais.println (); Seriālais.println (); Serial.print ("Savienojums ar"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); kamēr (WiFi.status ()! = WL_CONNECTED) { …. …. ... Iestatiet MQTT abonementu vadītajai plūsmai. mqtt.subscribe (& led1); }
In cilpas funkciju, mēs nodrošināsim, ka savienojums ar MQTT serveris ir dzīvs, izmantojot MQTT_connect (); funkciju.
void loop () { MQTT_connect ();
Abonējiet 'led' plūsmu un iegūstiet virkni no MQTT brokera un pārvērsiet šo virkni uz numuru, izmantojot atoi (); funkcija un ierakstiet šo numuru LED tapā, izmantojot digitalWrite (); funkciju.
Adafruit_MQTT_Subscribe * abonements; while ((abonements = mqtt.readSubscription (20000))) { if (abonements == & led1) { Serial.print (F ("Got:")); Seriālā.println ((char *) led1.palaista); int led1_State = atoi ((char *) led1.palaists); digitalWrite (LED, led1_State); }
Tagad iegūstiet temperatūru mainīgajā un publicējiet šo vērtību, izmantojot funkciju Temperature.publish (t) .
pludiņš t = dht.lasītTemperatūra (); … .. if (! Temperatūra.publicēt (t)) { Seriālā.println (F ("Neizdevās")); } else { Serial.println (F ("Labi!")); }
Pilns kods ar demonstrācijas video ir norādīts šīs apmācības beigās. Augšupielādējiet kodu NodeMCU dēlī un atveriet viedtālrunī lejupielādēto MQTT informācijas paneļa lietotni.
Jūs varat arī kontrolēt Raspberry Pi GPIO no jebkuras vietas pasaulē, izmantojot MQTT mākoni, piemēram, Adafruit IO, MQTT.IO utt., Kurus mēs iemācīsimies nākamajā apmācībā.