Spisu treści:

Jak korzystać z MQTT z Raspberry Pi i ESP8266: 8 kroków (ze zdjęciami)
Jak korzystać z MQTT z Raspberry Pi i ESP8266: 8 kroków (ze zdjęciami)

Wideo: Jak korzystać z MQTT z Raspberry Pi i ESP8266: 8 kroków (ze zdjęciami)

Wideo: Jak korzystać z MQTT z Raspberry Pi i ESP8266: 8 kroków (ze zdjęciami)
Wideo: Multisensor na ESP8266 #1, czyli pomiar temperatury dla Domoticza (i nie tylko) 2024, Czerwiec
Anonim
Jak korzystać z MQTT z Raspberry Pi i ESP8266?
Jak korzystać z MQTT z Raspberry Pi i ESP8266?

W tej instrukcji wyjaśnię, czym jest protokół MQTT i jak służy do komunikacji między urządzeniami. Następnie, jako praktyczną demonstrację, pokażę, jak skonfigurować prosty system dwóch klientów, w którym moduł ESP8266 wyśle wiadomość do programu Pythona po naciśnięciu przycisku. W szczególności do tego projektu używam modułu Adafruit HUZZAH, Raspberry Pi i komputera stacjonarnego. Raspberry Pi będzie działać jako broker MQTT, a klient Pythona będzie uruchamiany z oddzielnego komputera stacjonarnego (opcjonalnie, ponieważ można go uruchomić na Raspberry Pi).

Aby śledzić tę instrukcję, musisz mieć podstawową wiedzę na temat elektroniki i korzystania z oprogramowania Arduino. Powinieneś także znać się na interfejsie wiersza poleceń (dla Raspberry Pi). Mamy nadzieję, że po zdobyciu wiedzy o tym, czym jest MQTT i jak go używać w podstawowym scenariuszu, będziesz mógł tworzyć własne projekty IoT!

Wymagane części

  • 1 x Raspberry Pi, podłączony do sieci lokalnej (z systemem Jessie)
  • 1 x moduł ESP8266 (Adafruit HUZZAH)
  • 1 x deska do krojenia chleba
  • 3 x przewody połączeniowe (męski-męski)
  • 1 x przycisk
  • Rezystor 1 x 10 k Ohm (kod koloru brązowo-czarno-pomarańczowy)

Stworzyłem ten Instructable, ponieważ MQTT zawsze interesował mnie jako protokół i istnieje wiele różnych sposobów jego wykorzystania. Jednak nie mogłem zrozumieć, jak kodować urządzenia, aby z niego korzystać. To dlatego, że nie wiedziałem/nie rozumiałem, co się właściwie dzieje z moim „Hello, World!” z urządzenia A i wysłać go do urządzenia B. Dlatego postanowiłem napisać ten Instruktaż, aby (miejmy nadzieję) nauczyć Cię, jak to działa, a także wzmocnić moje własne zrozumienie tego!

Krok 1: Co to jest MQTT?

Co to jest MQTT?
Co to jest MQTT?

MQTT lub MQ Telemetry Transport to protokół przesyłania wiadomości, który pozwala wielu urządzeniom komunikować się ze sobą. Obecnie jest to popularny protokół dla Internetu Rzeczy, chociaż był używany do innych celów – np. Facebook Messenger. Co ciekawe, MQTT został wynaleziony w 1999 roku - co oznacza, że jest tak stary jak ja!

MQTT opiera się na założeniu, że urządzenia mogą publikować lub subskrybować tematy. Na przykład. Jeśli Urządzenie #1 zarejestrowało temperaturę z jednego ze swoich czujników, może opublikować wiadomość zawierającą zarejestrowaną wartość temperatury w określonym temacie (np. „Temperatura”). Ta wiadomość jest wysyłana do brokera MQTT, który można traktować jako przełącznik/router w sieci lokalnej. Gdy broker MQTT otrzyma wiadomość, wyśle ją do dowolnych urządzeń (w tym przypadku urządzenia nr 2), które subskrybują ten sam temat.

W tym projekcie będziemy publikować w temacie za pomocą ESP8266 i tworzyć skrypt Pythona, który będzie subskrybował ten sam temat, za pośrednictwem Raspberry Pi, który będzie działał jako broker MQTT. Wspaniałą rzeczą w MQTT jest to, że jest lekki, więc idealnie nadaje się do pracy na małych mikrokontrolerach, takich jak ESP8266, ale jest również szeroko dostępny - więc możemy go uruchomić również w skrypcie Pythona.

Miejmy nadzieję, że pod koniec tego projektu zrozumiesz, czym jest MQTT i jak wykorzystać go do własnych projektów w przyszłości.

Krok 2: Instalacja brokera MQTT na Raspberry Pi

Instalowanie brokera MQTT na Raspberry Pi
Instalowanie brokera MQTT na Raspberry Pi
Instalowanie brokera MQTT na Raspberry Pi
Instalowanie brokera MQTT na Raspberry Pi
Instalowanie brokera MQTT na Raspberry Pi
Instalowanie brokera MQTT na Raspberry Pi

Aby skonfigurować nasz system MQTT, potrzebujemy brokera, jak wyjaśniono w poprzednim kroku. W przypadku Raspberry Pi będziemy używać brokera MQTT „Mosquitto”. Zanim to zainstalujemy, zawsze najlepiej zaktualizować nasze Raspberry Pi.

aktualizacja sudo apt-get

sudo apt-get upgrade

Gdy to zrobisz, zainstaluj mosquitto, a następnie pakiety mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Po zakończeniu instalacji tych dwóch pakietów będziemy musieli skonfigurować brokera. Plik konfiguracyjny brokera mosquitto znajduje się w /etc/mosquitto/mosquitto.conf, więc otwórz go w swoim ulubionym edytorze tekstu. Jeśli nie masz ulubionego edytora tekstu lub nie wiesz, jak korzystać z żadnego z edytorów wiersza poleceń, będę używał nano, abyś mógł śledzić:

sudo nano /etc/mosquitto/mosquitto.conf

Na dole tego pliku powinieneś zobaczyć linię:

katalog_włącz /etc/mosquitto/conf.d

Usuń tę linię. Dodaj następujące wiersze na dole pliku.

allow_anonymous false

password_file /etc/mosquitto/pwfile listener 1883

Wpisując te wiersze, powiedzieliśmy mosquitto, że nie chcemy, aby ktokolwiek łączył się z naszym brokerem, który nie podał prawidłowej nazwy użytkownika i hasła (przejdziemy do ustawienia tych za sekundę) i że chcemy, aby mosquitto nasłuchuj wiadomości na porcie numer 1883.

Jeśli nie chcesz, aby broker wymagał nazwy użytkownika i hasła, nie dołączaj pierwszych dwóch dodanych przez nas wierszy (tj. allow_anonymous… i password_file…). Jeśli to zrobiłeś, przejdź do ponownego uruchomienia Raspberry Pi.

Teraz zamknij (i zapisz) ten plik. Jeśli podążasz za przykładem nano, naciśnij CTRL + X i wpisz Y, gdy zostaniesz o to poproszony.

Ponieważ właśnie powiedzieliśmy mosquitto, że użytkownicy próbujący korzystać z brokera MQTT muszą zostać uwierzytelnieni, musimy teraz powiedzieć mosquitto, jaka jest nazwa użytkownika i hasło! Wpisz więc następujące polecenie - zastępując nazwę użytkownika nazwą użytkownika, którą chcesz - a następnie wprowadź hasło, które chcesz, gdy zostaniesz o to poproszony (Uwaga: jeśli podczas edycji pliku konfiguracyjnego podałeś inną ścieżkę dostępu do pliku hasła, zastąp poniższą ścieżkę ten, którego użyłeś).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile nazwa użytkownika

Ponieważ właśnie zmieniliśmy plik konfiguracyjny mosquitto, powinniśmy zrestartować Raspberry Pi.

ponowne uruchomienie sudo

Po ponownym uruchomieniu Raspberry Pi powinieneś mieć w pełni działającego brokera MQTT! Następnie spróbujemy z nim wejść w interakcję, używając wielu różnych urządzeń/metod!

Krok 3: Testowanie brokera

Testowanie brokera
Testowanie brokera

Po zainstalowaniu mosquitto na Raspberry Pi, możesz przeprowadzić szybki test - tylko po to, aby upewnić się, że wszystko działa poprawnie. W tym celu są dwa polecenia, których możemy użyć w wierszu poleceń. mosquitto_pub i mosquitto_sub. W tym kroku poprowadzę Cię przez użycie każdego z nich do przetestowania naszego brokera.

Aby przetestować brokera, musisz otworzyć dwa okna wiersza poleceń. Jeśli używasz Putty lub innego klienta SSH, jest to tak proste, jak otwarcie innego okna SSH i zalogowanie się jak zwykle. Jeśli uzyskujesz dostęp do swojego Pi z terminala UNIX, jest to dokładnie to samo. Jeśli używasz Raspberry Pi bezpośrednio, będziesz musiał otworzyć dwa okna terminala w trybie GUI (polecenie startxmoże być użyte do uruchomienia GUI).

Teraz, gdy otworzyłeś dwa okna, możemy rozpocząć testowanie. W jednym z dwóch terminali wpisz następujące polecenie, zastępując nazwę użytkownika i hasło tymi, które ustawiłeś w poprzednim kroku.

mosquitto_sub -d -u nazwa użytkownika -P hasło -t test

Jeśli w poprzednim kroku zdecydowałeś się nie ustawiać nazwy użytkownika i hasła, od teraz ignoruj flagi -u i -P w poleceniach. Na przykład polecenie mosquitto_sub wyglądałoby teraz tak:

mosquitto_sub -d -t test

Komenda mosquitto_sub zasubskrybuje temat i wyświetli w oknie terminala wszelkie wiadomości wysłane do określonego tematu. Tutaj -d oznacza tryb debugowania, więc wszystkie komunikaty i działania będą wyświetlane na ekranie. -u i -P powinny być oczywiste. Wreszcie -t to nazwa tematu, który chcemy subskrybować - w tym przypadku "test".

Następnie w drugim oknie terminala spróbujemy opublikować wiadomość w temacie „test”. Wpisz następujące polecenie, pamiętając ponownie o zmianie nazwy użytkownika i hasła:

mosquitto_pub -d -u nazwa użytkownika -P hasło -t test -m "Witaj świecie!"

Kiedy naciśniesz Enter, powinieneś zobaczyć swoją wiadomość "Hello, World!" pojawiają się w pierwszym oknie terminala, którego użyliśmy (do subskrypcji). W takim przypadku wszystko jest gotowe do rozpoczęcia pracy z ESP8266!

Krok 4: Konfiguracja ESP8266 (Adafruit HUZZAH)

Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)
Konfiguracja ESP8266 (Adafruit HUZZAH)

Ten krok jest specyficzny dla HUZZAH Adafruit (ponieważ tego używam do ukończenia tego projektu). Jeśli używasz innego urządzenia Arduino / ESP8266, możesz pominąć ten krok. Radziłbym jednak przejrzeć go, na wypadek gdyby znalazły się tutaj jakieś informacje, które mogą być dla Ciebie istotne.

W tym projekcie będę programował HUZZAH za pomocą oprogramowania Arduino. Tak więc, jeśli jeszcze tego nie zrobiłeś, upewnij się, że zainstalowałeś oprogramowanie Arduino (nowsze niż 1.6.4). Możesz go pobrać tutaj.

Po zainstalowaniu oprogramowania Arduino otwórz je i przejdź do Plik->Preferencje. Tutaj powinieneś zobaczyć (w dolnej części okna) pole tekstowe z etykietą: "Additional Boards Manager URLs". W tym polu tekstowym skopiuj i wklej następujący link:

arduino.esp8266.com/stable/package_esp8266com_index.json

Kliknij OK, aby zapisać zmiany. Teraz otwórz Board Manager (Tools->Board->Board Manager) i wyszukaj ESP8266. Zainstaluj pakiet społeczności esp8266 by ESP8266. Zrestartuj oprogramowanie Arduino.

Teraz, zanim będziemy mogli zaprogramować płytkę, musimy wybrać kilka różnych opcji. W menu Narzędzia wybierz Adafruit HUZZAH ESP8266 dla płyty, 80 MHz dla częstotliwości procesora (możesz użyć 160 MHz, jeśli chcesz go przetaktować, ale na razie zamierzam użyć 80 MHz), 4M (3M SPIFFS) dla rozmiaru Flash i 115200 dla szybkości wysyłania. Upewnij się również, że wybrałeś port COM, którego używasz (zależy to od konfiguracji).

Zanim będziesz mógł przesłać jakikolwiek kod, musisz się upewnić, że HUZZAH jest w trybie bootloadera. Aby to włączyć, przytrzymaj przycisk na płycie oznaczony GPIO0, a gdy jest przytrzymany, przytrzymaj również przycisk Reset. Następnie zwolnij przycisk Reset, a następnie GPIO0. Jeśli zrobiłeś to poprawnie, czerwona dioda, która zapaliła się po naciśnięciu GPIO0, powinna teraz świecić słabo.

Aby wgrać kod do mikrokontrolera, najpierw upewnij się, że HUZZAH jest w trybie bootloadera, a następnie po prostu kliknij przycisk upload w Arduino IDE.

Jeśli masz jakiekolwiek problemy z konfiguracją HUZZAH, dalsze informacje można znaleźć w samouczku Adafruit.

Krok 5: Programowanie ESP8266

Programowanie ESP8266
Programowanie ESP8266

Teraz zaczniemy programować ESP8266, ale zanim zaczniemy, będziesz musiał zainstalować następujące biblioteki w menedżerze Arduino Library (Sketch->Include Libraries->Manage Libraries)

  • Odbijanie2
  • PubSubClient

Po zainstalowaniu tych bibliotek będziesz mógł uruchomić kod, który zawarłem w tym Instructable (MQTT_Publish.zip). Upewniłem się, że skomentowałem to, abyś mógł zrozumieć, co robi każda sekcja, i mam nadzieję, że powinno to umożliwić ci dostosowanie jej do swoich potrzeb.

Pamiętaj, aby zmienić stałe na górze kodu, aby ESP8266 mógł połączyć się z siecią Wi-Fi i brokerem MQTT (Raspberry Pi).

Jeśli zdecydujesz się nie ustawiać nazwy użytkownika i hasła dla brokera MQTT, zamiast tego pobierz plik MQTT_PublishNoPassword.zip.

Krok 6: Instalacja klienta Python (paho-mqtt)

Instalowanie klienta Pythona (paho-mqtt)
Instalowanie klienta Pythona (paho-mqtt)

Na szczęście ten krok jest bardzo prosty! Aby zainstalować klienta Mosquitto Python, wystarczy wpisać następujące polecenie w wierszu poleceń (Linux/Mac) lub nawet w wierszu poleceń (Windows).

pip zainstaluj paho-mqtt

Uwaga: Wiersz poleceń systemu Windows może mieć problem z uruchomieniem polecenia pip, jeśli nie określiłeś, że chcesz zainstalować pip i dodać python do zmiennej PATH podczas instalowania Pythona. Jest wiele sposobów na naprawienie tego, ale myślę, że po prostu ponowna instalacja Pythona jest najłatwiejszym sposobem. Jeśli masz wątpliwości - daj mu google!

Krok 7: Klient Pythona - subskrypcja

Klient Pythona - subskrybowanie
Klient Pythona - subskrybowanie

W tym kroku ustawimy skrypt Pythona (na samym Raspberry Pi lub na innym komputerze podłączonym do sieci) do obsługi wszystkich wiadomości, które są wysyłane (publikowane) przez ESP8266 do tematu MQTT.

Poniżej zamieściłem kod Pythona (PythonMQTT_Subscribe.py), który został skomentowany, aby pomóc Ci zrozumieć, co się dzieje, ale wyjaśnię tutaj również niektóre z głównych funkcji.

Jeśli wcześniej nie ustawiłeś nazwy użytkownika i hasła dla połączenia MQTT, pobierz plik PythonMQTT_SubscribeNoPassword.py.

Krok 8: Komunikacja między urządzeniami ESP8266

Komunikacja między urządzeniami ESP8266
Komunikacja między urządzeniami ESP8266

Jeśli chcesz na przykład skonfigurować sieć IoT, możesz chcieć komunikować się między urządzeniami ESP8266. Na szczęście nie jest to dużo bardziej skomplikowane niż kod, który napisaliśmy wcześniej, jednak jest kilka godnych uwagi zmian.

Aby jeden ESP mógł wysyłać dane do drugiego, pierwszy ESP będzie musiał publikować w temacie, a drugi ESP będzie musiał subskrybować ten temat. Taka konfiguracja pozwoli na konwersację w jedną stronę - ESP(1) do ESP(2). Jeśli chcemy, aby ESP(2) rozmawiało z ESP(1), możemy stworzyć nowy temat, do którego ESP(2) opublikuje, a ESP(1) się zasubskrybuje. Na szczęście możemy mieć wielu subskrybentów na ten sam temat, więc jeśli chcesz wysłać dane do kilku systemów, potrzebujesz tylko jednego tematu (który subskrybują wszyscy, z wyjątkiem urządzenia, które wysyła dane, ponieważ to publikować).

Jeśli potrzebujesz pomocy w ustaleniu, co każde urządzenie musi zrobić, pomyśl o systemie jako o pokoju pełnym ludzi. Jeśli ESP(1) publikuje, możesz sobie wyobrazić to urządzenie jako "głośnik", a wszystkie urządzenia, które subskrybują temat, są w tym przykładzie "słuchaczami".

Poniżej zamieściłem przykładowy kod, który pokazuje, jak ESP8266 może subskrybować temat i nasłuchiwać pewnych komunikatów - 1 i 0. Jeśli zostanie odebrany 1, włącza się dioda LED na pokładzie (dla HUZZAH - GPIO 0). Jeśli zostanie odebrane 0, ta dioda LED jest wyłączona.

Jeśli chcesz przetwarzać bardziej złożone dane, należy to zrobić w funkcji ReceivedMessage (patrz kod).

W przypadku własnych projektów, jeśli chcesz zarówno wysyłać, jak i odbierać dane, możesz włączyć funkcję publikowania z poprzedniego przykładu do kodu zawartego w tym kroku. Powinno to być obsługiwane w głównej funkcji Arduino loop().

Pamiętaj, aby zmienić zmienne w górnej części kodu, aby pasowały do Twojej sieci!

Zalecana: