- Co to jest protokół MQTT?
- Jak działa MQTT?
- Broker Eclipse Mosquitto
- Wymagane składniki
- Obwód testowy Eclipse MQTT - schemat
- Programowanie ESP8266 do nawiązania komunikacji z brokerem
- Testowanie MQTT z ESP8266 przy użyciu Arduino
W ciągu ostatnich kilku lat urządzenia IoT (Internetu rzeczy) stały się nieodróżnialną częścią naszego codziennego życia. Od inteligentnych domów, inteligentnych żarówek po inteligentne urządzenia; twórcy i programiści wykorzystują tę technologię, aby stworzyć sieć połączonych urządzeń, która sprawia, że nasze codzienne życie jest trochę bardziej ekscytujące. Wszystko to stało się możliwe dzięki łatwości komunikacji. Istnieje wiele możliwych sposobów komunikowania się między urządzeniami, ale w produktach komercyjnych i hobbystycznych jeden protokół, który jest powszechnie używany, to Message Queuing Telemetry Transport (MQTT). Wcześniej zbudowaliśmy sterowane głosem radio FM przy użyciu Arduino i Asystenta Google, które wykorzystuje MQTT do komunikacji z płytą NodeMCU. Sprawdź to, jeśli brzmi to interesująco.
W tym projekcie będziemy korzystać z bezpłatnego i popularnego brokera Eclipse MQTT i nauczymy się, jak podłączyć urządzenie IoT (w naszym przypadku jest to moduł NodeMCU) do brokera MQTT i przesyłać dane między brokerem MQTT a NodeMCU.
Co to jest protokół MQTT?
Zanim przejdziemy dalej, to lepiej mieć jasne wyobrażenie o MQTT (kolejkowania wiadomości telemetryczne) protokołu. Jest to lekki protokół przesyłania wiadomości, który wykorzystuje metodę publikowania / subskrypcji i tłumaczy wiadomości między wieloma urządzeniami. Korzystając z protokołu MQTT, możemy również wysyłać / odbierać dane i sterować różnymi urządzeniami wyjściowymi, np. Odczytywać dane z czujników, itp. Został opracowany na bazie TCP, dlatego jest szybszy niż podobne protokoły, takie jak HTTP. Poza tym ma wiele innych zalet w stosunku do innych protokołów, takich jak bardzo lekki, więc nie zużywa nadmiaru pamięci, może pracować z bardzo mniejszą przepustowością sieci, a ponadto ma wbudowany solidny protokół bezpieczeństwa. Te cechy sprawiają, że nadaje się do wielu zastosowań.
Jak działa MQTT?
Aby zrozumieć działanie protokołu MQTT, musimy po prostu zrozumieć trzy podstawowe rzeczy; powyższy diagram pokazuje to. Ponadto wyjaśniliśmy to poniżej w artykule.
Klient MQTT:
Klient MQTT jest każde urządzenie (może to być mikrokontroler lub serwer), który uruchamia funkcje MQTT i komunikuje się z centralnym serwerem, który jest znany jako „ pośrednika ”. Broker obsługuje komunikację danych między połączonymi klientami.
Wydawca MQTT:
Gdy klient chce wysłać jakiekolwiek informacje, nazywany jest „wydawcą”. Wydawca opublikuje informacje na określony temat. „ Temat ” to ścieżka, na której możemy publikować / subskrybować wiadomości. Broker następnie wysyła informacje opublikowane przez użytkownika do klientów (znanych również jako subskrybent), którzy zasubskrybowali ten konkretny temat.
Abonent MQTT:
MQTT Abonent podpisuje w tematach na MQTT maklera czytać wiadomości wysłane przez brokera.
Broker Eclipse Mosquitto
Eclipse Mosquitto to broker MQTT typu open source, który jest lekki i nadaje się do użytku na urządzeniach IoT do komunikacji. Protokół MQTT zapewnia lekką metodę przekazywania informacji z wykorzystaniem publikowania / subskrypcji model. Jeśli chcesz dowiedzieć się więcej na ten temat, możesz odwiedzić oficjalną stronę poświęconą komarom.
Konfiguracja brokera Eclipse Mosquitto:
Aby nawiązać komunikację z brokerem, musimy ją najpierw skonfigurować. W tym projekcie aplikacja na Androida jest używana do publikowania i subskrybowania informacji u Brokera. Poniższe kroki pozwolą Ci lepiej zrozumieć proces konfiguracji.
Krok 1:
Najpierw pobierz dowolną aplikację „klienta MQTT” dostępną w Google Play Store / App Store i zainstaluj ją. W tym projekcie używana jest aplikacja o nazwie „Klient MQTT”, która wygląda jak na poniższym obrazku.
Krok 2:
Kliknij na znak „+”, aby wyświetlić dodatkowe opcje w aplikacji, w której mamy zamiar dodać nowego brokera. Po kliknięciu przycisku pojawi się nowy ekran, jak pokazano poniżej.
Krok 3:
Następnie w wymaganym polu należy wypełnić dane brokera. Najpierw kliknij opcję „Włączone” widoczną w aplikacji. W tym projekcie wykorzystany jest broker Eclipse MQTT, szczegóły, które należy wypełnić podajemy poniżej:
Pseudonim: podaj swoje preferencje
Host: mqtt.eclipse.org
Port: 1883
Identyfikator klienta: podaj swój preferowany identyfikator
Powyższe dane należy wypełnić w odpowiednich polach. Wszystkie inne pola nie są konieczne i można je pozostawić puste. Po pomyślnym zakończeniu kliknij przycisk Zapisz, aby zapisać dane brokera.
Po zakończeniu proces konfiguracji aplikacji na Androida dobiegł końca i teraz możemy przejść do strony sprzętowej.
Wymagane składniki
Pełna lista wymaganych części została opisana poniżej. Ponieważ ten obwód jest prosty, wszystkie niezbędne części można znaleźć w lokalnym sklepie hobbystycznym.
- NodeMCU
- DOPROWADZIŁO
- Płytka prototypowa
- Przewody łączące
- Kabel do programowania
Obwód testowy Eclipse MQTT - schemat
Schemat obwodu dla projektu Basic MQTT przedstawiono poniżej:
Programowanie ESP8266 do nawiązania komunikacji z brokerem
Prosty kod Arduino dba o całą niezbędną komunikację między brokerem MQTT a NodeMCU. W tej sekcji dowiemy się szczegółowo, jak działa ta funkcja.
Skonfiguruj Arduino IDE i prześlij kod:
Jeśli przesyłasz kod do NodeMCU po raz pierwszy, musisz najpierw skonfigurować Arduino IDE. Aby to zrobić, postępuj zgodnie z prostą instrukcją podaną poniżej.
Najpierw otwórz Arduino IDE, a następnie przejdź do Plik–> Preferencje–> Ustawienia .
Następnie skopiuj poniższy adres URL i wklej go w polu „Dodatkowy adres URL menedżera tablicy ” i kliknij „OK”. Możesz sprawdzić poniższy obrazek, aby dowiedzieć się, jak to zrobiliśmy.
Link:
Następnie przejdź do Narzędzia> Tablica> Menedżer tablic . W oknie Menedżera tablicy wpisz ESP 8266 w polu wyszukiwania i naciśnij Enter. Następnie wybierz najnowszą wersję z listy rozwijanej i kliknij zainstaluj. Poniższy obrazek da ci jasny pomysł.
Na koniec, po zakończeniu instalacji, przejdź do Narzędzia -> Płytka -> i wybierz NodeMCU 1.0 (moduł ESP-12E). Teraz możesz programować NodeMCU za pomocą Arduino IDE. Gdy zakończyliśmy konfigurację Arduino IDE, możemy teraz przesłać cały kod. Ale najpierw przeczytaj krótkie wyjaśnienie całego kodu.
Po pierwsze, dołączyliśmy „ESP8266WiFi.h” do używania ESP8266 i „PubSubClient.h” dla MQTT.
Możesz znaleźć bibliotekę ESP8266 wstępnie zbudowaną w bibliotece Arduino, ale musisz pobrać bibliotekę PubSubClient z powiązanego repozytorium GitHub.
#zawierać
Następnie zdefiniuj poświadczenia sieciowe, takie jak nazwa użytkownika Wi-Fi i hasło. Zastąp swoje dane logowania odpowiednio zamiast „admin” i „12345678”.
const char * ssid = "admin"; const char * hasło = "12345678";
Następnie musimy skonfigurować serwer MQTT. W tym projekcie użyliśmy serwera Eclipse MQTT, dlatego adres serwera jest podany jako „mqtt.eclipse.org”. Ale jeśli planujesz używać dowolnego innego serwera, takiego jak Mosquitto, Adafruit, możesz go zastąpić określonym adresem serwera i numerem portu.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Następnie tworzone są instancje dla klas WiFiClient i PubSubClient , które będą używane w całym programie.
WiFiClient espClient; Klient PubSubClient (espClient);
W setup () sekcji nazywamy WiFi.begin () po pierwsze, wywołanie tej metody połączy ESP do preferowanej HotSpot.
WiFi.begin (ssid, hasło);
Następnie sprawdzamy pomyślne połączenie sieciowe za pomocą metody WiFi.status () . Po pomyślnym połączeniu na monitorze szeregowym drukowany jest komunikat z identyfikatorem SSID podłączonej sieci.
while (WiFi.status ()! = WL_CONNECTED) {opóźnienie (500); Serial.println („Łączenie z Wi-Fi…”); } Serial.print („Połączono z WiFi:”); Serial.println (WiFi.SSID ());
Teraz musimy stworzyć brokera. W tym celu użyliśmy metody setServer ; ta metoda przyjmuje dwa argumenty, które wcześniej zdefiniowaliśmy. Teraz, jeśli chcemy otrzymywać wiadomości z serwera, musimy utworzyć funkcję zwrotną. W tym celu używamy metody setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Teraz użyliśmy funkcji connect (clientID) do połączenia się z klientem ESP8266. W tym miejscu ID klienta to nazwa klienta, która musi być unikalna. Jeśli jest podłączony, na monitorze szeregowym może zostać wyświetlony komunikat o powodzeniu.
if (client.connect ("ESP8266")) {Serial.println ("połączony"); } else {Serial.print ("błąd ze stanem") Serial.println (client.state ()); opóźnienie (2000); }
Następnie wywołujemy client.subscribe () , wbudowaną funkcję MQTT, która służy do subskrybowania określonego tematu. W tym projekcie użyliśmy „ esp / test ” jako nazwy naszego subskrybenta.
client.subscribe ("esp / test");
Teraz wywoływana jest funkcja MQTTcallback, aby sprawdzić, czy są dostępne zaktualizowane informacje. Jeśli są dostępne nowe dane, ta funkcja obsługuje odebrane dane i drukuje komunikat na monitorze szeregowym z oryginalną wiadomością i nazwą tematu, w którym wiadomość została odebrana.
Następnie konwertujemy wiadomości na ciąg, aby można było je porównać i sprawdzić pod kątem wszelkich działań wyzwalających. W tym projekcie dioda LED jest włączana / wyłączana za pomocą poleceń MQTT, jak pokazano na poniższym kodzie.
for (int i = 0; i <length; i ++) {message = message + (char) payload; } Serial.print (komunikat); if (komunikat == "on") {digitalWrite (LED, WYSOKI); }
Na koniec opublikowanie informacji na ten temat. Client.publish () Funkcja ta jest wykorzystywana. W tym projekcie stan przycisku jest sprawdzany, jeśli przycisk jest wciśnięty, wiadomość jest publikowana w temacie „ esp / test1 ”, jak pokazano poniżej.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Witaj z ESP8266"); } else; client.loop ();
Testowanie MQTT z ESP8266 przy użyciu Arduino
Do naszych ostatecznych testów użyjemy aplikacji na Androida, którą skonfigurowaliśmy wcześniej.
Otwórz aplikację kliencką MQTT i upewnij się, że telefon komórkowy ma aktywne połączenie internetowe. Ponadto hotspot, do którego jest podłączone NodeMCU, powinien mieć aktywne połączenie internetowe. Gdy wszystko zostanie podłączone do internetu, wyślemy komunikat „Hello from ESP8266” z modułu ESP, który zostanie odzwierciedlony w aplikacji na Androida i otrzymamy powiadomienie. Następnie wyślemy ciąg z aplikacji na Androida, który włączy diodę LED podłączoną do płyty MCU węzła ESP8266.
Krok 1: (Zapisz się do tematu):
Kliknij opcję Zapisane MQTT w aplikacji, którą skonfigurowaliśmy wcześniej. Pojawi się ekran, na którym zostanie wyświetlony monit „Subskrybuj temat”. Wcześniej skonfigurowaliśmy temat jako „ esp / test1 ”. Dlatego w aplikacji na Androida napiszemy „ esp / test1 ”. Kliknij Subskrybuj, co spowoduje wyświetlenie ekranu jak poniżej, na którym zostanie napisane „Nie otrzymano wiadomości” z danego tematu.
Teraz kliknij przycisk „Połączono”, który jest podłączony do węzła MCU. Teraz, zgodnie z naszym kodem, w temacie zostanie opublikowana wiadomość „ Witaj z ESP8266 ”, a na ekranie pojawi się powiadomienie z otrzymaną wiadomością, jak pokazano poniżej.
Krok 2: Opublikuj w temacie:
Teraz, aby opublikować w temacie, kliknij przycisk STRZAŁKA W GÓRĘ aplikacji, co spowoduje otwarcie ekranu, jak pokazano poniżej.
Teraz w polu Temat wpisz „ esp / test ”, aw polu wiadomości wpisz „ on ” lub „ off ”, aby odpowiednio włączać i wyłączać diodę LED. Na przykład, jeśli w temacie zostanie opublikowane „on”, dioda LED zostanie włączona, a jeśli w temacie zostanie opublikowana „off”, dioda LED zostanie wyłączona.
Mam nadzieję, że spodobał Ci się artykuł i nauczyłeś się czegoś nowego. Jeśli masz jakiekolwiek pytania dotyczące tego artykułu, możesz je skomentować poniżej lub możesz skorzystać z naszego forum.