Obsah:

Jak používat MQTT s Raspberry Pi a ESP8266: 8 kroků (s obrázky)
Jak používat MQTT s Raspberry Pi a ESP8266: 8 kroků (s obrázky)

Video: Jak používat MQTT s Raspberry Pi a ESP8266: 8 kroků (s obrázky)

Video: Jak používat MQTT s Raspberry Pi a ESP8266: 8 kroků (s obrázky)
Video: Solární napájení pro ESP8266, Arduino, atd. 2024, Červen
Anonim
Jak používat MQTT s Raspberry Pi a ESP8266
Jak používat MQTT s Raspberry Pi a ESP8266

V tomto Instructable vysvětlím, co je protokol MQTT a jak se používá ke komunikaci mezi zařízeními. Poté vám jako praktickou ukázku ukážu, jak nastavit jednoduchý systém pro dva klienty, kde modul ESP8266 odešle zprávu do programu Python po stisknutí tlačítka. Konkrétně pro tento projekt používám modul Adafruit HUZZAH, Raspberry Pi a stolní počítač. Raspberry Pi bude fungovat jako broker MQTT a klient Python bude spuštěn ze samostatného stolního počítače (volitelně, protože to lze spustit na Raspberry Pi).

Abyste mohli postupovat podle tohoto Instructable, budete potřebovat nějaké základní znalosti elektroniky a toho, jak používat software Arduino. Měli byste také znát používání rozhraní příkazového řádku (pro Raspberry Pi). Naštěstí, jakmile získáte znalosti o tom, co je MQTT a jak jej používat v základním scénáři, budete moci vytvářet vlastní projekty IoT!

Požadované díly

  • 1 x Raspberry Pi, připojený k místní síti (běží Jessie)
  • 1 x modul ESP8266 (Adafruit HUZZAH)
  • 1 x prkénko
  • 3 x propojovací vodiče (male-to-male)
  • 1 x tlačítko
  • 1 x 10k Ohm rezistor (kód barvy hnědá-černá-oranžová)

Vytvořil jsem tento Instructable, protože MQTT mě vždy zajímal jako protokol a existuje mnoho různých způsobů, jak by jej bylo možné použít. Zdálo se však, že si nerozumím s tím, jak kódovat zařízení, aby je používala. Důvodem bylo, že jsem nevěděl/nerozuměl tomu, co se vlastně děje, abych si vzal „Hello, World!“ze zařízení A a odeslat jej do zařízení B. Proto jsem se rozhodl napsat tento Instructable, abych vás (doufejme) naučil, jak funguje, a také posílit své vlastní chápání!

Krok 1: Co je MQTT?

Co je MQTT?
Co je MQTT?

MQTT nebo MQ Telemetry Transport je protokol pro zasílání zpráv, který umožňuje vzájemné komunikaci více zařízení. V současné době je to oblíbený protokol pro internet věcí, přestože byl používán i pro jiné účely - například Facebook Messenger. Zajímavé je, že MQTT byl vynalezen v roce 1999 - což znamená, že je stejně starý jako já!

MQTT je založen na myšlence, že zařízení mohou publikovat nebo odebírat témata. Tak například. Pokud zařízení č. 1 zaznamenalo teplotu z jednoho ze svých senzorů, může k tématu (např. „Teplota“) publikovat zprávu obsahující hodnotu teploty, kterou zaznamenalo. Tato zpráva je odeslána makléři MQTT, kterého můžete považovat za přepínač/router v místní síti. Jakmile MQTT Broker obdrží zprávu, odešle ji na všechna zařízení (v tomto případě zařízení č. 2), která jsou přihlášena k odběru stejného tématu.

V tomto projektu budeme publikovat na téma pomocí ESP8266 a vytvořit skript Pythonu, který se přihlásí k odběru stejného tématu, prostřednictvím Raspberry Pi, který bude fungovat jako MQTT Broker. Skvělá věc na MQTT je, že je lehký, takže je ideální pro běh na malých mikrokontrolérech, jako je ESP8266, ale je také široce dostupný - takže ho můžeme spustit i na skriptu Pythonu.

Doufejme, že na konci tohoto projektu porozumíte tomu, co je MQTT a jak jej v budoucnu použít pro vlastní projekty.

Krok 2: Instalace MQTT Broker na Raspberry Pi

Instalace MQTT Broker na Raspberry Pi
Instalace MQTT Broker na Raspberry Pi
Instalace MQTT Broker na Raspberry Pi
Instalace MQTT Broker na Raspberry Pi
Instalace MQTT Broker na Raspberry Pi
Instalace MQTT Broker na Raspberry Pi

K nastavení našeho systému MQTT potřebujeme makléře, jak bylo vysvětleno v předchozím kroku. Pro Raspberry Pi použijeme brokera MQTT „Mosquitto“. Než to nainstalujeme, je vždy nejlepší aktualizovat náš Raspberry Pi.

sudo apt-get update

sudo apt-get upgrade

Jakmile to uděláte, nainstalujte balíčky mosquitto a pak mosquitto-clients.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Až dokončíte instalaci těchto dvou balíčků, budeme muset nakonfigurovat brokera. Konfigurační soubor brokera mosquitto je umístěn na /etc/mosquitto/mosquitto.conf, otevřete jej tedy pomocí svého oblíbeného textového editoru. Pokud nemáte oblíbený textový editor nebo nevíte, jak používat některý z editorů příkazového řádku, budu používat nano, abyste mohli postupovat následovně:

sudo nano /etc/mosquitto/mosquitto.conf

V dolní části tohoto souboru byste měli vidět řádek:

include_dir /etc/mosquitto/conf.d

Odstranit tento řádek. Přidejte následující řádky do spodní části souboru.

allow_anonymous false

heslo_soubor/etc/mosquitto/pwfile posluchač 1883

Zadáním těchto řádků jsme komáři řekli, že nechceme, aby se k našemu brokerovi připojil kdokoli, kdo neposkytne platné uživatelské jméno a heslo (za sekundu je nastavíme) a že chceme komáry poslouchejte zprávy na portu číslo 1883.

Pokud nechcete, aby broker vyžadoval uživatelské jméno a heslo, nezahrnujte první dva řádky, které jsme přidali (tj. Allow_anonymous… a heslo_soubor…). Pokud jste to udělali, přejděte k restartování Raspberry Pi.

Nyní tento soubor zavřete (a uložte). Pokud se řídíte příkladem nano, stiskněte CTRL+X a po zobrazení výzvy zadejte Y.

Protože jsme právě řekli mosquitto, že uživatelé, kteří se pokoušejí použít brokera MQTT, musí být ověřeni, musíme nyní komárům sdělit, jaké je uživatelské jméno a heslo! Zadejte tedy následující příkaz - nahrazení uživatelského jména uživatelským jménem, které byste chtěli - poté zadejte heslo, které byste chtěli po výzvě (Poznámka: pokud jste při úpravě konfiguračního souboru zadali jinou cestu heslo_souboru, nahraďte níže uvedenou cestu ten, který jste použili).

uživatelské jméno sudo mosquitto_passwd -c/etc/mosquitto/pwfile

Protože jsme právě změnili konfigurační soubor mosquitto, měli bychom restartovat Raspberry Pi.

sudo restart

Jakmile Raspberry Pi dokončí restart, měli byste mít plně fungujícího brokera MQTT! Dále se s ním pokusíme komunikovat pomocí řady různých zařízení/metod!

Krok 3: Testování makléře

Testování makléře
Testování makléře

Jakmile nainstalujete mosquitto na Raspberry Pi, můžete jej rychle otestovat - abyste se ujistili, že vše funguje správně. Za tímto účelem existují dva příkazy, které můžeme použít na příkazovém řádku. mosquitto_pub a mosquitto_sub. V tomto kroku vás provedu každým z nich k otestování našeho makléře.

Abyste mohli brokera otestovat, budete muset otevřít dvě okna příkazového řádku. Pokud používáte Putty nebo jiného klienta SSH, je to stejně jednoduché jako otevření dalšího okna SSH a přihlášení jako obvykle. Pokud přistupujete ke svému Pi z terminálu UNIX, je to úplně stejné. Pokud používáte Raspberry Pi přímo, budete muset v režimu GUI otevřít dvě okna terminálu (ke spuštění GUI lze použít příkaz startx).

Nyní, když jste otevřeli dvě okna, můžeme začít s testováním. Na jednom ze dvou terminálů zadejte následující příkaz a nahraďte uživatelské jméno a heslo těmi, které jste nastavili v předchozím kroku.

mosquitto_sub -d -u uživatelské jméno -P heslo -t test

Pokud jste se v předchozím kroku rozhodli nenastavit uživatelské jméno a heslo, pak od nynějška ignorujte v příkazech příznaky -u a -P. Například příkaz mosquitto_sub by nyní byl:

mosquitto_sub -d -t test

Příkaz mosquitto_sub se přihlásí k odběru tématu a v okně terminálu zobrazí všechny zprávy odeslané na zadané téma. Zde -d znamená režim ladění, takže všechny zprávy a aktivita budou vyvedeny na obrazovku. -u a -P by měly být samozřejmé. Nakonec -t je název tématu, ke kterému se chceme přihlásit - v tomto případě „test“.

Dále se v druhém okně terminálu pokusíme publikovat zprávu na téma „test“. Zadejte následující a znovu si zapamatujte změnu uživatelského jména a hesla:

mosquitto_pub -d -u uživatelské jméno -P heslo -t test -m "Hello, World!"

Když stisknete klávesu Enter, měla by se zobrazit vaše zpráva „Hello, World!“se objeví v prvním okně terminálu, které jsme použili (k odběru). Pokud tomu tak je, jste připraveni začít pracovat na ESP8266!

Krok 4: Nastavení ESP8266 (Adafruit HUZZAH)

Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)
Nastavení ESP8266 (Adafruit HUZZAH)

Tento krok, pokud je specifický pro Adafruit HUZZAH (protože to je to, co používám k dokončení tohoto projektu). Pokud používáte jiné zařízení Arduino / ESP8266, můžete tento krok přeskočit. Doporučil bych vám však, abyste si to přečetli, jen pro případ, že by zde byly nějaké informace, které by pro vás mohly být relevantní.

Pro tento projekt budu programovat HUZZAH pomocí softwaru Arduino. Pokud jste tak již neučinili, nainstalujte si software Arduino (novější než 1.6.4). Můžete si jej stáhnout zde.

Jakmile nainstalujete software Arduino, otevřete jej a přejděte na Soubor-> Předvolby. Zde byste měli vidět (v dolní části okna) textové pole s popiskem: „Adresy URL dalších správců desek“. Do tohoto textového pole zkopírujte a vložte následující odkaz:

arduino.esp8266.com/stable/package_esp8266com_index.json

Kliknutím na OK uložte změny. Nyní otevřete Board Manager (Nástroje-> Board-> Board Manager) a vyhledejte ESP8266. Nainstalujte balíček esp8266 by ESP8266 Community. Restartujte software Arduino.

Nyní, než budeme moci programovat desku, musíme vybrat několik různých možností. V nabídce Nástroje vyberte možnost Adafruit HUZZAH ESP8266 pro desku, 80 MHz pro frekvenci CPU (pokud chcete přetaktovat, můžete použít 160 MHz, ale prozatím budu používat 80 MHz), 4M (3M SPIFFS) pro velikost blesku a 115200 pro rychlost odesílání. Také nezapomeňte vybrat port COM, který používáte (to bude záviset na vašem nastavení).

Než budete moci nahrát jakýkoli kód, musíte se ujistit, že je HUZZAH v režimu bootloaderu. Chcete -li to povolit, podržte tlačítko na desce označené GPIO0 a zatímco toto tlačítko držíte, podržte také tlačítko Reset. Poté uvolněte tlačítko Reset a poté GPIO0. Pokud jste to udělali správně, červená LED dioda, která se rozsvítila po stisknutí GPIO0, by nyní měla slabě svítit.

Chcete -li nahrát kód do mikrokontroléru, nejprve se ujistěte, že je HUZZAH v režimu bootloaderu, poté jednoduše klikněte na tlačítko pro odeslání v Arduino IDE.

Pokud máte s nastavením HUZZAH nějaké potíže, další informace najdete ve vlastním tutoriálu Adafruit.

Krok 5: Programování ESP8266

Programování ESP8266
Programování ESP8266

Nyní začneme programovat ESP8266, ale než budeme moci začít, budete muset do správce knihovny Arduino nainstalovat následující knihovny (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

Jakmile tyto knihovny nainstalujete, budete moci spustit kód, který jsem zahrnul do tohoto Instructable (MQTT_Publish.zip). Zajistil jsem to komentovat, abyste porozuměli tomu, co každá sekce dělá, a to by vám snad mělo umožnit přizpůsobit to vašim potřebám.

Nezapomeňte změnit konstanty v horní části kódu, aby se váš ESP8266 mohl připojit k vaší WiFi síti a vašemu MQTT Broker (Raspberry Pi).

Pokud jste se rozhodli nenastavit uživatelské jméno a heslo pro makléře MQTT, stáhněte si místo toho soubor MQTT_PublishNoPassword.zip.

Krok 6: Instalace klienta Python (paho-mqtt)

Instalace klienta Python (paho-mqtt)
Instalace klienta Python (paho-mqtt)

Naštěstí je tento krok velmi jednoduchý! Chcete -li nainstalovat klienta mosquitto python, stačí zadat do příkazového řádku (Linux/Mac) nebo dokonce příkazový řádek (Windows) následující.

pip install paho-mqtt

Poznámka: Příkazový řádek Windows může mít problém se spuštěním příkazu pip, pokud jste nezadali, že chcete, aby byl pip nainstalován a python přidán do proměnné PATH při instalaci Pythonu. Existuje několik způsobů, jak to opravit, ale myslím si, že nejjednodušší je přeinstalovat Python. Pokud máte pochybnosti - dejte mu google!

Krok 7: Klient Pythonu - předplatné

Klient Python - předplatné
Klient Python - předplatné

V tomto kroku nastavíme skript Pythonu (ať už na samotném Raspberry Pi nebo na jiném počítači připojeném k síti), aby zpracovával všechny zprávy, které jsou odesílány (publikovány) ESP8266 na téma MQTT.

Níže jsem zahrnul kód pythonu (PythonMQTT_Subscribe.py), který byl komentován, aby vám pomohl pochopit, co se děje, ale vysvětlím zde také některé hlavní funkce.

Pokud jste dříve nenastavili uživatelské jméno a heslo pro připojení MQTT, stáhněte si místo toho soubor PythonMQTT_SubscribeNoPassword.py.

Krok 8: Komunikace mezi zařízeními ESP8266

Komunikace mezi zařízeními ESP8266
Komunikace mezi zařízeními ESP8266

Pokud chcete například nastavit síť IoT, možná budete chtít komunikovat mezi zařízeními ESP8266. Naštěstí to není mnohem složitější než kód, který jsme napsali dříve, ale existuje několik pozoruhodných změn.

Aby jeden ESP mohl odesílat data jinému, první ESP bude muset k tématu publikovat a druhý ESP se bude muset k tomuto tématu přihlásit. Toto nastavení umožní jednosměrný rozhovor - ESP (1) až ESP (2). Pokud chceme, aby ESP (2) hovořil zpět s ESP (1), můžeme vytvořit nové téma, na které bude ESP (2) publikovat a ESP (1) se přihlásí k odběru. Naštěstí můžeme mít více předplatitelů na stejné téma, takže pokud chcete odesílat data do několika systémů, budete potřebovat pouze jedno téma (ke kterému se všichni přihlásí, kromě zařízení, které data odesílá, protože to bude publikovat).

Pokud potřebujete pomoci zjistit, co která zařízení musí dělat, přemýšlejte o systému jako o místnosti lidí. Pokud ESP (1) publikuje, můžete si toto zařízení představit jako „reproduktor“a všechna zařízení, která se k tomuto tématu hlásí, jsou v tomto příkladu „posluchači“.

Níže jsem vložil ukázkový kód, který ukazuje, jak se ESP8266 může přihlásit k odběru tématu, a poslouchat určité zprávy - 1 a 0. Pokud je přijata 1, rozsvítí se integrovaná LED (pro HUZZAH - GPIO 0). Pokud je přijato 0, tato LED zhasne.

Pokud chcete zpracovávat složitější data, mělo by to být provedeno ve funkci ReceivedMessage (viz kód).

Pokud u svých vlastních projektů potřebujete odesílat i přijímat data, můžete do kódu zahrnutého v tomto kroku začlenit funkci publikování z předchozího příkladu. To by mělo být řešeno v hlavní funkci smyčky Arduino ().

Nezapomeňte změnit proměnné v horní části kódu, aby vyhovovaly vaší síti!

Doporučuje: