Sisällysluettelo:

MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa: 8 vaihetta (kuvilla)
MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa: 8 vaihetta (kuvilla)

Video: MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa: 8 vaihetta (kuvilla)

Video: MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa: 8 vaihetta (kuvilla)
Video: Использование комплекта Wi-Fi Heltec ESP32 OLED 2024, Kesäkuu
Anonim
MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa
MQTT: n käyttäminen Raspberry Pi: n ja ESP8266: n kanssa

Tässä Instructable -ohjelmassa selitän, mikä on MQTT -protokolla ja miten sitä käytetään laitteiden väliseen kommunikointiin. Sen jälkeen näytän käytännön esimerkkinä, kuinka asennat yksinkertaisen kahden asiakasjärjestelmän, jossa ESP8266 -moduuli lähettää viestin Python -ohjelmaan, kun painiketta painetaan. Käytän erityisesti Adafruit HUZZAH -moduulia tähän projektiin, Raspberry Pi: tä ja pöytätietokonetta. Raspberry Pi toimii MQTT -välittäjänä ja Python -asiakas ajetaan erillisestä pöytätietokoneesta (valinnainen, koska tämä voidaan käyttää Raspberry Pi -laitteella).

Tämän ohjeen noudattamiseksi sinulla on oltava perustiedot elektroniikasta ja Arduino -ohjelmiston käytöstä. Sinun pitäisi myös tuntea komentorivikäyttöliittymän käyttö (Raspberry Pi). Toivottavasti kun olet saanut tiedon siitä, mitä MQTT on ja miten sitä käytetään perusskenaariossa, voit luoda omia IoT -projekteja!

Tarvittavat osat

  • 1 x Raspberry Pi, kytketty paikalliseen verkkoon (käynnissä Jessie)
  • 1 x ESP8266 -moduuli (Adafruit HUZZAH)
  • 1 x leipälauta
  • 3 x hyppyjohdot (uros-uros)
  • 1 x painike
  • 1 x 10 k ohmin vastus (ruskea-musta-oranssi värikoodi)

Olen luonut tämän Instructable -ohjelman, koska MQTT on aina kiinnostanut minua protokollana ja sitä voidaan käyttää monella eri tavalla. En kuitenkaan näyttänyt saavan päätäni siitä, kuinka koodata laitteita sen käyttämiseksi. Tämä johtui siitä, että en tiennyt/ymmärtänyt, mitä todella tapahtui "Hello, World!" laitteesta A ja lähettää sen laitteeseen B. Siksi päätin kirjoittaa tämän ohjeen (toivottavasti) opettamaan sinulle, miten se toimii, ja vahvistamaan myös omaa ymmärrystäni siitä!

Vaihe 1: Mikä on MQTT?

Mikä on MQTT?
Mikä on MQTT?

MQTT tai MQ Telemetry Transport on viestiprotokolla, jonka avulla useat laitteet voivat puhua keskenään. Tällä hetkellä se on suosittu esineiden Internet -protokolla, vaikka sitä on käytetty muihin tarkoituksiin - esimerkiksi Facebook Messenger. Mielenkiintoista on, että MQTT keksittiin vuonna 1999 - eli se on yhtä vanha kuin minä!

MQTT perustuu ajatukseen, että laitteet voivat julkaista tai tilata aiheita. Joten esimerkiksi. Jos laite #1 on tallentanut lämpötilan yhdestä anturistaan, se voi julkaista aiheeseen viestin, joka sisältää sen tallentaman lämpötila -arvon (esim. "Lämpötila"). Tämä viesti lähetetään MQTT -välittäjälle, jota voidaan ajatella kytkimenä/reitittimenä lähiverkossa. Kun MQTT Broker on vastaanottanut viestin, se lähettää sen kaikille laitteille (tässä tapauksessa Device #2), jotka ovat tilanneet saman aiheen.

Tässä projektissa julkaisemme aiheeseen käyttäen ESP8266: ta ja luomme Python -komentosarjan, joka tilaa tämän saman aiheen, Raspberry Pi: n kautta, joka toimii MQTT -välittäjänä. MQTT: n hieno asia on se, että se on kevyt, joten se sopii täydellisesti pienille mikro -ohjaimille, kuten ESP8266, mutta se on myös laajalti saatavilla - joten voimme käyttää sitä myös Python -skriptillä.

Toivottavasti tämän projektin lopussa sinulla on ymmärrys siitä, mitä MQTT on ja miten voit käyttää sitä omiin projekteihisi tulevaisuudessa.

Vaihe 2: Asenna MQTT Broker Raspberry Pi -laitteeseen

MQTT Brokerin asentaminen Raspberry Pi -laitteeseen
MQTT Brokerin asentaminen Raspberry Pi -laitteeseen
MQTT Brokerin asentaminen Raspberry Pi -laitteeseen
MQTT Brokerin asentaminen Raspberry Pi -laitteeseen
MQTT Brokerin asentaminen Raspberry Pi -laitteeseen
MQTT Brokerin asentaminen Raspberry Pi -laitteeseen

MQTT -järjestelmän asentamiseksi tarvitsemme välittäjää, kuten edellisessä vaiheessa selitettiin. Raspberry Pi: ssä käytämme "Mosquitto" MQTT -välittäjää. Ennen kuin asennamme tämän, on aina parasta päivittää Raspberry Pi.

sudo apt-get päivitys

sudo apt-get päivitys

Kun olet tehnyt tämän, asenna mosquitto ja sitten hyttysasiakaspaketit.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-customers -y

Kun olet asentanut nämä kaksi pakettia, meidän on määritettävä välittäjä. Hyttysvälittäjän asetustiedosto sijaitsee /etc/mosquitto/mosquitto.conf, joten avaa tämä suosikkitekstieditorillasi. Jos sinulla ei ole suosikkitekstieditoria tai et osaa käyttää mitään komentorivieditoria, käytän nanoa, jotta voit seurata seuraavaa:

sudo nano /etc/mosquitto/mosquitto.conf

Tämän tiedoston alareunassa pitäisi näkyä rivi:

include_dir /etc/mosquitto/conf.d

Poista tämä rivi. Lisää seuraavat rivit tiedoston alaosaan.

allow_anonymous false

salasanatiedosto/etc/mosquitto/pwfile -kuuntelija 1883

Kirjoittamalla nämä rivit olemme sanoneet mosquitolle, ettemme halua kenenkään yhdistävän välittäjäämme, joka ei anna kelvollista käyttäjätunnusta ja salasanaa (asetamme nämä sekunneissa) ja että haluamme hyttysten kuuntele viestejä portin numerolla 1883.

Jos et halua välittäjän vaativan käyttäjänimeä ja salasanaa, älä lisää kahta ensimmäistä lisäämäämme riviä (eli salli_anonyymi… ja salasanatiedosto…). Jos olet tehnyt tämän, siirry Raspberry Pi: n uudelleenkäynnistykseen.

Sulje (ja tallenna) tiedosto. Jos seuraat nanoesimerkkiä, paina CTRL+X ja kirjoita Y pyydettäessä.

Koska olemme juuri kertoneet mosquitolle, että käyttäjät, jotka yrittävät käyttää MQTT -välittäjää, on todennettava, meidän on nyt kerrottava mosquitolle, mikä käyttäjätunnus ja salasana ovat! Kirjoita siis seuraava komento - korvaa käyttäjätunnus haluamallasi käyttäjänimellä - ja anna sitten salasana, jota pyydetään (Huomaa: jos määritystiedostoa muokatessasi annoit eri salasanatiedostopolun, korvaa alla oleva polku käyttämäsi).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile käyttäjätunnus

Koska olemme juuri muuttaneet hyttysmääritystiedostoa, meidän on käynnistettävä Raspberry Pi uudelleen.

sudo uudelleenkäynnistys

Kun Raspberry Pi on käynnistänyt uudelleen, sinulla pitäisi olla täysin toimiva MQTT -välittäjä! Seuraavaksi yritämme olla vuorovaikutuksessa sen kanssa käyttämällä useita erilaisia laitteita/menetelmiä!

Vaihe 3: Välittäjän testaaminen

Välittäjän testaaminen
Välittäjän testaaminen

Kun olet asentanut hyttynen Raspberry Pi -laitteeseen, voit antaa sille nopean testin - vain varmistaaksesi, että kaikki toimii oikein. Tätä tarkoitusta varten on kaksi komentoa, joita voimme käyttää komentorivillä. mosquitto_pub ja mosquitto_sub. Tässä vaiheessa opastan sinua käyttämään näitä kaikkia välittäjämme testaamiseen.

Välittäjän testaamiseksi sinun on avattava kaksi komentorivi -ikkunaa. Jos käytät Puttyä tai muuta SSH -asiakasta, tämä on yhtä helppoa kuin avata toinen SSH -ikkuna ja kirjautua sisään tavalliseen tapaan. Jos käytät Pi -laitettasi UNIX -päätelaitteesta, tämä on täsmälleen sama. Jos käytät Raspberry Pi: tä suoraan, sinun on avattava kaksi pääteikkunaa GUI -tilassa (komentoa startxcan voidaan käyttää GUI: n käynnistämiseen).

Nyt kun olet avannut kaksi ikkunaa, voimme aloittaa testauksen. Kirjoita jompikumpi päätelaitteista seuraava komento ja korvaa käyttäjänimi ja salasana edellisellä vaiheessa määrittämilläsi.

mosquitto_sub -d -u käyttäjätunnus -P salasana -testi

Jos päätit olla asettamatta käyttäjänimeä ja salasanaa edellisessä vaiheessa, jätä tästä lähtien huomiotta komennot -u ja -P. Joten esimerkiksi mosquitto_sub -komento olisi nyt:

mosquitto_sub -d -testi

Mosquitto_sub -komento tilaa aiheen ja näyttää kaikki viestit, jotka lähetetään määritettyyn aiheeseen pääteikkunassa. Tässä -d tarkoittaa virheenkorjaustilaa, joten kaikki viestit ja toiminta näytetään näytöllä. -u ja -P pitäisi olla itsestään selviä. Lopuksi -t on aiheen nimi, jonka haluamme tilata - tässä tapauksessa "testi".

Seuraavaksi, toisessa pääteikkunassa, yritämme julkaista viestin "testi" -aiheeseen. Kirjoita seuraava ja muista vaihtaa käyttäjänimi ja salasana:

mosquitto_pub -d -u käyttäjätunnus -P salasana -testi -m "Hei, maailma!"

Kun painat enter, sinun pitäisi nähdä viesti "Hei, maailma!" ilmestyvät ensimmäiseen käyttämäämme pääteikkunaan (tilaamaan). Jos näin on, voit aloittaa työskentelyn ESP8266: n parissa!

Vaihe 4: ESP8266: n määrittäminen (Adafruit HUZZAH)

ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)
ESP8266: n määrittäminen (Adafruit HUZZAH)

Tämä vaihe, jos se on erityinen Adafruit HUZZAH: lle (koska käytän tätä projektia loppuun). Jos käytät toista Arduino / ESP8266 -laitetta, voit ohittaa tämän vaiheen. Suosittelen kuitenkin, että luet sen lukemattomana, siltä varalta, että täällä on sinulle sopivaa tietoa.

Tätä projektia varten aion ohjelmoida HUZZAH: n Arduino -ohjelmistolla. Joten jos et ole jo tehnyt sitä, muista asentaa Arduino -ohjelmisto (uudempi kuin 1.6.4). Voit ladata sen täältä.

Kun olet asentanut Arduino-ohjelmiston, avaa se ja siirry kohtaan Tiedosto-> Asetukset. Tässä pitäisi näkyä (lähellä ikkunan alaosaa) tekstiruutu, jonka otsikko on "Lisätaulujen hallinnan URL -osoitteet". Kopioi ja liitä seuraava linkki tähän tekstiruutuun:

arduino.esp8266.com/stable/package_esp8266com_index.json

Tallenna muutokset napsauttamalla OK. Avaa nyt hallituksen johtaja (Työkalut-> Hallitus-> Hallituksen johtaja) ja etsi ESP8266. Asenna esp8266 by ESP8266 -yhteisöpaketti. Käynnistä Arduino -ohjelmisto uudelleen.

Ennen kuin voimme ohjelmoida levyn, meidän on valittava muutama eri vaihtoehto. Valitse Työkalut -valikkovaihtoehdosta Adafruit HUZZAH ESP8266 levylle, 80 MHz suorittimen taajuudelle (voit käyttää 160 MHz, jos haluat ylikellottaa sen, mutta toistaiseksi käytän 80 MHz), 4M (3M SPIFFS) salaman koolle ja 115200 latausnopeudelle. Muista myös valita käyttämäsi COM -portti (tämä riippuu asetuksistasi).

Ennen kuin voit ladata koodin, sinun on varmistettava, että HUZZAH on käynnistyslataustilassa. Ota tämä käyttöön painamalla GPIO0 -levyn painiketta ja pitämällä sitä painettuna myös nollauspainiketta. Vapauta sitten nollauspainike ja sitten GPIO0. Jos olet tehnyt tämän oikein, punaisen LED -valon, joka syttyi GPIO0 -näppäintä painettaessa, pitäisi nyt olla himmeä.

Jos haluat ladata koodin mikrokontrolleriin, varmista ensin, että HUZZAH on käynnistyslataustilassa, ja napsauta sitten Arduino IDE: n latauspainiketta.

Jos sinulla on ongelmia HUZZAH: n käyttöönotossa, lisätietoja on Adafruitin omassa opetusohjelmassa.

Vaihe 5: ESP8266: n ohjelmointi

ESP8266 ohjelmointi
ESP8266 ohjelmointi

Nyt aloitamme ESP8266: n ohjelmoinnin, mutta ennen kuin voimme aloittaa, sinun on asennettava seuraavat kirjastot Arduino-kirjastonhallintaan (Luonnos-> Sisällytä kirjastot-> Hallitse kirjastoja)

  • Bounce2
  • PubSubClient

Kun olet asentanut nämä kirjastot, voit suorittaa koodin, jonka olen sisällyttänyt tähän ohjeeseen (MQTT_Publish.zip). Olen kommentoinut sitä ehdottomasti, jotta ymmärrät, mitä kukin osio tekee, ja toivottavasti voit mukauttaa sen tarpeisiisi.

Muista muuttaa vakioita koodin yläosassa, jotta ESP8266 voi muodostaa yhteyden WiFi -verkkoon ja MQTT Brokeriin (Raspberry Pi).

Jos päätät olla asettamatta käyttäjänimeä ja salasanaa MQTT Brokerille, lataa sen sijaan MQTT_PublishNoPassword.zip -tiedosto.

Vaihe 6: Python Clientin (paho-mqtt) asentaminen

Python Clientin (paho-mqtt) asentaminen
Python Clientin (paho-mqtt) asentaminen

Onneksi tämä vaihe on hyvin yksinkertainen! Jos haluat asentaa mosquitto python -asiakkaan, sinun tarvitsee vain kirjoittaa seuraava komentoriville (Linux/Mac) tai jopa komentokehotteeseen (Windows).

pip asenna paho-mqtt

Huomautus: Windowsin komentokehotteessa saattaa olla ongelma pip -komennon suorittamisessa, jos et määrittänyt, että haluat, että pip asennetaan ja python lisätään PATH -muuttujaan, kun asennit Pythonin. On olemassa useita tapoja korjata tämä, mutta mielestäni vain Pythonin asentaminen on helpoin tapa. Jos olet epävarma - anna sille google!

Vaihe 7: Python -asiakas - tilaaminen

Python Client - Tilaaminen
Python Client - Tilaaminen

Tässä vaiheessa aiomme asentaa Python -komentosarjan (joko itse Raspberry Pi -laitteeseen tai toiseen verkkoon yhdistettyyn tietokoneeseen) käsittelemään kaikkia viestejä, jotka ESP8266 lähettää (julkaisee) MQTT -aiheeseen.

Olen lisännyt alla olevan python -koodin (PythonMQTT_Subscribe.py), joka on kommentoitu auttamaan sinua ymmärtämään, mitä tapahtuu, mutta selitän myös joitain pääominaisuuksia täällä.

Jos et määrittänyt käyttäjänimeä ja salasanaa MQTT -yhteydelle aiemmin, lataa sen sijaan PythonMQTT_SubscribeNoPassword.py -tiedosto.

Vaihe 8: Tiedonsiirto ESP8266 -laitteiden välillä

Viestintä ESP8266 -laitteiden välillä
Viestintä ESP8266 -laitteiden välillä

Jos haluat esimerkiksi perustaa IoT -verkon, haluat ehkä kommunikoida ESP8266 -laitteiden välillä. Onneksi tämä ei ole paljon monimutkaisempi kuin koodi, jonka olemme aiemmin kirjoittaneet, mutta siihen on tehty muutamia merkittäviä muutoksia.

Jotta yksi ESP lähettää tietoja toiselle, ensimmäisen ESP: n on julkaistava aiheeseen ja toisen ESP: n on tilattava kyseinen aihe. Tämä asetus mahdollistaa yksisuuntaisen keskustelun - ESP (1) - ESP (2). Jos haluamme, että ESP (2) puhuu takaisin ESP: lle (1), voimme luoda uuden aiheen, jonka ESP (2) julkaisee ja ESP (1) tilaa. Onneksi meillä voi olla useita tilaajia samasta aiheesta, joten jos haluat lähettää tietoja useisiin järjestelmiin, tarvitset vain yhden aiheen (jonka he kaikki tilaavat lukuun ottamatta laitetta, joka lähettää tiedot) julkaista).

Jos tarvitset apua kunkin laitteen tehtävien selvittämisessä, ajattele järjestelmää ihmishuoneena. Jos ESP (1) julkaisee, voit kuvitella tämän laitteen "kaiuttimeksi", ja kaikki aiheeseen liittyvät laitteet ovat "kuuntelijoita" tässä esimerkissä.

Olen lisännyt alla esimerkkikoodin, joka osoittaa, kuinka ESP8266 voi tilata aiheen ja kuunnella tiettyjä viestejä - 1 ja 0. Jos 1 vastaanotetaan, sisäinen LED (HUZZAH - GPIO 0) syttyy. Jos vastaanotetaan 0, tämä LED sammuu.

Jos haluat käsitellä monimutkaisempia tietoja, tämä on tehtävä ReceivedMessage -toiminnossa (katso koodi).

Jos sinun on sekä lähetettävä että vastaanotettava dataa omille projekteillesi, voit sisällyttää edellisen esimerkin julkaisutoiminnon tähän vaiheeseen sisältyvään koodiin. Tämä on käsiteltävä Arduino -silmukan () päätoiminnossa.

Muista muuttaa koodin yläosassa olevat muuttujat verkostosi mukaan!

Suositeltava: