- Mikä on MQTT?
- Mosquitto MQTT Brokerin asentaminen Raspberry Pi: lle
- Raspberry Pi Mosquitto Brokerin testaaminen
- Piirikaavio
- Koodi ja selitys
MQTT on protokolla, jota käytetään lähettämään ja vastaanottamaan viestejä Internetin kautta. Aikaisemmin käytimme tätä protokollaa Iot Electricity -mittarissa ja Raspberry Pi Alexassa tietojen julkaisemiseksi Internetissä. Tässä opetusohjelmassa tutustumme lisää MQTT: hen ja siihen liittyviin termeihin. Tässä käytämme Raspberry Pi: tä paikallisena MQTT-välittäjänä ja ohjaamme LEDiä, joka on kytketty NodeMCU ESP12E: hen MQTT-sovelluksen kojelaudan kautta. DHT11-anturi on liitetty myös NodeMCU: han, jotta saisimme lämpötilan ja kosteuden lukeman MQTT-kojelaudassa käyttämällä jälleen Raspberry Pi: tä paikallisena MQTT-välittäjänä.
Joten aloitetaan aliarvioimalla MQTT ja siihen liittyvät ehdot.
Mikä on MQTT?
MQTT on lyhenne sanoista Message Queue Telemetry Transport, jonka on suunnitellut IBM. Tämä protokolla on yksinkertainen ja kevyt, jota käytetään viestien lähettämiseen ja vastaanottamiseen Internetissä, ja se on suunniteltu laitteille, joilla on pieni kaistanleveys. Nykyään tätä protokollaa käytetään usein IoT-laitteissa lähettämään ja vastaanottamaan anturitietoja. Myös IoT-pohjaisissa koti-automaatiojärjestelmissä tätä protokollaa voidaan helposti käyttää käyttämättä suurta osaa Internet-tiedoista.
On olemassa muutama termi, joita käytetään usein MQTT: ssä:
- Tilaa ja julkaise
- Viesti
- Aihe
- Välittäjä
1. Tilaa ja julkaise: Tilaa tarkoittaa tietojen hankkimista toisesta laitteesta ja julkaisemista tarkoittaa tietojen lähettämistä toiseen laitteeseen.
Kun laite1 lähettää tiedot laitteelle2, se tunnetaan julkaisijana ja toinen on tilaaja ja päinvastoin.
2. Viesti: Viestit ovat tietoja, joita lähetämme ja vastaanotamme. Se voi olla data tai minkä tahansa tyyppinen komento. Jos esimerkiksi julkaisemme lämpötilatiedot pilveen, nämä lämpötilatiedot tunnetaan nimellä Viesti.
3. Aihe: Tällä tavoin rekisteröit kiinnostuksen saapuville viesteille tai kuinka määrität viestin julkaisupaikan. Aiheet on esitetty merkkijonoilla, jotka on erotettu väliviivalla. Tiedot julkaistaan aiheista MQTT: n avulla ja sitten MQTT-laite tilaa aiheen saadakseen tiedot.
4. MQTT Broker: Tämä asia on vastuussa kaikkien julkaisijoiden viestien vastaanottamisesta, viestien suodattamisesta ja viestien julkaisemisesta niistä kiinnostuneille tilaajille.
Kun tätä välittäjää isännöidään pilvessä, sitä kutsutaan MQTT-pilveksi. On monia pilvipohjaisia MQTT-palveluita, kuten Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure jne.
Voimme tehdä oman MQTT-välittäjämme Raspberry Pi: n avulla. Tämä on paikallinen MQTT-välittäjä, eli voit lähettää ja vastaanottaa tietoja lähiverkossasi vain ei mistä tahansa. Joten tässä asennamme Mosquitto MQTT -välittäjän Raspberry Pi -ympäristöön tekemään siitä paikallisen MQTT-välittäjän ja lähetämme lämpötilatiedot NodeMCU: sta MQTT-kojelautasovellukseen. Lisäksi ohjaamme LEDiä, joka on kytketty NodeMCU: han välittäjän avulla.
Mosquitto MQTT Brokerin asentaminen Raspberry Pi: lle
Avaa pääte Raspberry pi -laitteellasi ja kirjoita seuraavat komennot asentamaan välittäjä
sudo apt päivitys sudo apt install -y mosquitto mosquitto-asiakkaat
Odota asennuksen päättymistä. Aloita nyt välittäjä käynnistettäessä vadelma pi, kirjoittamalla seuraava komento
sudo systemctl ota käyttöön mosquitto.service
Siinä kaikki, olemme kaikki valmiita käynnistämään MQTT-välittäjämme. Voit tarkistaa, että se on asennettu oikein, kirjoittamalla seuraava komento
hyttynen -v
Tämä komento antaa sinulle version MQTT-välittäjästäsi. Sen tulee olla 1.4.x tai uudempi.
Raspberry Pi Mosquitto Brokerin testaaminen
1. Suorita Mosquitto-välittäjä taustalla alla olevan komennon avulla
hyttynen -d
2. Tilataan nyt esimerkkiToppi-aihe käyttämällä seuraavaa komentoa
mosquitto_sub -d -t esimerkkiTeema
3. Julkaisemme nyt viestin exampleTopicille
mosquitto_pub -d -t exampleTopic -m "Hei maailma!"
Saat Hello-maailman! Viesti tilaajapäätelaitteessa.
Nyt on aika hallita ja saada tietoja toisesta laitteesta, jos käytämme NodeMCU- ja MQTT-kojelautasovellusta .
- Ensin ohjaamme LEDiä lähettämällä komennon App-sovelluksella, joten tässä tapauksessa NodeMCU käyttäytyy tilaajana ja App julkaisijana.
- Sitten ESP12E: hen on kytketty myös DHT11-anturi ja se lähettää tämän lämpötilalukeman Mobile MQTT -sovellukselle, joten tässä tapauksessa matkapuhelin on tilaaja ja NodeMCU on kustantaja. Ja näiden viestien välittämiseksi vastaavissa aiheissa käytetään Mosquitto MQTT -välittäjää.
Piirikaavio
Liitä piiri kuvan mukaisesti. Tässä lämpötilalukemiin käytetään DHT11: tä, mutta voidaan käyttää myös LM35-lämpötila-anturia. Olemme jo käyttäneet DHT11-anturia monissa projekteissamme, myös NodeMCU: n kanssa sääaseman rakentamiseksi.
Alkaa kirjoittaa koodia NodeMCU: lle tilaamaan ja julkaisemaan tiedot.
Koodi ja selitys
Tässä käytämme Adafruit MQTT -kirjastomallia ja muutamme tarvittavat asiat koodissa. Samaa koodia voidaan käyttää tietojen julkaisemiseen ja tilaamiseen Adafruit IO -pilveen muuttamalla muutamia asioita.Tätä ladataksesi Adafruit MQTT -kirjasto Sketchista -> Sisällytä kirjasto -> Hallinnoi kirjastoja. Etsi Adafruit MQTT ja asenna se. Kun olet asentanut kirjaston. Siirry esimerkkeihin -> Adafruit mqtt -kirjasto -> mqtt_esp8266
Muokkaa sitten tätä koodia Raspberry Pi: n IP-osoitteen ja Wi-Fi-tunnistetietojemme mukaan.
Sisällytä kaikki ESP8266WIFI- ja Adafruit MQTT -kirjastot .
#sisältää
Määritä sitten Wi-Fi-verkon SSID ja salasana, josta haluat liittää ESP-12e: n. Varmista, että RPi ja NodeMCU ovat yhteydessä samaan verkkoon.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Tässä osassa määritetään Adafruit-palvelin, tässä tapauksessa Raspberry Pi- ja palvelinportin IP-osoite.
#define AIO_SERVER "piisi IP-osoite" #define AIO_SERVERPORT 1883
Alla olevat kentät pysyvät tyhjinä, koska emme käytä Adafruit-pilviä.
#define AIO_USERNAME "" #define AIO_KEY ""
Luo sitten ESP8266 WiFiClient -luokka muodostaaksesi yhteyden MQTT-palvelimeen.
WiFiClient-asiakas;
Määritä MQTT-asiakasluokka syöttämällä WiFi-asiakas ja MQTT-palvelin sekä kirjautumistiedot.
Adafruit_MQTT_Client mqtt (& asiakas, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Aseta lämpötilan julkaisemista varten syöte nimeltä "Lämpötila".
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ syötteet / lämpötila");
Määritä syöte nimeltä led1 muutosten tilaamista varten.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ syötteet / led");
Vuonna setup toiminto, me julistamme PIN NodeMCU johon haluat saada lähtöön. Liitä sitten NodeMCU Wi-Fi-tukiasemaan.
void setup () { Sarja.alku (115200); viive (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT -demo")); // Yhdistä WiFi-tukiasemaan. Sarja.println (); Sarja.println (); Serial.print ("Yhdistetään kohteeseen"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); kun (WiFi.status ()! = WL_CONNECTED) { …. …. … MQTT-tilauksen määrittäminen led-syötteelle. mqtt.subscribe (& led1); }
In silmukka toiminto, me varmistaa, että yhteys MQTT palvelin on elossa käyttäen MQTT_connect (); toiminto.
void loop () { MQTT_connect ();
Tilaa nyt led-syöte ja hae merkkijono MQTT-välittäjältä ja muunna tämä merkkijono numeroksi käyttämällä atoi (); toiminto ja kirjoita tämä numero LED-nastalle digitaalisella kirjoituksella (); toiminto.
Adafruit_MQTT_Subscribe * -tilaus; while ((subscription = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Selvä:")); Sarja.println ((char *) led1.viimeinen); int led1_State = atoi ((char *) led1.viimeinen); digitalWrite (LED, led1_State); }
Hanki nyt lämpötila muuttujaan ja julkaise tämä arvo käyttämällä Temperature.publish (t) -funktiota.
kelluva t = dht. lukulämpötila (); … .. if (! Lämpötila.julkaisu (t)) { Sarja.println (F ("epäonnistui")); } else { Sarja.println (F ("OK!")); }
Täydellinen koodi ja esittelyvideo annetaan tämän opetusohjelman lopussa. Lataa koodi NodeMCU-kortille ja avaa älypuhelimeen lataamasi MQTT-kojelautasovellus.
Voit myös hallita Raspberry Pi GPIO: ta mistä päin maailmaa tahansa käyttämällä MQTT-pilviä, kuten Adafruit IO, MQTT.IO jne., Jonka opimme seuraavassa opetusohjelmassa.