Protokol MQTT

02.10.2022 Embedded systémy #mqtt

Tento článek je úvodem do protokolu MQTT. MQTT je zkratka pro Message Queuing Telemetry Transport , jednoduchý protokol pro zasílání zpráv vhodný pro komunikaci mezi zařízeními IoT.


Ve světě IoT (Internet of Things) otevírá kombinace Raspberry Pi a Arduina řadu možností pro vytváření aplikací pro sběr a ovládání dat. Jedním z nejúčinnějších přístupů pro bezproblémovou komunikaci mezi těmito dvěma platformami je použití protokolu MQTT (Message Queuing Telemetry Transport). V tomto článku prozkoumáme, jak využít sílu MQTT k vytvoření robustního spojení mezi Raspberry Pi a ESP32, což umožňuje obousměrnou výměnu dat a ovládání.

Porozumění MQTT

MQTT je lehký, efektivní a spolehlivý protokol pro zasílání zpráv určený pro komunikaci mezi zařízeními v IoT a dalších vzdálených prostředích. Funguje na modelu publikování a odběru, kde zařízení mohou publikovat zprávy na konkrétní „témata“ a přihlásit se k odběru zpráv z těchto témat.

Model Publish-Subscribe: V MQTT jsou zařízení rozdělena na vydavatele (Publisher) a předplatitele (Subscriber). Vydavatelé posílají zprávy na konkrétní témata a předplatitelé dostávají zprávy z témat, která je zajímají. Tato oddělená komunikace umožňuje zařízením komunikovat bez přímé vzájemné znalosti.

Broker: Ústřední složkou v MQTT je broker. Funguje jako prostředník, který se stará o distribuci zpráv mezi vydavateli a předplatiteli. Zprostředkovatel zajišťuje, že zprávy jsou správně směrovány k zamýšleným příjemcům.

Představte si svět komunikace IoT jako rušné město plné zařízení, z nichž každé nese cenné balíčky dat. Stejně jako ve fyzickém světě, kde je zásadní včasné a efektivní doručení, potřebují zařízení internetu věcí spolehlivý a efektivní způsob výměny informací. Zde vstupuje do hry MQTT, která působí jako důvěryhodná „DHL“ v oblasti IoT.

1. Balíček (data): V analogii DHL představuje „balíček“ data, která je třeba odeslat z jednoho místa na druhé. Podobně v MQTT je „balíček“ užitečným zatížením informací, které si zařízení chtějí vyměňovat. Touto užitečnou zátěží může být cokoli od údajů ze senzorů, řídicích příkazů až po aktualizace stavu.

2. Odesílatel (Publisher): V DHL je odesílatel odpovědný za přípravu balíku, jeho správné označení a předání doručovací službě. V MQTT se „odesílatel“ nazývá „vydavatel“. Je to zařízení, které chce sdílet svá data. Stejně jako DHL připojuje vydavatel data k „tématu“ MQTT, které funguje jako štítek na obalu.

3. Příjemce (Subscriber): DHL zajišťuje, že balík bezpečně dorazí na zamýšlené místo určení. Podobně v MQTT je „přijímač“ „předplatitel“. Je to zařízení, které chce přijímat data odeslaná vydavatelem. Předplatitel se přihlásí k odběru konkrétních témat MQTT, podobně jako čekání na balíčky označené konkrétními adresami.

4. Doručovací síť (MQTT Broker): Nyní se kouzlo odehrává zde. V analogii DHL představuje „doručovací síť“ infrastrukturu, která usnadňuje hladký pohyb zásilek od odesílatelů k příjemcům. V MQTT tuto roli hraje broker MQTT. Broker funguje jako centrální hub, přijímá data od vydavatelů (odesílatelů) a doručuje je předplatitelům (příjemcům) na základě témat.

Sběr dat z ESP32 do Raspberry Pi:

ESP32 inicializujte připojení Wi-Fi pro navázání síťového připojení. Naváže spojení s brokerem MQTT běžícím na Raspberry Pi. To zahrnuje specifikaci IP adresy nebo názvu hostitele Raspberry Pi a portu MQTT (výchozí je obvykle 1883). Je definováno jako téma, pod kterým se mají publikovat data. Toto téma funguje jako komunikační kanál. Funkce publish() odešle data do zadaného tématu. A data lze ukládat nebo zobrazovat v reálném čase na řídicím panelu.

mqqt01 

Ovládání ESP32 z Raspberry Pi:

Ovládání ESP32 z Raspberry Pi pomocí MQTT zahrnuje opačný proces ve srovnání s odesíláním dat. Jakmile budeme mít způsob, jak posílat dál pomocí tlačítka nebo jinými způsoby, jako je použití hlasu s chytrými asistenty. Jako příklad je použit Python, ale dá se použít i jinými způsoby. Ze skriptu Python běžícího na Raspberry Pi je navázáno spojení s brokerem MQTT běžícím na stejném Pi. Poté se přihlaste k tématu MQTT, které bude použito pro odesílání ovládacích příkazů do ESP32. ESP32 bude poslouchat toto téma pro příchozí příkazy.

Z vašeho skriptu Python na Raspberry Pi publikujte zprávy do ovládacího tématu, abyste spustili akce na ESP32. Zprávy mohou být jednoduché příkazy jako „turn_on_led“ nebo „start_motor“ a ESP32 provede odpovídající akci (např. rozsvítí LED).

mqqt2 

Co je MQTT?

MQTT je zkratka pro  Message Queuing Telemetry Transport. MQTT je jednoduchý protokol pro zasílání zpráv navržený pro omezená zařízení s malou šířkou pásma. Je to tedy perfektní řešení pro výměnu dat mezi více zařízeními IoT.

Komunikace MQTT funguje jako systém odesílání a přijímání. Zařízení publikují zprávy na konkrétní téma. Zprávu obdrží všechna zařízení, která jsou přihlášena k odběru tohoto tématu.

publish-subscribe-mqtt 

Mezi jeho hlavní aplikace patří odesílání zpráv pro ovládání výstupů, čtení a publikování dat ze senzorových uzlů a mnoho dalšího.

Základní pojmy MQTT

V MQTT existuje několik základních pojmů, kterým musíte porozumět:

MQTT – Publikovat/Přihlásit se k odběru

Prvním konceptem je systém Odesílání a příjmu. V systému publikování a odběru může zařízení odeslat zprávu nebo se může přihlásit k odběru a přijímat zprávy

publish-subscribe-topic-mqtt 

  • Například zařízení 1 odesílá téma.
  • Zařízení 2 je přihlášeno ke stejnému tématu, ve kterém publikuje zařízení 1.
  • Zařízení 2 tedy přijme zprávu.

MQTT – Zprávy

Zprávy jsou informace, které si chcete vyměňovat mezi svými zařízeními. Může to být zpráva jako příkaz nebo data, jako jsou například hodnoty senzorů.

MQTT – Témata

Dalším důležitým pojmem jsou témata. Témata představují způsob, jakým registrujete zájem o příchozí zprávy nebo jak určíte, kde chcete zprávu publikovat.

Témata jsou reprezentována řetězci oddělenými lomítkem. Každé lomítko označuje úroveň tématu. Zde je příklad toho, jak byste vytvořili téma pro světlo ve vaší domácí kanceláři:

5mqtt-topics 

Poznámka: V tématech se rozlišují velká a malá písmena, čímž se tato dvě témata liší:

7case-sensitive-300x188 

Pokud byste chtěli zapnout světlo ve vaší domácí kanceláři pomocí MQTT, můžete si představit následující scénář

mqtt-publish-subscribe-example 

  1. Zařízení publikuje zprávy „zapnuto“ a „vypnuto“ na téma home/office/lamp.
  2. Máte zařízení, které ovládá světlo (může to být ESP32, ESP8266 nebo jakákoli jiná deska nebo zařízení). ESP32, který ovládá světlo, je přihlášen ke stejnému tématu:  home/office/lamp.
  3. Když je tedy publikována nová zpráva na toto téma, ESP32 přijme zprávy „on“ nebo „off“ a rozsvítí nebo zhasne lampu.

Zařízení, které publikuje zprávy, může být ESP32, ESP8266 nebo platforma řadiče Home Automation s podporou MQTT, jako je například Node-RED, Home Assistant, Domoticz nebo OpenHAB.

device1 

MQTT – Broker

Konečně dalším důležitým pojmem je broker.

Broker MQTT je zodpovědný za příjem všech zpráv, filtrování zpráv, rozhodování o tom, kdo o ně má zájem, a následné zveřejnění zprávy všem přihlášeným klientům.

mqtt_broker 

Existuje několik brokerů, které lze využít. V projektech domácí automatizace lze využít Mosquitto Broker nainstalovaný na Raspberry Pi. Mosquitto broker si také můžete nainstalovat do svého PC (což není tak pohodlné jako použití desky Raspberry Pi, protože musíte mít počítač neustále v chodu, abyste udrželi MQTT spojení mezi vašimi zařízeními)

mosquitto-broker 

Nainstalovaný Mosquitto broker na Raspberry Pi ve vaší síti vám umožní vyměňovat si data mezi vašimi IoT zařízeními, která jsou také připojena ke stejné síti.

Chcete-li nainstalovat Mosquitto broker na Raspberry Pi, postupujte podle našeho návodu:

Broker Mosquitto MQTT můžete provozovat také v cloudu. Spuštění MQTT Mosquitto Broker v cloudu vám umožní připojit několik zařízení IoT odkudkoli pomocí různých sítí, pokud mají připojení k internetu.

Jak používat MQTT v projektech domácí automatizace a IoT

MQTT je skvělé pro domácí automatizaci a projekty internetu věcí. Zde je příklad toho, jak jej lze použít v systému domácí automatizace postaveném na levných vývojových deskách, jako jsou Raspberry Pi, ESP32, ESP8266 a Arduino

home-automation-mqtt-example 

  • Raspberry Pi provozuje zprostředkovatele Mosquitto, který je nezbytný pro protokol MQTT.
  • Na stejném Raspberry Pi běží Node-RED, což je platforma pro domácí automatizaci s podporou MQTT – to znamená, že se může přihlásit k odběru témat, přijímat zprávy z ostatních zařízení IoT a publikovat zprávy na konkrétní témata a odesílat zprávy na jiná zařízení.
  • Node-RED také umožňuje vytvořit uživatelské rozhraní s tlačítky pro ovládání výstupů a grafy pro zobrazení hodnot senzorů.
  • Arduino, ESP32 a ESP8266 mohou fungovat jako klienti MQTT, kteří publikují a odebírají témata.
  • Tyto desky jsou připojeny k akčním členům, jako jsou LED nebo relé, a senzorům, jako jsou senzory teploty, vlhkosti, kouře atd.
  • Tito desky mohou publikovat data o stavu senzoru na konkrétní téma, ke kterému je Node-RED také přihlášen. Tímto způsobem Node-RED přijímá hodnoty senzoru a může je zobrazovat na uživatelském rozhraní.
  • Na druhé straně může Node-RED publikovat data na konkrétní téma pro ovládání výstupů, když použijete tlačítka na rozhraní. Ostatní desky jsou také přihlášeny k tomuto tématu a podle toho řídí výstupy.

Následující obrázek ukazuje příklad uživatelského rozhraní Node-RED, které umožňuje ovládat jeden výstup a zobrazuje hodnoty teploty a vlhkosti:

node-red-ui-output-temperature-humidity 

Zde je rychlý souhrn kroků, které byste měli provést, abyste vytvořili něco, co bylo popsáno dříve:

  1. Nastavte si Raspberry Pi. Postupujte podle našeho průvodce Začínáme s Raspberry Pi.
  2. Povolte a připojte své Raspberry Pi pomocí SSH.
  3. Musíte mít nainstalovaný Node-RED na Pi a Node-RED Dashboard.
  4. Nainstalujte Mosquitto broker na Raspberry Pi.
  5. Přidejte k tomuto systému ESP8266 nebo ESP32.

Závěr

MQTT je komunikační protokol založený na systému publikování a odběru. Zařízení se mohou přihlásit k odběru tématu nebo publikovat data k tématu. Zařízení přijímají zprávy, které jsou publikovány na témata, k jejichž odběru jsou přihlášena.

MQTT se snadno používá a je skvělé pro projekty internetu věcí a domácí automatizace.

Literatura:

What is MQTT and How It Works. Random Nerd Tutorials [online]. RandomNerdTutorials.com, 2022 [cit. 2022-09-28]. Dostupné z: https://randomnerdtutorials.com/what-is-mqtt-and-how-it-works/#publish-subscribe