Mqtt broker on arduino

ESP8266 в качестве MQTT брокера для мобильного приложения

Как говорится, лень — двигатель прогресса. Для облегчения жизни сейчас делаю себе небольшое устройство в виде модуля ESP8266 и преобразователя RS485 для связи с датчиками-газоанализаторами по протоколу Modbus. В производстве постоянно возникает необходимость подключаться к приборам для выполнения различного рода диагностики по 485 интерфейсу, но каждый раз тащить с собой ноутбук неудобно, а вот мобильный телефон всегда в кармане.

В процессе разработки получилась библиотека, которая позволяет подключаться напрямую с телефона к модулю и обмениваться данными через приложение MQTT клиента. Возможно кому-то такое решение тоже пригодится, ведь отпадает необходимость иметь сторонний MQTT брокер (будь то локальный брокер на Raspberry или брокер в интернете) и подключение к интернету, что в моем случае самое главное.

Приложение для телефона

В качестве приложения я выбрал IoTmanager. Основная фича — это очень гибкая настройка виджетов с помощью HTML5+CSS, все настройки производятся в устройствах, а не в приложении. Топики отправляются в JSON формате и содержат в себе имена заголовков, значения и стили отображения. Возможно кому-то это будет неудобно, но мне такой подход понравился.

Приложение может работать на двух MQTT библиотеках: Paho.js и MQTT.js. С ходу у меня получилось установить WebSocket соединение через библиотеку Paho, на ней я и остался работать. Если выбрать в настройках MQTT, соединения не происходит, подозреваю, что нужно поковырять библиотеку WebSocketServer.

Я долго презирал Arduino, но все же сдался

Не хочу разводить дискуссию по поводу выбора среды, просто скажу, что для меня важную роль в выборе Arduino IDE для написания прошивки ESP8266 сыграло наличие тонны готовых библиотек и документации. Все просто и быстро, благо проект обещает быть не сложным.

Open Source наше все

Репозиторий на GitHub. Библиотека пока сыровата, в некоторых случаях настройки виджетов вызывают реконнект IoTmanager’a, причину которого я найти пока не могу, возможно совместная разработка пойдет быстрее.

Проект содержит в себе две реализации библиотеки:

MQTTbroker.h это попытка реализовать реальный брокер с контролем подписок. Т.е когда приходит сообщение в топик, брокер проходит по всем клиентам и их подпискам и ищет совпадения (в том числе по маскам /+/) и рассылает сообщения только тем, у кого подписки соответствуют имени топика, не забывая про самого себя.

MQTTbroker_lite.h работает немного быстрее за счет того, что в ней отсутствует автоматическая логика обработки подписок. Все приходящие сообщения перенаправляются в callback функцию основной программе, а там уже, если надо, обрабатываем их сами. Для конкретно моего случая нужна именно такая реализация: одно устройство — один подключаемый клиент, я знаю на что он подписан и чего от меня ждет.

Берем любой модуль с ESP8266 (у меня это NodeMcu) и загружаем в него скетч примера из библиотеки. Порт для отладки в инструментах Arduino IDE предлагаю отключить, иначе библиотека будет слать кучу отладочных сообщений, потом на них посмотрите. Открываем последовательный порт и наблюдаем IP адрес.

На телефоне подключаемся к созданной Wi-Fi точке доступа. В приложении IoTmanager заходим в настройки подключения: выбираем движок PAHO, вбиваем IP адрес модуля, 80 порт, префикс топиков /IoTmanager и чуть ниже отключаем SSL/TLS.

Жмем на спидометр в углу, после небольшой задержки должно подключиться и отобразить переключатели. Если не подключается, попробуйте убить и заново запустить приложение. На первом переключателе у меня настроен светодиод (см.видео).

Иногда возникает задержка при подключении. Как я думаю, это связано с тем, что IoTmanager выдает все начальные сообщения за один раз, ESP немного подвисает, обрабатывая их, а дальше уже работает без тормозов.

Обе части библиотеки очень похожи, приведу описание версии _lite:

Спасибо за внимание. Присоединяйтесь к разработке, библиотека еще сыровата.
За помощью можно обращаться в Telegram oWart

Источник

martin-ger/uMQTTBroker

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

MQTT Broker library for ESP8266 Arduino

You can start an MQTT broker in any ESP Arduino project. Just clone (or download the zip-file and extract it) into the libraries directory of your Arduino ESP8266 installation.

Important: Use the setting «lwip Variant: 1.4 High Bandwidth» in the «Tools» menu

lwip 2.0 has some strange behaviour that causes the socket to block after 5 connections.

Thanks to Tuan PM for sharing his MQTT client library https://github.com/tuanpmt/esp_mqtt as a basis with us. The modified code still contains the complete client functionality from the original esp_mqtt lib, but it has been extended by the basic broker service.

The broker does support:

  • MQTT protocoll versions v3.1 and v3.1.1 simultaniously
  • a smaller number of clients (at least 8 have been tested, memory is the issue)
  • retained messages
  • LWT
  • QoS level 0
  • username/password authentication

The broker does not yet support:

  • QoS levels other than 0
  • many TCP(=MQTT) clients
  • non-clear sessions
  • TLS

If you are searching for a complete ready-to-run MQTT broker for the ESP8266 with additional features (persistent configuration, scripting support and much more) have a look at https://github.com/martin-ger/esp_mqtt .

API MQTT Broker (C++-style)

The MQTT broker has a new C++ style API with a broker class:

API MQTT Broker (C-style)

The MQTT broker is started by simply including:

and then calling

in the «setup()» function. Now it is ready for MQTT connections on all activated interfaces (STA and/or AP). The MQTT server will run in the background and you can connect with any MQTT client. Your Arduino project might do other application logic in its loop.

Your code can locally interact with the broker using these functions:

With these functions you can publish and subscribe topics as a local client like you would with any remote MQTT broker. The provided dataCb is called on each reception of a matching topic, no matter whether it was published from a remote client or the «MQTT_local_publish()» function.

Username/password authentication is provided with the following interface:

If an MqttAuthCallback function is registered with MQTT_server_onAuth(), it is called on each connect request. Based on username, password, and optionally the connection info (the client Id and the IP address) the function has to return true for authenticated or false for rejected. If a request provides no username and/or password these parameter strings are empty. If no MqttAuthCallback function is set, each request will be admitted.

The MqttConnectCallback function does a similar check for the connection, but it is called right after the connect request before the MQTT connect request is processed. This is done in order to reject requests from unautorized clients in an early stage. The number of currently connected clients (incl. the current one) is given in the client_count paramater. With this info you can reject too many concurrent connections.

The MqttDisconnectCallback is called each time a client disconnects from the server.

If you want to force a cleanup when the broker as a WiFi client (WIFI_STA mode) has lost connectivity to the AP, call:

This will remove all broken connections, publishing LWT if defined.

Sample: in the Arduino setup() initialize the WiFi connection (client or SoftAP, whatever you need) and somewhere at the end add these line:

API MQTT Client

To use the MQTT client functionality include:

Источник

Умный дом на ESP32 через протокол MQTT

На данный момент существует много протоколов для Интернета вещей: CoAP, MQTT, AMQP… В этом руководстве познакомимся с протоколом MQTT – это один из хорошо известных протоколов Интернета вещей. Он предназначен для управления данными и их передачи между устройствами в сети Интернета вещей.

MQTT расшифровывается как Message Queuing Telemetry Transport (Передача телеметрии очередью сообщений).

Протокол имеет следующие основные особенности:

  • используется механизм издатель/подписчик/топик;
  • асинхронный протокол;
  • компактные пакеты;
  • работает поверх стека TCP/IP;
  • требуется меньшая пропускная способность сети и может работать в условиях нестабильного канала передачи данных.

В основе работы протокола MQTT лежит традиционная модель клиент-сервер. Согласно этой модели, есть один сервер (также называемый брокером) и много клиентов. Клиенты всегда поддерживают связь с сервером. Задачами сервера (брокера) являются фильтрация и передача сообщений для клиентов-подписчиков.

Связь между клиентами основана на механизме издатель / подписчик / топик, в котором:

  • сообщениям присваивают топик;
  • издатель отправляет сообщения в сеть;
  • подписчик ожидает сообщения, содержащие нужный ему топик;
  • брокер координирует связь между издателями и подписчиками.

Топик представляет собой строку символов в кодировке UTF‑8 и состоит из одного или нескольких уровней, которые разделены между собой символом «/». Например: «этаж1 / комната1 / температура»: этот топик состоит из трёх уровней, лёгко понимаемых человеком (это этаж 1, комната 1 и температурный датчик).

Кроме этого существуют ещё некоторые термины, о которых необходимо знать:

QoS (Quality of Service – качество обслуживания): неформально, этот показатель обозначает вероятность прохождения пакета между двумя точками сети. Существуют следующие модели QoS:

  • QoS 0 — на этом уровне издатель отправляет пакет брокеру без подтверждения доставки (этот уровень самый быстрый, но ненадёжный);
  • QoS 1 — на этом уровне пакеты гарантированно доставляется брокеру, но существует вероятность дублирования сообщения от издателя. После получения дублированного сообщеня брокер заново делает рассылку подписчикам, издателю снова отправляет сообщение о получении. В случае если издатель не получает PUBACK сообщения от брокера, то осущуствляется повторная отправка пакета, а DUP присваивается значение “1”. Этот уровень используется по умолчанию.
  • QoS 2 — гарантируется доставка сообщений подписчику и исключается вероятность дублирования отправленных пакетов. Здесь издатель отправляет пакет брокеру. Указывается уникальный PacketID, QoS=2 и DUP присваевается значение “0”. До тех пор, пока от брокера не получен ответ PUBREC издатель хранит сообщение неподтверждённым. Брокер должен ответить сообщением PUBREC, которое содержит тот же PacketID. ПРосле того, как пакет получен, издатель отправляет с тем же PacketID PUBREL. Пока брокер не получил PUBREL он хранит пакет у себя. После получения PUBREL копия сообщения удаляется, а издателю отправляется PUBCOMP об успешном завершении транзакции. Это самый надёжный уровень, но самый медленный.

Сохраняемые сообщения: брокер сохраняет такие сообщения после отправки, поэтому если появиться новый подписчик, интересующийся топиком этого сообщения, то оно будет отправлено ему.

Большинство библиотек, реализующих протокол MQTT, определяют несколько стандартных методов, таких как:

  • Connect(): подключиться к серверу.
  • Disconnect(): отключиться от сервера.
  • Subscribe(): подписаться на топик сообщений, идущих от сервера.
  • UnSubscribe(): отписаться от топика сообщений, идущих от сервера.
  • Publish(): публикация клиентом топика в сеть.

Для демонстрационного примера мы создали простую сеть для Умного дома с тремя узлами-клиентами (смартфон, микропроцессорное управляющее устройство с интерфейсом Wi‑Fi и датчиком температуры, микропроцессорное управляющее устройство с интерфейсом Wi‑Fi и светодиодом (лампой)) и одним узлом-сервером, служащим в качестве брокера (ПК или плата Raspberry Pi).

В нашем случае мы хотим использовать смартфон для отслеживания температуры и управления (включение и выключение) светодиодом или лампой. Поэтому мы создали систему с реализацией протокола MQTT, описанную ниже.

Источник

ESP8266 as a MQTT Broker | How To Make ESP8266 as a MQTT Broker

In this tutorial i am telling to you ” How To use ESP8266 as a MQTT Broker”. uMQTTBroker is a MQTT Broker library for ESP8266 Arduino, available on GitHub.

Now we Arduino IDE, If you don’t familier with ESP8266 using Arduino IDE. Please Visit given below post.

How To Make ESP8266 as a MQTT Broker

First Download uMQTT Broker library from Github. Download Now. Create new sketch and paste given below code.

Now connect your ESP8266 development board with your PC. Select Board and Port. Flash this code.

Open Your Serial Monitor, Here you can found a IP address. this IP address is your MQTT Broker address.

If Serial Monitor is not displaying IP address then press RST button of ESP8266 Board.

What is uMQTTBroker ?

This is a MQTT Broker library for ESP8266 Arduino. You can start an MQTT broker in any ESP Arduino project. Just clone (or download the zip-file and extract it) into the libraries directory of your Arduino ESP8266 installation.

The broker does support:

  • MQTT protocoll versions v3.1 and v3.1.1 simultaniously
  • a smaller number of clients (at least 8 have been tested, memory is the issue)
  • retained messages
  • LWT
  • QoS level 0
  • username/password authentication

The broker does not yet support:

  • QoS levels other than 0
  • many TCP(=MQTT) clients
  • non-clear sessions
  • TLS

If you are searching for a complete ready-to-run MQTT broker for the ESP8266 with additional features (persistent configuration, scripting support and much more) have a look at https://github.com/martin-ger/esp_mqtt .

esp_uMQTT_broker

This is a MQTT Broker/Client with scripting support on the ESP8266. This program enables the ESP8266 to become the central node in a small distributed IoT system. It implements an MQTT Broker and a simple scripted rule engine with event/action statements that links together the MQTT sensors and actors. It can act as STA, as AP, or as both and it can connect to another MQTT broker (i.e. in the cloud). Here it can also be bridge that forwards and rewrites topics in both directions. Also it can parse JSON structures, send basic HTTP GET requests and do basic I/O: i.e. read and write to local GPIO pins, react on timers and GPIO interrupts, drive GPIO pins with PWM, and read the ADC.

I hope you’ve found this post “ESP8266 as a MQTT Broker″useful. If have any query, Please write in comment box. You can share this post “ESP8266 as a MQTT Broker “.

You may also like:

Источник

Adblock
detector