Kazalo:

Kako uporabljati MQTT z Raspberry Pi in ESP8266: 8 korakov (s slikami)
Kako uporabljati MQTT z Raspberry Pi in ESP8266: 8 korakov (s slikami)

Video: Kako uporabljati MQTT z Raspberry Pi in ESP8266: 8 korakov (s slikami)

Video: Kako uporabljati MQTT z Raspberry Pi in ESP8266: 8 korakov (s slikami)
Video: Умное окно - автоматизация проветривания комнаты, интеграция в Home Assistant 2024, Junij
Anonim
Kako uporabljati MQTT z Raspberry Pi in ESP8266
Kako uporabljati MQTT z Raspberry Pi in ESP8266

V tem navodilu bom razložil, kaj je protokol MQTT in kako se uporablja za komunikacijo med napravami. Nato vam bom v praktični predstavitvi pokazal, kako nastaviti preprost sistem z dvema odjemalcema, kjer bo modul ESP8266 poslal sporočilo v program Python, ko pritisnete gumb. Natančneje, za ta projekt uporabljam modul Adafruit HUZZAH, Raspberry Pi in namizni računalnik. Raspberry Pi bo deloval kot posrednik MQTT, odjemalec Python pa bo deloval iz ločenega namiznega računalnika (neobvezno, saj bi se to lahko izvajalo na Raspberry Pi).

Če želite slediti temu navodilu, morate imeti osnovno znanje o elektroniki in uporabi programske opreme Arduino. Prav tako bi morali poznati uporabo vmesnika ukazne vrstice (za Raspberry Pi). Upajmo, da boste lahko, ko boste spoznali, kaj je MQTT in kako ga uporabiti v osnovnem scenariju, ustvarili lastne projekte IoT!

Potrebni deli

  • 1 x Raspberry Pi, povezan z lokalnim omrežjem (izvaja se Jessie)
  • 1 x modul ESP8266 (Adafruit HUZZAH)
  • 1 x Ogledna plošča
  • 3 x mostične žice (od moškega do moškega)
  • 1 x gumb
  • 1 x 10k ohmski upor (rjava-črno-oranžna barvna koda)

Ustvaril sem ta Instructable, saj me MQTT vedno zanima kot protokol in obstaja veliko različnih načinov njegove uporabe. Vendar mi ni bilo jasno, kako kodirati naprave za uporabo. To je bilo zato, ker nisem vedel/razumel, kaj se v resnici dogaja, da bi sprejel moj "Pozdravljeni, svet!" iz naprave A in jo pošljem v napravo B. Zato sem se odločil, da napišem ta Instructable, da vas (upam) naučim, kako deluje, in okrepil svoje razumevanje tega!

1. korak: Kaj je MQTT?

Kaj je MQTT?
Kaj je MQTT?

MQTT ali MQ Telemetry Transport je protokol za pošiljanje sporočil, ki omogoča medsebojno komunikacijo več naprav. Trenutno je priljubljen protokol za internet stvari, čeprav so ga uporabljali za druge namene - na primer Facebook Messenger. Zanimivo je, da je bil MQTT izumljen leta 1999 - kar pomeni, da je star toliko kot jaz!

MQTT temelji na ideji, da lahko naprave objavijo ali se naročijo na teme. Tako na primer. Če je naprava #1 zabeležila temperaturo iz enega od svojih senzorjev, lahko objavi sporočilo, ki vsebuje vrednost temperature, ki jo je zabeležila, v temo (npr. "Temperatura"). To sporočilo je poslano posredniku MQTT, ki si ga lahko omislite kot stikalo/usmerjevalnik v lokalnem omrežju. Ko posrednik MQTT prejme sporočilo, ga bo poslal v vse naprave (v tem primeru v napravo št. 2), ki so naročene na isto temo.

V tem projektu bomo objavili temo z uporabo ESP8266 in ustvarili skript Python, ki se bo naročil na isto temo, prek Raspberry Pi, ki bo deloval kot posrednik MQTT. Odlična stvar pri MQTT je, da je lahek, zato je kot nalašč za delovanje na majhnih mikrokrmilnikih, kot je ESP8266, vendar je tudi široko dostopen - zato ga lahko izvajamo tudi na skriptu Python.

Upajmo, da boste na koncu tega projekta razumeli, kaj je MQTT in kako ga v prihodnje uporabiti za svoje projekte.

2. korak: Namestitev posrednika MQTT na Raspberry Pi

Namestitev posrednika MQTT na Raspberry Pi
Namestitev posrednika MQTT na Raspberry Pi
Namestitev posrednika MQTT na Raspberry Pi
Namestitev posrednika MQTT na Raspberry Pi
Namestitev posrednika MQTT na Raspberry Pi
Namestitev posrednika MQTT na Raspberry Pi

Za nastavitev našega sistema MQTT potrebujemo posrednika, kot je razloženo v prejšnjem koraku. Za Raspberry Pi bomo uporabljali posrednika MQTT "Mosquitto". Preden to namestimo, je vedno najbolje posodobiti naš Raspberry Pi.

sudo apt-get posodobitev

sudo apt-get nadgradnja

Ko to storite, namestite komarje in nato pakete odjemalcev za komarje.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Ko končate namestitev teh dveh paketov, bomo morali konfigurirati posrednika. Konfiguracijska datoteka posrednika mosquitto se nahaja na /etc/mosquitto/mosquitto.conf, zato jo odprite s svojim najljubšim urejevalnikom besedil. Če nimate priljubljenega urejevalnika besedil ali ne veste, kako uporabljati katerega od urejevalnikov ukazne vrstice, bom uporabil nano, da boste lahko sledili:

sudo nano /etc/mosquitto/mosquitto.conf

Na dnu te datoteke bi morali videti vrstico:

include_dir /etc/mosquitto/conf.d

Izbrišite to vrstico. Na dno datoteke dodajte naslednje vrstice.

allow_anonymous false

datoteka gesla/etc/mosquitto/pwfile poslušalec 1883

Z vnosom teh vrstic smo Mosquittu povedali, da ne želimo, da se k našemu posredniku poveže kdo, ki ne poda veljavnega uporabniškega imena in gesla (to bomo nastavili v sekundi) in da želimo, da se komarji poslušajte sporočila na številki vrat 1883.

Če ne želite, da posrednik zahteva uporabniško ime in geslo, ne vključite prvih dveh vrstic, ki smo jih dodali (tj. Dovoli_anonimno … in datoteko gesla …). Če ste to storili, preskočite na ponovni zagon Raspberry Pi.

Zdaj zaprite (in shranite) to datoteko. Če sledite skupaj z nano primerom, pritisnite CTRL+X in ob pozivu vnesite Y.

Ker smo pravkar povedali Mosquitto, da je treba uporabnike, ki poskušajo uporabljati posrednika MQTT, preveriti pristnost, moramo Mosquittu povedati, kakšno je uporabniško ime in geslo! Zato vnesite naslednji ukaz - zamenjava uporabniškega imena z uporabniškim imenom, ki ga želite - nato vnesite geslo, ki bi ga želeli ob pozivu (Opomba: če ste pri urejanju konfiguracijske datoteke podali drugo pot do datoteke gesla, spodnjo pot zamenjajte z enega, ki ste ga uporabili).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile uporabniško ime

Ker smo pravkar spremenili konfiguracijsko datoteko mosquitto, bi morali znova zagnati Raspberry Pi.

sudo ponovni zagon

Ko bo Raspberry Pi končal ponovni zagon, bi morali imeti popolnoma delujočega posrednika MQTT! Nato bomo poskušali komunicirati z njim z uporabo različnih naprav/metod!

3. korak: Preizkusite posrednika

Testiranje posrednika
Testiranje posrednika

Ko namestite komarnik na Raspberry Pi, ga lahko hitro preizkusite - samo da se prepričate, ali vse deluje pravilno. V ta namen lahko v ukazni vrstici uporabimo dva ukaza. mosquitto_pub in mosquitto_sub. V tem koraku vas bom vodil skozi uporabo vsakega od teh za preizkušanje našega posrednika.

Če želite preizkusiti posrednika, morate odpreti dve okni ukazne vrstice. Če uporabljate Putty ali drugega odjemalca SSH, je to tako preprosto, kot da odprete drugo okno SSH in se prijavite kot običajno. Če do svojega Pi dostopate s terminala UNIX, je to popolnoma enako. Če uporabljate Raspberry Pi neposredno, boste morali v načinu grafičnega vmesnika odpreti dve terminalski okni (za zagon grafičnega vmesnika se uporabi ukaz startxcan).

Zdaj, ko ste odprli dve okni, lahko začnemo s testiranjem. V enega od obeh terminalov vnesite naslednji ukaz in uporabniško ime in geslo zamenjajte s tistimi, ki ste jih nastavili v prejšnjem koraku.

mosquitto_sub -d -u uporabniško ime -P geslo -t test

Če ste se v prejšnjem koraku odločili, da ne nastavite uporabniškega imena in gesla, odslej v ukazih prezrite zastavice -u in -P. Tako bi bil na primer ukaz mosquitto_sub zdaj:

mosquitto_sub -d -t test

Ukaz mosquitto_sub se bo naročil na temo in v oknu terminala prikazal vsa sporočila, poslana na določeno temo. Tukaj -d pomeni način odpravljanja napak, zato bodo vsa sporočila in dejavnosti prikazani na zaslonu. -u in -P bi morala biti samoumevna. Končno je -t ime teme, na katero se želimo naročiti - v tem primeru "test".

Nato bomo v drugem oknu terminala poskušali objaviti sporočilo na temo "test". Vnesite naslednje in znova se spomnite, da spremenite uporabniško ime in geslo:

mosquitto_pub -d -u uporabniško ime -P geslo -t test -m "Pozdravljeni, svet!"

Ko pritisnete enter, bi morali videti vaše sporočilo "Pozdravljeni, svet!" se pojavijo v prvem oknu terminala, ki smo ga uporabili (za naročanje). V tem primeru ste pripravljeni za začetek dela na ESP8266!

4. korak: Nastavitev ESP8266 (Adafruit HUZZAH)

Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)
Nastavitev ESP8266 (Adafruit HUZZAH)

Ta korak je specifičen za Adafruit HUZZAH (saj to uporabljam za dokončanje tega projekta). Če uporabljate drugo napravo Arduino / ESP8266, boste morda želeli preskočiti ta korak. Svetujem pa vam, da ga preberete, če obstaja kakšen podatek, ki bi bil za vas pomemben.

Za ta projekt bom programiral HUZZAH s programsko opremo Arduino. Torej, če tega še niste storili, namestite programsko opremo Arduino (novejšo od 1.6.4). Lahko ga prenesete tukaj.

Ko namestite programsko opremo Arduino, jo odprite in se pomaknite do Datoteka-> Nastavitve. Tu bi morali videti (pri dnu okna) besedilno polje z oznako: "Dodatni URL -ji upravitelja plošč". V to besedilno polje kopirajte in prilepite naslednjo povezavo:

arduino.esp8266.com/stable/package_esp8266com_index.json

Kliknite V redu, da shranite spremembe. Zdaj odprite upravitelja upravnega odbora (Orodja-> deska-> upravitelj odbora) in poiščite ESP8266. Namestite esp8266 s paketom skupnosti ESP8266. Znova zaženite programsko opremo Arduino.

Zdaj, preden lahko programiramo ploščo, moramo izbrati nekaj različnih možnosti. V meniju Orodja izberite Adafruit HUZZAH ESP8266 za ploščo, 80 MHz za frekvenco CPU -ja (lahko uporabite 160 MHz, če jo želite overklokirati, zaenkrat bom uporabil 80 MHz), 4M (3M SPIFFS) za velikost bliskavice in 115200 za hitrost nalaganja. Prav tako izberite vrata COM, ki jih uporabljate (to bo odvisno od vaše nastavitve).

Preden lahko naložite katero koli kodo, se morate prepričati, da je HUZZAH v načinu zagonskega nalagalnika. Če želite to omogočiti, pridržite gumb na plošči z oznako GPIO0, medtem ko držite pritisnjen, pridržite tudi gumb za ponastavitev. Nato spustite gumb za ponastavitev in nato GPIO0. Če ste to storili pravilno, bi morala rdeča LED, ki se je prižgala, ko ste pritisnili GPIO0, zdaj slabo osvetljena.

Če želite naložiti kodo v mikrokrmilnik, se najprej prepričajte, da je HUZZAH v načinu zagonskega nalagalnika, nato preprosto kliknite gumb za nalaganje v Arduino IDE.

Če imate težave pri nastavitvi HUZZAH, lahko dodatne informacije najdete v lastni vadnici Adafruit.

5. korak: Programiranje ESP8266

Programiranje ESP8266
Programiranje ESP8266

Zdaj bomo začeli s programiranjem ESP8266, preden pa lahko začnemo, boste morali v upravitelja knjižnice Arduino namestiti naslednje knjižnice (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

Ko namestite te knjižnice, boste lahko zagnali kodo, ki sem jo vključil v ta Instructable (MQTT_Publish.zip). Poskrbel sem, da bom to komentiral, da boste razumeli, kaj počne vsak odsek, kar vam bo, upam, omogočilo, da ga prilagodite svojim potrebam.

Ne pozabite spremeniti konstant na vrhu kode, tako da se lahko vaš ESP8266 poveže z vašim omrežjem WiFi in posrednikom MQTT (Raspberry Pi).

Če ste se odločili, da za posrednika MQTT ne nastavite uporabniškega imena in gesla, namesto tega prenesite datoteko MQTT_PublishNoPassword.zip.

6. korak: Namestitev odjemalca Python (paho-mqtt)

Namestitev odjemalca Python (paho-mqtt)
Namestitev odjemalca Python (paho-mqtt)

Na srečo je ta korak zelo preprost! Če želite namestiti odjemalca mosquitto python, morate v ukazno vrstico (Linux/Mac) ali celo ukazni poziv (Windows) vnesti naslednje.

pip install paho-mqtt

Opomba: ukazni poziv Windows ima lahko težave z izvajanjem ukaza pip, če niste navedli, da želite namestiti pip in dodati python v spremenljivko PATH, ko ste namestili Python. To lahko odpravite na več načinov, vendar mislim, da je najlažja ponovna namestitev Pythona. Če ste v dvomih - poiščite google!

7. korak: Odjemalec Python - naročnina

Odjemalec Python - naročnina
Odjemalec Python - naročnina

V tem koraku bomo nastavili skript Python (bodisi na samem Raspberry Pi ali v drugem računalniku, povezanem v omrežje), da bo obravnaval vsa sporočila, ki jih ESP8266 pošlje (objavi) na temo MQTT.

Spodaj sem vključil kodo python (PythonMQTT_Subscribe.py), ki je bila komentirana, da vam pomaga razumeti, kaj se dogaja, vendar bom tukaj razložil nekatere glavne funkcije.

Če za povezavo MQTT prej niste nastavili uporabniškega imena in gesla, namesto tega prenesite datoteko PythonMQTT_SubscribeNoPassword.py.

8. korak: Komunikacija med napravami ESP8266

Komunikacija med napravami ESP8266
Komunikacija med napravami ESP8266

Če želite na primer nastaviti omrežje IoT, boste morda želeli komunicirati med napravami ESP8266. Na srečo to ni veliko bolj zapleteno kot koda, ki smo jo že napisali, vendar obstaja nekaj pomembnih sprememb.

Če želi en ESP pošiljati podatke drugemu, bo moral prvi ESP objaviti temo, drugi ESP pa se bo moral na to temo naročiti. Ta nastavitev bo omogočila enosmerni pogovor - ESP (1) do ESP (2). Če želimo, da se ESP (2) pogovarja z ESP (1), lahko ustvarimo novo temo, ki jo bo ESP (2) objavil in ESP (1) se naročil. Na srečo imamo lahko več naročnikov na isto temo, zato, če želite podatke pošiljati v številne sisteme, potrebujete le eno temo (na katero so vsi naročeni, razen naprave, ki pošilja podatke, saj bo to objavljati).

Če potrebujete pomoč pri ugotavljanju, kaj mora narediti vsaka naprava, razmislite o sistemu kot sobi ljudi. Če ESP (1) objavlja, si lahko predstavljate to napravo kot "zvočnik", vse naprave, ki so naročene na temo, pa so v tem primeru "poslušalci".

Spodaj sem vključil nekaj primerov kode, ki prikazuje, kako se lahko ESP8266 naroči na temo in posluša določena sporočila - 1 in 0. Če prejmete 1, se vklopi LED na vozilu (za HUZZAH - GPIO 0).. Če prejmete 0, se ta LED izklopi.

Če želite obdelati bolj zapletene podatke, to storite v funkciji ReceivedMessage (glejte kodo).

Če želite pošiljati in prejemati podatke za svoje projekte, lahko funkcijo objave iz prejšnjega primera vključite v kodo, vključeno v ta korak. To je treba obravnavati v glavni funkciji Arduino loop ().

Ne pozabite spremeniti spremenljivk na vrhu kode, da bodo ustrezale vašemu omrežju!

Priporočena: