Obsah:

Ako používať MQTT s Raspberry Pi a ESP8266: 8 krokov (s obrázkami)
Ako používať MQTT s Raspberry Pi a ESP8266: 8 krokov (s obrázkami)

Video: Ako používať MQTT s Raspberry Pi a ESP8266: 8 krokov (s obrázkami)

Video: Ako používať MQTT s Raspberry Pi a ESP8266: 8 krokov (s obrázkami)
Video: Использование комплекта Wi-Fi Heltec ESP32 OLED 2024, Jún
Anonim
Ako používať MQTT s Raspberry Pi a ESP8266
Ako používať MQTT s Raspberry Pi a ESP8266

V tomto návode vysvetlím, čo je to protokol MQTT a ako sa používa na komunikáciu medzi zariadeniami. Potom vám ako praktickú ukážku ukážem, ako nastaviť jednoduchý dvojklientský systém, kde modul ESP8266 odošle správu do programu Python po stlačení tlačidla. Konkrétne na tento projekt používam modul Adafruit HUZZAH, Raspberry Pi a stolný počítač. Raspberry Pi bude fungovať ako maklér MQTT a klient Python bude spustený zo samostatného stolného počítača (voliteľné, pretože to je možné spustiť na Raspberry Pi).

Ak sa chcete riadiť týmto pokynom, budete potrebovať základné znalosti elektroniky a používania softvéru Arduino. Tiež by ste mali ovládať používanie rozhrania príkazového riadka (pre Raspberry Pi). Našťastie, akonáhle získate znalosti o tom, čo je MQTT a ako ho používať v základnom scenári, budete môcť vytvárať vlastné projekty internetu vecí!

Požadované diely

  • 1 x Raspberry Pi, pripojený k lokálnej sieti (s Jessie)
  • 1 x modul ESP8266 (Adafruit HUZZAH)
  • 1 x Breadboard
  • 3 x prepojovacie vodiče (muž-muž)
  • 1 x tlačidlo
  • 1 x 10k Ohm rezistor (hnedo-čierno-oranžový kód farby)

Vytvoril som tento návod, pretože MQTT ma vždy zaujímalo ako protokol a existuje mnoho rôznych spôsobov, ako by sa dal použiť. Zdá sa však, že mi nie je jasné, ako kódovať zariadenia, aby ich používali. Dôvodom bolo, že som nevedel/nerozumel, čo sa vlastne deje, aby som prijal moje „Ahoj, svet!“zo zariadenia A a odoslať ho do zariadenia B. Preto som sa rozhodol napísať tento návod, aby vás (dúfajme) naučil, ako funguje, a tiež posilniť svoje vlastné chápanie!

Krok 1: Čo je MQTT?

Čo je MQTT?
Čo je MQTT?

MQTT alebo MQ Telemetry Transport je protokol na odosielanie správ, ktorý umožňuje vzájomnému rozhovoru viacerých zariadení. V súčasnej dobe je to obľúbený protokol pre internet vecí, aj keď sa používa aj na iné účely - napríklad Facebook Messenger. Je zaujímavé, že MQTT bol vynájdený v roku 1999 - to znamená, že je taký starý ako ja!

MQTT je založený na myšlienke, že zariadenia môžu publikovať témy alebo sa k nim prihlásiť. Takže napr. Ak zariadenie č. 1 zaznamenalo teplotu z jedného zo svojich senzorov, môže k téme (napr. „Teplota“) zverejniť správu obsahujúcu hodnotu teploty, ktorú zaznamenalo. Táto správa je odoslaná maklérovi MQTT, ktorý si môžete predstaviť ako prepínač/smerovač v lokálnej sieti. Hneď ako maklér MQTT prijme správu, odošle ju na akékoľvek zariadenie (v tomto prípade zariadenie č. 2), ktoré je prihlásené na rovnakú tému.

V tomto projekte budeme publikovať na tému pomocou ESP8266 a vytvoríme skript Python, ktorý sa prihlási na rovnakú tému, prostredníctvom Raspberry Pi, ktoré bude fungovať ako maklér MQTT. Na MQTT je skvelé, že je ľahký, takže je ideálny na beh na malých mikrokontroléroch, ako je ESP8266, ale je tiež široko dostupný - takže ho môžeme prevádzkovať aj na skripte Python.

Našťastie na konci tohto projektu porozumiete tomu, čo je MQTT a ako ho v budúcnosti používať pre vlastné projekty.

Krok 2: Inštalácia MQTT Broker na Raspberry Pi

Inštalácia MQTT Broker na Raspberry Pi
Inštalácia MQTT Broker na Raspberry Pi
Inštalácia MQTT Broker na Raspberry Pi
Inštalácia MQTT Broker na Raspberry Pi
Inštalácia MQTT Broker na Raspberry Pi
Inštalácia MQTT Broker na Raspberry Pi

Na nastavenie nášho systému MQTT potrebujeme makléra, ako bolo vysvetlené v predchádzajúcom kroku. V prípade Raspberry Pi budeme používať makléra MQTT „Mosquitto“. Pred inštaláciou je vždy najlepšie aktualizovať náš Raspberry Pi.

sudo apt-get aktualizácia

sudo apt-get upgrade

Akonáhle to urobíte, nainštalujte balíky mosquitto a potom mosquitto-clients.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Keď dokončíte inštaláciu týchto dvoch balíkov, budeme musieť nakonfigurovať makléra. Konfiguračný súbor brokera mosquitto sa nachádza na adrese /etc/mosquitto/mosquitto.conf, otvorte ho teda vo svojom obľúbenom textovom editore. Ak nemáte obľúbený textový editor alebo neviete, ako používať ktorýkoľvek z editorov príkazového riadka, použijem nano, aby ste mohli nasledovať:

sudo nano /etc/mosquitto/mosquitto.conf

V spodnej časti tohto súboru by ste mali vidieť riadok:

include_dir /etc/mosquitto/conf.d

Odstráňte tento riadok. Do spodnej časti súboru pridajte nasledujúce riadky.

allow_anonymous false

poslucháč hesla_súbor/etc/mosquitto/pwfile 1883

Zadaním týchto riadkov sme mosquittu oznámili, že nechceme, aby sa k nášmu brokerovi pripojil niekto, kto nám neposkytne platné používateľské meno a heslo (v sekunde ich nastavíme) a že chceme, aby komár počúvajte správy na porte číslo 1883.

Ak nechcete, aby maklér vyžadoval používateľské meno a heslo, nezahrňte prvé dva riadky, ktoré sme pridali (t. J. Allow_anonymous … a password_file …). Ak ste to urobili, preskočte na reštartovanie Raspberry Pi.

Teraz zatvorte (a uložte) tento súbor. Ak sa riadite príkladom nano, stlačte kombináciu klávesov CTRL+X a po zobrazení výzvy napíšte Y.

Pretože sme práve informovali mosquitto, že používatelia pokúšajúci sa používať makléra MQTT musia byť autentifikovaní, musíme teraz komárovi povedať, aké je užívateľské meno a heslo! Zadajte teda nasledujúci príkaz - nahraďte používateľské meno používateľským menom, ktoré by ste chceli - a potom na výzvu zadajte požadované heslo (Poznámka: ak ste pri úprave konfiguračného súboru zadali inú cestu k súboru password_file, nahraďte nižšie uvedenú cestu ten, ktorý ste použili).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile užívateľské meno

Pretože sme práve zmenili konfiguračný súbor mosquitto, mali by sme reštartovať Raspberry Pi.

sudo reštart

Akonáhle Raspberry Pi dokončí reštart, mali by ste mať plne funkčného brokera MQTT! Ďalej sa pokúsime s ním interagovať pomocou niekoľkých rôznych zariadení/metód!

Krok 3: Testovanie makléra

Testovanie makléra
Testovanie makléra

Akonáhle ste na Raspberry Pi nainštalovali mosquitto, môžete ho rýchlo otestovať - aby ste sa uistili, že všetko funguje správne. Na tento účel existujú dva príkazy, ktoré môžeme použiť na príkazovom riadku. mosquitto_pub a mosquitto_sub. V tomto kroku vás prevediem každým z nich na testovanie nášho makléra.

Na otestovanie brokera budete musieť otvoriť dve okná príkazového riadka. Ak používate Putty alebo iného klienta SSH, je to jednoduché ako otvorenie iného okna SSH a prihlásenie sa ako obvykle. Ak pristupujete k svojmu Pi z terminálu UNIX, je to presne to isté. Ak používate Raspberry Pi priamo, budete musieť otvoriť dve okná terminálu v režime GUI (na spustenie GUI je možné použiť príkaz startx).

Teraz, keď ste otvorili dve okná, môžeme začať s testovaním. Do jedného z dvoch terminálov zadajte nasledujúci príkaz a používateľské meno a heslo nahraďte tými, ktoré ste nastavili v predchádzajúcom kroku.

mosquitto_sub -d -u užívateľské meno -P heslo -t test

Ak ste sa v predchádzajúcom kroku rozhodli nenastaviť používateľské meno a heslo, odteraz ignorujte v príkazoch príznaky -u a -P. Napríklad príkaz mosquitto_sub by teraz bol:

mosquitto_sub -d -t test

Príkaz mosquitto_sub sa prihlási na odber témy a v okne terminálu zobrazí všetky správy odoslané na zadanú tému. Tu -d znamená režim ladenia, takže všetky správy a aktivita sa budú zobrazovať na obrazovke. -u a -P by mali byť samozrejmé. Nakoniec -t je názov témy, ku ktorej odberu sa chceme prihlásiť - v tomto prípade „test“.

Ďalej sa v druhom okne terminálu pokúsime zverejniť správu na tému „test“. Zadajte nasledujúci text a znova si zapamätajte, aby ste zmenili používateľské meno a heslo:

mosquitto_pub -d -u používateľské meno -P heslo -t test -m "Ahoj, svet!"

Keď stlačíte kláves Enter, mala by sa vám zobraziť správa „Ahoj, svet!“sa objaví v prvom okne terminálu, ktoré sme použili (na prihlásenie sa na odber). Ak je to tak, môžete začať pracovať na ESP8266!

Krok 4: Nastavenie ESP8266 (Adafruit HUZZAH)

Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)
Nastavenie ESP8266 (Adafruit HUZZAH)

Tento krok, ak je špecifický pre Adafruit HUZZAH (pretože ho používam na dokončenie tohto projektu). Ak používate iné zariadenie Arduino / ESP8266, tento krok môžete preskočiť. Odporúčam však, aby ste si to najskôr prečítali, pre prípad, že by tu boli nejaké informácie, ktoré by pre vás mohli byť relevantné.

Pre tento projekt budem programovať HUZZAH pomocou softvéru Arduino. Ak ste to teda ešte neurobili, nainštalujte si softvér Arduino (novší ako 1.6.4). Môžete si ho stiahnuť tu.

Akonáhle máte nainštalovaný softvér Arduino, otvorte ho a prejdite na Súbor-> Predvoľby. Tu by ste mali vidieť (v spodnej časti okna) textové pole s označením: „Adresy URL ďalších správcov dosiek“. Do tohto textového poľa skopírujte a prilepte nasledujúci odkaz:

arduino.esp8266.com/stable/package_esp8266com_index.json

Kliknutím na tlačidlo OK uložte zmeny. Teraz otvorte Správcu dosiek (Nástroje-> Doska-> Správca dosky) a vyhľadajte ESP8266. Nainštalujte balík esp8266 by ESP8266 Community. Reštartujte softvér Arduino.

Teraz, než budeme môcť dosku naprogramovať, musíme vybrať niekoľko rôznych možností. V možnosti ponuky Nástroje vyberte Adafruit HUZZAH ESP8266 pre dosku, 80 MHz pre frekvenciu CPU (ak chcete pretaktovať, môžete použiť 160 MHz, ale zatiaľ budem používať 80 MHz), 4 M (3 M SPIFFS) pre veľkosť blesku a 115200 pre rýchlosť odosielania. Nezabudnite tiež vybrať port COM, ktorý používate (to bude závisieť od vášho nastavenia).

Pred nahraním akéhokoľvek kódu sa musíte uistiť, že je HUZZAH v režime bootloadera. Ak to chcete povoliť, podržte tlačidlo na doske s označením GPIO0 a podržte ho aj tlačidlo Reset. Potom uvoľnite tlačidlo Reset a potom GPIO0. Ak ste to urobili správne, červená LED dióda, ktorá sa rozsvietila po stlačení GPIO0, by teraz mala slabo svietiť.

Ak chcete nahrať kód do mikrokontroléra, najskôr sa uistite, že je HUZZAH v režime bootloadera, potom jednoducho kliknite na tlačidlo nahrávania v Arduino IDE.

Ak máte problémy s nastavením HUZZAH, ďalšie informácie nájdete vo vlastnom návode Adafruit.

Krok 5: Programovanie ESP8266

Programovanie ESP8266
Programovanie ESP8266

Teraz začneme programovať ESP8266, ale než budeme môcť začať, budete musieť do správcu knižníc Arduino nainštalovať nasledujúce knižnice (Skica-> Zahrnúť knižnice-> Spravovať knižnice)

  • Bounce2
  • PubSubClient

Hneď ako nainštalujete tieto knižnice, budete môcť spustiť kód, ktorý som uviedol v tomto návode (MQTT_Publish.zip). Uistil som sa, že to komentujem, aby ste porozumeli tomu, čo jednotlivé sekcie robia, a to by vám dúfajme malo umožniť prispôsobiť to vašim potrebám.

Nezabudnite zmeniť konštanty v hornej časti kódu, aby sa váš ESP8266 mohol pripojiť k vašej sieti Wi -Fi a vášmu maklérovi MQTT (Raspberry Pi).

Ak ste sa rozhodli nenastaviť používateľské meno a heslo pre makléra MQTT, stiahnite si namiesto toho súbor MQTT_PublishNoPassword.zip.

Krok 6: Inštalácia klienta Python (paho-mqtt)

Inštalácia klienta Python (paho-mqtt)
Inštalácia klienta Python (paho-mqtt)

Našťastie je tento krok veľmi jednoduchý! Ak chcete nainštalovať klienta mosquitto python, stačí zadať do príkazového riadka (Linux/Mac) alebo dokonca príkazového riadka (Windows) nasledujúci príkaz.

pip install paho-mqtt

Poznámka: Príkazový riadok systému Windows môže mať problém so spustením príkazu pip, ak ste nezadali, že chcete, aby bol pri inštalácii Pythonu do nainštalovanej premennej PATH nainštalovaný pip a python. Existuje niekoľko spôsobov, ako to opraviť, ale myslím si, že najjednoduchším spôsobom je iba opätovná inštalácia Pythonu. Ak máte pochybnosti - dajte si google!

Krok 7: Klient Python - predplatné

Klient Python - Predplatné
Klient Python - Predplatné

V tomto kroku nastavíme skript Python (buď na samotnom Raspberry Pi alebo na inom počítači pripojenom k sieti) tak, aby spracovával všetky správy, ktoré ESP8266 odosiela (zverejňuje) na tému MQTT.

Nižšie som zahrnul kód pythonu (PythonMQTT_Subscribe.py), ktorý bol komentovaný, aby vám pomohol pochopiť, čo sa deje, ale vysvetlím tu aj niektoré hlavné funkcie.

Ak ste pre pripojenie MQTT nenastavili používateľské meno a heslo skôr, stiahnite si namiesto toho súbor PythonMQTT_SubscribeNoPassword.py.

Krok 8: Komunikácia medzi zariadeniami ESP8266

Komunikácia medzi zariadeniami ESP8266
Komunikácia medzi zariadeniami ESP8266

Ak chcete napríklad nastaviť sieť IoT, možno budete chcieť komunikovať medzi zariadeniami ESP8266. Našťastie to nie je oveľa zložitejšie ako kód, ktorý sme napísali predtým, existuje však niekoľko pozoruhodných zmien.

Na to, aby jeden ESP mohol odosielať údaje druhému, bude potrebné, aby prvý ESP publikoval k téme a druhý ESP sa k tejto téme prihlásil. Toto nastavenie umožní jednosmerný rozhovor - ESP (1) až ESP (2). Ak chceme, aby sa ESP (2) rozprával s ESP (1), môžeme vytvoriť novú tému, ku ktorej bude ESP (2) publikovať a ESP (1) sa prihlási na odber. Našťastie môžeme mať viacerých predplatiteľov na rovnakú tému, takže ak chcete odosielať údaje do viacerých systémov, budete potrebovať iba jednu tému (ku ktorej sa prihlásia všetci, okrem zariadenia, ktoré údaje odosiela). publikovať).

Ak potrebujete pomoc s určením, čo jednotlivé zariadenia musia robiť, uvažujte o systéme ako o miestnosti ľudí. Ak publikuje ESP (1), môžete si toto zariadenie predstaviť ako „reproduktor“a všetky zariadenia, ktoré sa prihlásia na odber témy, sú v tomto prípade „poslucháčmi“.

Nižšie som vložil príklad kódu, ktorý ukazuje, ako sa ESP8266 môže prihlásiť k téme a počúvať určité správy - 1 a 0. Ak je prijatá 1, zapne sa palubná dióda LED (pre HUZZAH - GPIO 0). Ak je prijatý 0, táto dióda LED zhasne.

Ak chcete spracovať zložitejšie údaje, musíte to urobiť vo funkcii ReceivedMessage (pozri kód).

Pokiaľ pre svoje vlastné projekty potrebujete odosielať aj prijímať údaje, môžete do kódu zahrnutého v tomto kroku začleniť funkciu publikovania z predchádzajúceho príkladu. To by malo byť vyriešené v hlavnej funkcii Arduino loop ().

Nezabudnite zmeniť premenné v hornej časti kódu tak, aby vyhovovali vašej sieti!

Odporúča: