Съдържание:

Как да използвате MQTT с Raspberry Pi и ESP8266: 8 стъпки (със снимки)
Как да използвате MQTT с Raspberry Pi и ESP8266: 8 стъпки (със снимки)

Видео: Как да използвате MQTT с Raspberry Pi и ESP8266: 8 стъпки (със снимки)

Видео: Как да използвате MQTT с Raspberry Pi и ESP8266: 8 стъпки (със снимки)
Видео: Home Assistant - connect address tape WS2812B via ESP8266 with WLED firmware 2024, Юни
Anonim
Как да използвате MQTT с Raspberry Pi и ESP8266
Как да използвате MQTT с Raspberry Pi и ESP8266

В тази инструкция ще обясня какво представлява протоколът MQTT и как се използва за комуникация между устройства. След това, като практическа демонстрация, ще ви покажа как да настроите обикновена система с два клиента, където модул ESP8266 ще изпрати съобщение към програма на Python при натискане на бутон. По -конкретно, използвам модул Adafruit HUZZAH за този проект, Raspberry Pi и настолен компютър. Raspberry Pi ще действа като брокер на MQTT, а клиентът Python ще се изпълнява от отделен настолен компютър (по избор, тъй като това може да се изпълнява на Raspberry Pi).

За да следвате тази инструкция, ще трябва да имате някои основни познания по електроника и как да използвате софтуера Arduino. Трябва също да сте запознати с използването на интерфейс на командния ред (за Raspberry Pi). Надяваме се, че след като сте научили какво е MQTT и как да го използвате в основен сценарий, ще можете да създавате свои собствени IoT проекти!

Необходими части

  • 1 x Raspberry Pi, свързан към локална мрежа (с Jessie)
  • 1 x ESP8266 модул (Adafruit HUZZAH)
  • 1 x Платка
  • 3 x джъмперни проводници (мъжки към мъжки)
  • 1 x Бутон
  • 1 x 10k Ohm резистор (кафяв-черен-оранжев цветен код)

Създадох този Instructable, тъй като MQTT винаги ме е интересувал като протокол и има много различни начини да се използва. Въпреки това не можех да се замисля как да кодирам устройства, за да го използвам. Това беше така, защото не знаех/разбрах какво всъщност става, за да вземе моето "Здравей, Свят!" от устройство А и го изпращам до устройство В. Затова реших да напиша тази инструкция, за да (надявам се) да ви науча как работи, както и да засиля собственото си разбиране за нея!

Стъпка 1: Какво е MQTT?

Какво е MQTT?
Какво е MQTT?

MQTT или MQ Telemetry Transport е протокол за съобщения, който позволява на множество устройства да си говорят. В момента той е популярен протокол за Интернет на нещата, въпреки че е бил използван за други цели - например Facebook Messenger. Интересното е, че MQTT е изобретен през 1999 г. - което означава, че е толкова стар, колкото аз!

MQTT се основава на идеята, че устройствата могат да публикуват или да се абонират за теми. Така, например. Ако Устройство №1 е записало температурата от един от сензорите си, то може да публикува съобщение, съдържащо стойността на температурата, която е записало, в тема (например „Температура“). Това съобщение се изпраща до MQTT брокер, който можете да мислите като превключвател/рутер в локална мрежа. След като MQTT брокерът получи съобщението, той ще го изпрати до всички устройства (в този случай, устройство № 2), които са абонирани за същата тема.

В този проект ще публикуваме тема, използваща ESP8266, и ще създадем скрипт на Python, който ще се абонира за същата тази тема, чрез Raspberry Pi, който ще действа като MQTT брокер. Голямото нещо за MQTT е, че е лек, така че е идеален за работа на малки микроконтролери като ESP8266, но също така е широко достъпен - така че можем да го стартираме и на скрипт на Python.

Надяваме се, че в края на този проект ще разберете какво е MQTT и как да го използвате за собствените си проекти в бъдеще.

Стъпка 2: Инсталиране на MQTT брокер на Raspberry Pi

Инсталиране на MQTT брокер на Raspberry Pi
Инсталиране на MQTT брокер на Raspberry Pi
Инсталиране на MQTT брокер на Raspberry Pi
Инсталиране на MQTT брокер на Raspberry Pi
Инсталиране на MQTT брокер на Raspberry Pi
Инсталиране на MQTT брокер на Raspberry Pi

За да настроим нашата система MQTT, се нуждаем от брокер, както е обяснено в предишната стъпка. За Raspberry Pi ще използваме MQTT брокера "Mosquitto". Преди да инсталираме това, винаги е най -добре да актуализираме нашия Raspberry Pi.

sudo apt-get update

sudo apt-get надстройка

След като направите това, инсталирайте Mosquitto и след това пакетите за клиенти на mosquitto.

sudo apt -get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Когато приключите с инсталирането на тези два пакета, ще трябва да конфигурираме брокера. Конфигурационният файл на брокера на комари се намира на /etc/mosquitto/mosquitto.conf, така че отворете това с любимия си текстов редактор. Ако нямате любим текстов редактор или не знаете как да използвате някой от редакторите на командния ред, ще използвам nano, за да можете да следвате:

sudo nano /etc/mosquitto/mosquitto.conf

В долната част на този файл трябва да видите реда:

include_dir /etc/mosquitto/conf.d

Изтрийте този ред. Добавете следните редове в долната част на файла.

allow_anonymous false

password_file/etc/mosquitto/pwfile listener 1883

Като въвеждаме тези редове, казахме на mosquitto, че не искаме никой да се свързва с нашия брокер, който не предостави валидно потребителско име и парола (ще започнем да ги задаваме след секунда) и че искаме mosquitto да слушайте съобщения на номер на порт 1883.

Ако не искате брокерът да изисква потребителско име и парола, не включвайте първите два реда, които добавихме (т.е. allow_anonymous … и password_file …). Ако сте направили това, преминете към рестартиране на Raspberry Pi.

Сега затворете (и запишете) този файл. Ако следвате заедно с примера с nano, натиснете CTRL+X и въведете Y, когато бъдете подканени.

Тъй като току -що казахме на mosquitto, че потребителите, които се опитват да използват MQTT брокера, трябва да бъдат удостоверени, сега трябва да кажем на mosquitto какви са потребителското име и паролата! Така че, въведете следната команда - заменяйки потребителското име с потребителското име, което искате - след това въведете паролата, която бихте искали, когато бъдете подканени (Забележка: ако при редактиране на конфигурационния файл сте посочили различен път към файла с парола, заменете пътя по -долу с който сте използвали).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile потребителско име

Тъй като току -що сме променили конфигурационния файл mosquitto, трябва да рестартираме Raspberry Pi.

sudo рестартиране

След като Raspberry Pi приключи с рестартирането, трябва да имате напълно функциониращ MQTT брокер! След това ще се опитаме да взаимодействаме с него, като използваме редица различни устройства/методи!

Стъпка 3: Тестване на брокера

Тестване на брокера
Тестване на брокера

След като инсталирате комар на Raspberry Pi, можете да го направите бърз тест - само за да се уверите, че всичко работи правилно. За тази цел има две команди, които можем да използваме в командния ред. mosquitto_pub и mosquitto_sub. В тази стъпка ще ви насоча към използването на всеки от тях, за да тествате нашия брокер.

За да тествате брокера, ще трябва да отворите два прозореца на командния ред. Ако използвате Putty или друг SSH клиент, това е толкова просто, колкото да отворите друг SSH прозорец и да влезете както обикновено. Ако имате достъп до вашия Pi от терминал UNIX, това е абсолютно същото. Ако използвате Raspberry Pi директно, ще трябва да отворите два терминални прозореца в режим GUI (командата startxcan се използва за стартиране на GUI).

След като сте отворили два прозореца, можем да започнем с тестването. В един от двата терминала въведете следната команда, като замените потребителското име и паролата с тези, които сте настроили в предишната стъпка.

mosquitto_sub -d -u потребителско име -P парола -t тест

Ако сте решили да не задавате потребителско име и парола в предишната стъпка, отсега нататък игнорирайте флаговете -u и -P в командите. Така, например, командата mosquitto_sub сега ще бъде:

mosquitto_sub -d -t тест

Командата mosquitto_sub ще се абонира за тема и ще покаже всички съобщения, изпратени до посочената тема в прозореца на терминала. Тук -d означава режим на отстраняване на грешки, така че всички съобщения и дейности ще се извеждат на екрана. -u и -P трябва да се обясняват сами. И накрая, -t е името на темата, за която искаме да се абонираме - в този случай „тест“.

След това, в другия прозорец на терминала, ние ще се опитаме да публикуваме съобщение в темата "тест". Въведете следното, като не забравяте да промените потребителското име и паролата:

mosquitto_pub -d -u потребителско име -P парола -t тест -m "Здравей, свят!"

Когато натиснете enter, трябва да видите съобщението си „Здравей, Свят!“се появяват в първия терминален прозорец, който използвахме (за абониране). Ако случаят е такъв, вие сте готови да започнете работа по ESP8266!

Стъпка 4: Настройка на ESP8266 (Adafruit HUZZAH)

Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)
Настройка на ESP8266 (Adafruit HUZZAH)

Тази стъпка, ако е специфична за Adafruit HUZZAH (тъй като това е, което използвам за завършване на този проект). Ако използвате друго устройство Arduino / ESP8266, може да искате да пропуснете тази стъпка. Бих ви посъветвал да го прочетете, само в случай, че тук има някаква информация, която може да е от значение за вас.

За този проект ще програмирам HUZZAH със софтуера Arduino. Така че, ако още не сте го направили, не забравяйте да инсталирате софтуера Arduino (по -нов от 1.6.4). Можете да го изтеглите тук.

След като инсталирате софтуера Arduino, отворете го и отворете Файл-> Предпочитания. Тук трябва да видите (в долната част на прозореца) текстово поле с етикет: „Допълнителни URL адреси на мениджъра на дъски“. В това текстово поле копирайте и поставете следната връзка:

arduino.esp8266.com/stable/package_esp8266com_index.json

Щракнете върху OK, за да запазите промените. Сега отворете Board Manager (Tools-> Board-> Board Manager) и потърсете ESP8266. Инсталирайте esp8266 чрез ESP8266 общностния пакет. Рестартирайте софтуера Arduino.

Сега, преди да можем да програмираме дъската, трябва да изберем няколко различни опции. В опцията меню Инструменти изберете Adafruit HUZZAH ESP8266 за платка, 80 MHz за честотата на процесора (можете да използвате 160 MHz, ако искате да я овърклокнете, но засега ще използвам 80 MHz), 4M (3M SPIFFS) за размера на светкавицата и 115200 за скоростта на качване. Също така не забравяйте да изберете COM порта, който използвате (това ще зависи от вашата настройка).

Преди да можете да качите някакъв код, трябва да се уверите, че HUZZAH е в режим на зареждащо устройство. За да активирате това, задръжте натиснат бутона на дъската с маркировка GPIO0 и докато той е задържан, задръжте и бутона Reset. След това пуснете бутона за нулиране и след това GPIO0. Ако сте направили това правилно, червеният светодиод, който се появи при натискане на GPIO0, сега трябва да свети слабо.

За да качите код в микроконтролера, първо се уверете, че HUZZAH е в режим на зареждащо устройство, след което просто щракнете върху бутона за качване в Arduino IDE.

Ако имате проблеми при настройването на HUZZAH, допълнителна информация може да бъде намерена в собствения урок на Adafruit.

Стъпка 5: Програмиране на ESP8266

Програмиране на ESP8266
Програмиране на ESP8266

Сега ще започнем да програмираме ESP8266, но преди да започнем, ще трябва да инсталирате следните библиотеки в мениджъра на Arduino Library (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

След като инсталирате тези библиотеки, ще можете да стартирате кода, включен в тази инструкция (MQTT_Publish.zip). Постарах се да го коментирам, за да можете да разберете какво прави всяка секция и това, надявам се, би трябвало да ви позволи да го адаптирате към вашите нужди.

Не забравяйте да промените константите в горната част на кода, така че вашият ESP8266 да може да се свърже с вашата WiFi мрежа и вашия MQTT брокер (Raspberry Pi).

Ако сте решили да не задавате потребителско име и парола за MQTT Broker, вместо това изтеглете файла MQTT_PublishNoPassword.zip.

Стъпка 6: Инсталиране на Python Client (paho-mqtt)

Инсталиране на Python Client (paho-mqtt)
Инсталиране на Python Client (paho-mqtt)

За щастие, тази стъпка е много проста! За да инсталирате клиента на mosquitto python, просто трябва да въведете следното в командния ред (Linux/Mac) или дори в командния ред (Windows).

pip install paho-mqtt

Забележка: Командният ред на Windows може да има проблем с изпълнението на командата pip, ако не сте посочили, че искате да инсталирате pip и да добавите python към вашата променлива PATH, когато сте инсталирали Python. Има няколко начина да поправите това, но мисля, че преинсталирането на Python е най -лесният начин. Ако се съмнявате - дайте го в google!

Стъпка 7: Клиент на Python - Абониране

Клиент на Python - Абониране
Клиент на Python - Абониране

В тази стъпка ще настроим скрипта Python (или на самия Raspberry Pi, или на друг компютър, свързан към мрежата), за да обработва всички съобщения, изпратени (публикувани) от ESP8266 към темата MQTT.

Включих кода на python по -долу (PythonMQTT_Subscribe.py), който е коментиран, за да ви помогне да разберете какво се случва, но ще обясня някои от основните функции и тук.

Ако не сте задали потребителско име и парола за връзката MQTT по -рано, вместо това изтеглете файла PythonMQTT_SubscribeNoPassword.py.

Стъпка 8: Комуникация между устройства ESP8266

Комуникация между устройства ESP8266
Комуникация между устройства ESP8266

Ако например искате да настроите IoT мрежа, може да искате да комуникирате между устройства ESP8266. За щастие, това не е много по -сложно от кода, който сме писали преди, но има няколко забележими промени.

За да може един ESP да изпраща данни към друг, първият ESP ще трябва да публикува в темата, а вторият ESP ще трябва да се абонира за тази тема. Тази настройка ще позволи еднопосочен разговор - ESP (1) към ESP (2). Ако искаме ESP (2) да говори обратно с ESP (1), можем да създадем нова тема, която ESP (2) ще публикува и ESP (1) ще се абонира. За щастие, можем да имаме няколко абонати на една и съща тема, така че ако искате да изпращате данни до редица системи, ще ви трябва само една тема (за която всички те се абонират, с изключение на устройството, което изпраща данните, тъй като това ще ще бъде публикуван).

Ако имате нужда от помощ, за да разберете какво трябва да прави всяко устройство, помислете за системата като стая от хора. Ако ESP (1) публикува, можете да си представите това устройство като „говорител“, а всички устройства, които се абонират за темата, са „слушатели“в този пример.

Включих по -долу примерен код, който демонстрира как ESP8266 може да се абонира за тема и да изслушва определени съобщения - 1 и 0. Ако се получи 1, вграденият светодиод (за HUZZAH - GPIO 0) се включва. Ако се получи 0, този светодиод се изключва.

Ако искате да обработвате по -сложни данни, това трябва да стане във функцията ReceivedMessage (вижте кода).

За вашите собствени проекти, ако трябва да изпращате и получавате данни, можете да включите функцията за публикуване от предишния пример в кода, включен в тази стъпка. Това трябва да се обработи в основната функция на Arduino loop ().

Не забравяйте да промените променливите в горната част на кода, за да отговарят на вашата мрежа!

Препоръчано: