MQTT клиент для Arduino, ESP8266, ESP32

Обмен сообщениями между устройствами

Пользовательские блоки для коммкникации и связи GSM, GPRS, IR, Bluetooth и другие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT клиент для Arduino, ESP8266, ESP32

#1

Сообщение User8 » 08.09.2018{, 14:04}

Подробнее про MQTT:
https://ipc2u.ru/articles/prostye-reshe ... akoe-mqtt/

Установка брокера:
Windows: https://youtu.be/jFUPy1q3ze8
Linux: https://youtu.be/sNSWxyO6XSk
Raspberry Pi / Orange Pi: https://youtu.be/b7NRT-RNPOU
https://robot-on.ru/articles/ystanovka- ... -orange-pi
OpenWrt: https://youtu.be/ADBct61FLsU
Брокер на ESP8266: viewtopic.php?f=133&t=4117
https://youtu.be/QFdx8bnVRHc

Быстрый старт без установки брокера используя сайт beebotte.com:
https://youtu.be/XVnY4za6-uU
viewtopic.php?f=71&t=6293
Брокер от пользователя форума:
viewtopic.php?f=151&t=6474&sid=dc2ead44 ... =20#p91410

Настройка и использование MQTT в FLProg:
https://www.youtube.com/watch?v=QGQpr_Rc8mo
https://www.youtube.com/watch?v=KVksHJS-y-A
https://www.youtube.com/playlist?list=P ... oBGySyEDaU

Управление с помощью Яндекс Алисы и mqtt:
viewtopic.php?f=187&t=7602

Группы в Telegram:
https://t.me/joinchat/6CFnBYY5BUM0ZmZi
https://t.me/joinchat/BRr4VVHiIr1B3pMJNvlzEg

Описание блока Main: (Настройки клиента)
mqttServer - ip или домен mqtt брокера (нужно указывать без https://).
mqttPort - порт mqtt брокера (по умолчанию: 1883).
mqttUser - имя пользователя на брокере, можно использовать один логин и пароль на всех mqtt клиентах.
mqttPassword - пароль.
mqttClientId - любое уникальное название на английском, нужно для идентификации на брокере. Для всех клиентов должно быть разное.
Выход mqttConnected - на данном выходе будет единица, если есть подключение к брокеру.
Last Will сообщение - сообщение, которое будет отправлено в указанный топик, после отключения клиента от брокера.
По умолчанию Will топик равен установленному значению на входе mqttClientId.
Пример: мы указали в настройках: willMessageOnline: 1; willMessageOffline: 0; willTopic: client1;
После старта esp и подключению к брокеру, в топик client1 будет отправлено сообщение 1, а при отключении esp от брокера в топик client1 будет отправлено сообщение 0. Параметром keepAlive можно отрегулировать, через сколько секунд брокер отправит сообщение willMessageOffline после отключения esp от брокера. Не рекомендуется ставить меньше 5 секунд.

Описание блока Sub: (Прием сообщения)
Unsubscribe - при удержании единицы происходит отписка от топика, сообщения в топик перестают приходить. При пропадании единицы происходит подписка на топик снова. Данный вход может быть полезен для получения периодических сообщений, когда только нужно или один раз при старте контроллера, можно использовать для оптимизации программы.
Topic - топик для получения сообщения.
QoS - можно указать 0, 1 или 2. Если не указывать ничего, то сообщение принимается с QoS 0.
- Если вы поставили на блоке pub QoS 2, то на блоке sub вы также должны выставить QoS 2 для приема недоставленных сообщений.
- Для корректной работы QoS 1 и 2, на брокере и всех esp должен быть выставлен Clean Session = false.
Выход Received - на данном выходе будет единица в один цикл при получении любого сообщения в топик.
Выход Message - получение сообщения из указанного на входе топика.

Описание блока Pub: (Отправка сообщения)
Send - при поступлении на данный вход единицы, будет отправлено сообщение один раз. Данный вход имеет встроенный Rtrig, не используйте внешний.
Topic - топик, куда будет отправлено сообщение. (Пример: house/room1/lamp1/status)
Message - сообщение, которое будет отправлено на брокер.
QoS - можно указать 0, 1 или 2. Если не указывать ничего, то сообщение отправляется с QoS 0.
- Esp не сохраняет у себя неотправленные сообщения, вы должны сами проконтролировать, чтобы сообщение дошло до брокера с QoS 1 и 2, после чего брокер возьмет на себя ответственность по доставке сообщений с QoS 1 и 2.
- Используйте qos 1 и 2 только для очень важных сообщений, не нужно использовать qos для отправки например показаний температуры или других показаний с датчиков.
Retain - если true, последнее отправленное сообщение сохраняется на mqtt брокере. Это сообщение будет получать подписчик при подключении к брокеру.
Выход qosDelivered - нужен для контроля доставки сообщений с QoS 1 и 2 до брокера. При подаче и удерживании единицы на входе Send, на выходе qosDelivered будет единица, если сообщение доставлено на брокер. Единица будет держаться на данном выходе пока на входе Send не пропадет единица.

Не забудьте включить wifi клиент в настройках контроллера и указать данные вашей wifi сети.

Библиотека: viewtopic.php?p=61491#p61491
Последняя версия библиотеки: https://github.com/marvinroger/async-mqtt-client

Новая версия блоков:
viewtopic.php?p=113908#p113908

Блоки для Ethernet Arduino: viewtopic.php?p=61490#p61486
Main блок для ESP32: viewtopic.php?p=61490#p61490
Копии блоков для ESP8266 и ESP32, для подключения к двум брокерам одновременно: viewtopic.php?p=61489#p61489
Блоки для ESP8266:
Вложения
MQTT_ESP_Main_6_8_(CODE).ubi
(521.53 КБ) 2751 скачивание
MQTT_ESP_Sub_6_8_(CODE).ubi
(38.95 КБ) 2571 скачивание
MQTT_ESP_Pub_6_8_(CODE).ubi
(44.63 КБ) 2665 скачиваний
Последний раз редактировалось User8 28.01.2023{, 01:57}, всего редактировалось 175 раз.

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#241

Сообщение smol » 17.02.2019{, 21:55}

Привет Всем!
Не смейтесь, чей-то никак ни могу подсоенить блоки для Arduino ....

no matching function for call to 'PubSubClient::PubSubClient(EthernetClient&, const char [14], int)'
PubSubClient client(mqttClient, "192.168.0.104", 1883);

Отправлено спустя 30 минут 40 секунд:
уфф разобрался....

Отправлено спустя 1 минуту 37 секунд:
вопрос. на выходе блока подписки сообщение присутствует на время ?? цикла? до смены сообщения в этом топике? еще как?

texbez
Лейтенант
Сообщения: 355
Зарегистрирован: 20.11.2016{, 19:57}
Репутация: 9
Откуда: Ростов на дону

MQTT для Arduino, ESP8266, ESP32

#242

Сообщение texbez » 17.02.2019{, 23:13}

Добрый день!
Помогите разобраться -пытаюсь первый раз разобраться с MQTT.
При прошивке esp IDE выкидывает вот это
СпойлерПоказать
Screenshot_2.png
.
Что ей надо?
Проект:
Проба MQTT esp.flp
(795.08 КБ) 101 скачивание

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT для Arduino, ESP8266, ESP32

#243

Сообщение User8 » 17.02.2019{, 23:50}

smol писал(а):
17.02.2019{, 22:27}
вопрос. на выходе блока подписки сообщение присутствует на время ?? цикла? до смены сообщения в этом топике? еще как?
всегда, пока не придет новое сообщение в топик.
texbez писал(а):
17.02.2019{, 23:13}
Что ей надо?
Скачайте https://github.com/me-no-dev/ESPAsyncTC ... master.zip и установите в arduino ide.

int2246
Рядовой
Сообщения: 15
Зарегистрирован: 31.08.2017{, 08:31}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#244

Сообщение int2246 » 17.02.2019{, 23:58}

smol писал(а):
17.02.2019{, 22:27}
Привет Всем!
Не смейтесь, чей-то никак ни могу подсоенить блоки для Arduino ....

no matching function for call to 'PubSubClient::PubSubClient(EthernetClient&, const char [14], int)'
PubSubClient client(mqttClient, "192.168.0.104", 1883);

Отправлено спустя 30 минут 40 секунд:
уфф разобрался....
подскажи что сделал? использую блок MQTT Ethernet Pub v4.1 ардуину нано и ентернет w5100 выскакивает такоеже сообщение при компеляции
exit status 1
no matching function for call to 'PubSubClient::PubSubClient(EthernetClient&, const char [13], int)'
PubSubClient client(mqttClient, "192.168.12.2", 1883);
чем лечил?

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#245

Сообщение smol » 18.02.2019{, 13:14}

Снес все библиотеки publishclient , она у меня в двух местах лежала и поставил рекомендуемую

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#246

Сообщение smol » 02.03.2019{, 21:10}

Блок отличный, но вот проблем как и где можно выцепить признак прихода сообщения по подписке

Отправлено спустя 5 минут 32 секунды:
никак не могу логику сделать, так чтобы переменную (выход) можно было установить True/False подпиской и паралельно кнопкой сбросить если True и установить если False.
Что скажет коллективный разум?

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT для Arduino, ESP8266, ESP32

#247

Сообщение User8 » 05.03.2019{, 18:21}

smol, примерно так, не проверял работает или нет.
try.png

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#248

Сообщение smol » 06.03.2019{, 13:14}

Спасибо, идею понял ....

int2246
Рядовой
Сообщения: 15
Зарегистрирован: 31.08.2017{, 08:31}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#249

Сообщение int2246 » 08.03.2019{, 14:01}

подскажите, а есть у блока какое то ограничение на использование Pub и Sub? Использую нано и W5500 блоки серии MQTT Ethernet Main v4.1 и больше 4 Pub не работает. Это я что то делаю не так или какое то ограничение?

starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

MQTT для Arduino, ESP8266, ESP32

#250

Сообщение starshoy81 » 08.03.2019{, 22:53}

int2246, посмотрите при компиляции, сколько места занимает программа. Если больше половины оперативки, то может глючить.

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#251

Сообщение smol » 10.03.2019{, 00:29}

Еще вопрос обществу.
Возможно ли принять по подписке импульс - изменение значения т.е. подаем в топик к примеру "1" на выходе формируется импульс, через некоторое время опять "1" и опять импульс. в предлагаемом блоке значение подписки постоянно находится на выходе до момента изменения.

Anydy

MQTT для Arduino, ESP8266, ESP32

#252

Сообщение Anydy » 10.03.2019{, 00:54}

starshoy81 писал(а):
08.03.2019{, 22:53}
Если больше половины оперативки, то может глючить.
Ну не половины, а больше 80% ...хотя наверное зависит от конкретного скетча....
smol писал(а):
10.03.2019{, 00:29}
Возможно ли принять по подписке импульс - изменение значения
Не вижу ничего сложного такое сделать, думаю будет полезно!

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT для Arduino, ESP8266, ESP32

#253

Сообщение User8 » 10.03.2019{, 06:28}

smol, создайте переменную, подключите к выходу sub и изменяйте как хотите. Я выше схему прилагал, там так и работает или я не понял чего вам надо.

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#254

Сообщение smol » 10.03.2019{, 09:57}

Переменная на выходе sub существует до момента прихода следующего значения. А здесь так сказать самосброс, переменная существует определенное время а потом возвращается в исходное.

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT для Arduino, ESP8266, ESP32

#255

Сообщение User8 » 10.03.2019{, 11:09}

smol, ну так я и говорю выход sub на переменную и уже с этой переменной делайте что хотите, или лучше после блока сравнения строк на переменную, чтобы память не терять лишнюю используя переменные String.

texbez
Лейтенант
Сообщения: 355
Зарегистрирован: 20.11.2016{, 19:57}
Репутация: 9
Откуда: Ростов на дону

MQTT для Arduino, ESP8266, ESP32

#256

Сообщение texbez » 10.03.2019{, 15:39}

Вопрос сообществу-пробую осваивать MQTT.Установил брокер пока на винде,подцепил датчик температуры и влажности,часы.В качестве панели использую virtunio mqtt.Данные передаются успешно,ещё есть кнопка которая зажигает светодиод и ползунок задатчик числа-всё работает.
Теперь я подключаю ещё одну панель с другого телефона к брокеру ,в нём все компоненты как и в первом,но данные температуры и влажности идут,задатчик в в виде ползунка работает с обеих телефонов,а кнопка только с первого,даже если первый телефон отключить,то со второго кнопка всё равно не работает.И ещё когда к брокеру подключены два телефона ,то работают по очереди(индикаторы подключения моргают и сообщения постоянно всплывают).Это что брокер нен поддерживает одновременно два соединения?
Вложения
Проба MQTT esp.flp
(838.57 КБ) 93 скачивания
Проба MQTT nano.flp
(153.33 КБ) 68 скачиваний

Parashutik
Рядовой
Сообщения: 32
Зарегистрирован: 13.10.2017{, 19:10}
Репутация: 8
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#257

Сообщение Parashutik » 10.03.2019{, 20:29}

User8 писал(а):
03.01.2019{, 01:04}
Блоки для Arduino Ethernet:

Библиотека: https://github.com/Imroy/pubsubclient

Если при компиляции или загрузке выдает ошибку, удалите папку pubsubclient по пути flprog\ideV2\libraries\
Если у вас portable версия flprog, удалите папку pubsubclient по пути flprog\ideV2\portable\sketchbook\libraries\
Столкнулись с такой проблемой. На меге работал modbus. С неё же запуcтили клиента MQTT. Modbus перестал работать. Выяснилось, что шилд 5100 получает два MAC адреса и два IP соответственно. Проблема в пользовательском блоке main. Получается вызов два раза библиотеки ethernet.h и присвоение двух MAC адресов. Подкорректировали Ваш блок. Теперь всё работает. Если использутся только MQTT на шилде 5100, то брать Ваш main блок. Если используется ещё какой нибудь стандартный блок(WEB сервер или modbus TCP), то исправленный наш блок. Тогда всё работает нормально.
MQTT_Ethernet_Main_4_1_без_5100_(CODE).ubi
(543.11 КБ) 85 скачиваний
Исправленный блок main.flp
(587.21 КБ) 97 скачиваний
Отправлено спустя 1 минуту 43 секунды:
texbez писал(а):
10.03.2019{, 15:39}
Вопрос сообществу-пробую осваивать MQTT.Установил брокер пока на винде,подцепил датчик температуры и влажности,часы.В качестве панели использую virtunio mqtt.Данные передаются успешно,ещё есть кнопка которая зажигает светодиод и ползунок задатчик числа-всё работает.
Теперь я подключаю ещё одну панель с другого телефона к брокеру ,в нём все компоненты как и в первом,но данные температуры и влажности идут,задатчик в в виде ползунка работает с обеих телефонов,а кнопка только с первого,даже если первый телефон отключить,то со второго кнопка всё равно не работает.И ещё когда к брокеру подключены два телефона ,то работают по очереди(индикаторы подключения моргают и сообщения постоянно всплывают).Это что брокер нен поддерживает одновременно два соединения?
У Вас на телефонах должен быть разный ID. Это обязательное условие.

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#258

Сообщение smol » 11.03.2019{, 17:50}

Проблема решена подправил блок подписки теперь выход срабатывает на время цикла при приходе в топик соответсвующего значения

Отправлено спустя 1 минуту 8 секунд:
Спасибо User8
Вложения
MQTT_Eth_Sub_4_1_сработка_на_число_в_топике_(CODE).ubi
(18.18 КБ) 73 скачивания
mqtt.png
mqtt.png (3.39 КБ) 1684 просмотра

User8
Лейтенант
Сообщения: 341
Зарегистрирован: 12.06.2017{, 14:44}
Репутация: 103
Имя: Евгений

MQTT для Arduino, ESP8266, ESP32

#259

Сообщение User8 » 11.03.2019{, 18:32}

smol, я догнал что вы хотите, чтобы каждый раз при отправки единицы в топик срабатывала единица на выходе. Это не совсем правильное решение, так как если в топик будет приходить например температура, то после прихода она сразу же сбросится и текущей температуры мы не увидим. Решить ваш вопрос можно проще не переделывая блок, можно сразу после прихода единицы, отправлять в этот же топик 0, в таком случае все будет работать как вам нужно.

smol
Рядовой
Сообщения: 62
Зарегистрирован: 16.11.2017{, 18:25}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#260

Сообщение smol » 11.03.2019{, 23:31}

Это для управления порт дернуть. Заметил больше 4 блоков контроллер не переваривает.

Отправлено спустя 1 минуту 40 секунд:
Для передачи температуры использую не патченый блок.

Ответить

Вернуться в «Коммуникация и связь»