Оглавление:

Как использовать MQTT с Raspberry Pi и ESP8266: 8 шагов (с изображениями)
Как использовать MQTT с Raspberry Pi и ESP8266: 8 шагов (с изображениями)

Видео: Как использовать MQTT с Raspberry Pi и ESP8266: 8 шагов (с изображениями)

Видео: Как использовать MQTT с Raspberry Pi и ESP8266: 8 шагов (с изображениями)
Видео: Погодная станция на ESP8266, MQTT и Epaper дисплее 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 модуль ESP8266 (Adafruit HUZZAH)
  • 1 х макет
  • 3 х перемычки (мужчина-мужчина)
  • 1 х кнопка
  • 1 резистор 10 кОм (цветовой код коричневый-черный-оранжевый)

Я создал этот Instructable, так как MQTT всегда интересовал меня как протокол, и есть много разных способов его использования. Однако я никак не мог понять, как кодировать устройства для его использования. Это произошло потому, что я не знал / не понимал, что на самом деле происходило, чтобы забрать мое "Hello, World!" с устройства A и отправить его на устройство B. Поэтому я решил написать это руководство, чтобы (надеюсь) научить вас, как это работает, а также укрепить мое собственное понимание этого!

Шаг 1. Что такое MQTT?

Что такое MQTT?
Что такое MQTT?

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

MQTT основан на идее, что устройства могут публиковать темы или подписываться на них. Так, например. Если Устройство №1 записало температуру от одного из своих датчиков, оно может опубликовать сообщение, содержащее записанное значение температуры, в тему (например, «Температура»). Это сообщение отправляется брокеру MQTT, который можно рассматривать как коммутатор / маршрутизатор в локальной сети. Как только MQTT Broker получит сообщение, он отправит его на любые устройства (в данном случае, Устройство №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 upgrade

Как только вы это сделаете, установите mosquitto, а затем пакеты mosquitto-clients.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Когда вы закончите установку этих двух пакетов, нам нужно будет настроить брокера. Файл конфигурации брокера mosquitto находится по адресу /etc/mosquitto/mosquitto.conf, поэтому откройте его в своем любимом текстовом редакторе. Если у вас нет любимого текстового редактора или вы не знаете, как использовать какой-либо из редакторов командной строки, я буду использовать nano, чтобы вы могли следовать за ним:

sudo nano /etc/mosquitto/mosquitto.conf

Внизу этого файла вы должны увидеть строку:

include_dir /etc/mosquitto/conf.d

Удалите эту строку. Добавьте следующие строки в конец файла.

allow_anonymous false

файл_паролей / 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: Тестирование брокера

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

После того, как вы установили Mosquitto на Raspberry Pi, вы можете быстро проверить его - просто чтобы убедиться, что все работает правильно. Для этого есть две команды, которые мы можем использовать в командной строке. mosquitto_pub и mosquitto_sub. На этом этапе я расскажу вам, как использовать каждый из них для тестирования нашего брокера.

Чтобы протестировать брокера, вам нужно открыть два окна командной строки. Если вы используете Putty или другой клиент SSH, это так же просто, как открыть другое окно SSH и войти в систему, как обычно. Если вы обращаетесь к своему Pi с терминала UNIX, это точно так же. Если вы используете Raspberry Pi напрямую, вам нужно будет открыть два окна терминала в режиме графического интерфейса (для запуска графического интерфейса можно использовать команду startx).

Теперь, когда вы открыли два окна, мы можем приступить к тестированию. В одном из двух терминалов введите следующую команду, заменив имя пользователя и пароль теми, которые вы установили на предыдущем шаге.

mosquitto_sub -d -u имя пользователя -P пароль -t тест

Если вы решили не устанавливать имя пользователя и пароль на предыдущем шаге, то с этого момента игнорируйте флаги -u и -P в командах. Итак, в качестве примера команда mosquitto_sub теперь будет выглядеть так:

mosquitto_sub -d -t тест

Команда mosquitto_sub подписывается на тему и отображает все сообщения, отправленные в указанную тему, в окне терминала. Здесь -d означает режим отладки, поэтому все сообщения и действия будут выводиться на экран. -u и -P не требуют пояснений. Наконец, -t - это название темы, на которую мы хотим подписаться, в данном случае «test».

Затем в другом окне терминала мы попытаемся опубликовать сообщение в «тестовой» теме. Введите следующее, не забыв еще раз изменить имя пользователя и пароль:

mosquitto_pub -d -u имя пользователя -P пароль -t test -m "Hello, World!"

Когда вы нажмете клавишу "Ввод", вы должны увидеть сообщение "Hello, World!" появятся в первом окне терминала, которое мы использовали (для подписки). Если это так, то вы готовы приступить к работе над 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, откройте его и перейдите в File-> Preferences. Здесь вы должны увидеть (в нижней части окна) текстовое поле с надписью: «Дополнительные URL-адреса менеджера плат». В этом текстовом поле скопируйте и вставьте следующую ссылку:

arduino.esp8266.com/stable/package_esp8266com_index.json

Щелкните ОК, чтобы сохранить изменения. Теперь откройте Board Manager (Tools-> Board-> Board Manager) и найдите ESP8266. Установите пакет esp8266 от сообщества ESP8266. Перезапустите программное обеспечение Arduino.

Теперь, прежде чем мы сможем запрограммировать доску, нам нужно выбрать несколько различных вариантов. В пункте меню Инструменты выберите Adafruit HUZZAH ESP8266 для платы, 80 МГц для частоты процессора (вы можете использовать 160 МГц, если хотите его разогнать, но сейчас я собираюсь использовать 80 МГц), 4M (3M SPIFFS) для размера флэш-памяти и 115200 для скорости загрузки. Кроме того, не забудьте выбрать тот COM-порт, который вы используете (это будет зависеть от ваших настроек).

Прежде чем вы сможете загрузить какой-либо код, вам необходимо убедиться, что HUZZAH находится в режиме загрузчика. Чтобы включить это, удерживайте кнопку на плате с пометкой GPIO0, и, пока она удерживается, также удерживайте кнопку сброса. Затем отпустите кнопку Reset, а затем GPIO0. Если вы сделали это правильно, красный светодиод, который загорелся при нажатии GPIO0, теперь должен светиться тускло.

Чтобы загрузить код в микроконтроллер, сначала убедитесь, что HUZZAH находится в режиме загрузчика, а затем просто нажмите кнопку загрузки в Arduino IDE.

Если у вас возникли проблемы с настройкой HUZZAH, дополнительную информацию можно найти в собственном руководстве Adafruit.

Шаг 5: Программирование ESP8266

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

Теперь мы начнем программировать ESP8266, но прежде чем мы сможем начать, вам нужно будет установить следующие библиотеки в диспетчере библиотек Arduino (Sketch-> Include Libraries-> Manage Libraries)

  • Bounce2
  • PubSubClient

После установки этих библиотек вы сможете запустить код, который я включил в это руководство (MQTT_Publish.zip). Я обязательно прокомментировал его, чтобы вы могли понять, что делает каждый раздел, и, надеюсь, это позволит вам адаптировать его к вашим потребностям.

Не забудьте изменить константы в верхней части кода, чтобы ваш ESP8266 мог подключаться к вашей сети Wi-Fi и вашему брокеру MQTT (Raspberry Pi).

Если вы решили не устанавливать имя пользователя и пароль для MQTT Broker, загрузите вместо этого файл MQTT_PublishNoPassword.zip.

Шаг 6. Установка клиента Python (paho-mqtt)

Установка клиента Python (paho-mqtt)
Установка клиента Python (paho-mqtt)

К счастью, этот шаг очень прост! Чтобы установить клиент mosquitto python, вам просто нужно ввести следующее в командную строку (Linux / Mac) или даже в командную строку (Windows).

pip install paho-mqtt

Примечание. В командной строке Windows может возникнуть проблема с запуском команды pip, если вы не указали, что хотите установить pip, и добавить python в переменную PATH при установке Python. Есть несколько способов исправить это, но я думаю, что проще всего переустановить Python. Если сомневаетесь - погуглите!

Шаг 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 ().

Не забудьте изменить переменные в верхней части кода, чтобы они соответствовали вашей сети!

Рекомендуемые: