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 раз.

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

MQTT для Arduino, ESP8266, ESP32

#81

Сообщение pipapsix » 16.12.2018{, 12:56}

User8 писал(а):
16.12.2018{, 12:52}
вот например:
Этот экран без дела был, да и пускай работает.Да и дети перед улицей могут посмотреть)
А менеджеры у меня и так есть на смарте, но ими удобно вне дома пользоваться, я за инкубаторами так слежу.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#82

Сообщение CraCk » 22.12.2018{, 21:46}

Тестирую блоки на стабильность имитируя всякие проблемы со связью и тд.
Клиент esp8266 (wemos d1mini) в прошивке простое нажатие пина D5, которое активирует светодиод (запаян синий на самом esp8266 ) пин D4 и заодно отправляет состояние пина D5 (true или false) на брокер (IoBroker).

1. Клиент esp8266 :smile37:
Соединение с сетью - есть
Брокер включен - да
Если отключить клиента от питания и повторно включить то иногда соединение с брокером не восстанавливается. Приходится делать ресет клиента.

2. Клиент esp8266 :smile9:
Соединение с сетью - есть
Брокер включен - нет
Если отключить программно брокера и за некоторое время включит связь восстанавливается, диодом моргаю.

3. Клиент esp8266 :(
Соединение с сетью - нет
Брокер включен - да
Если отключить соединение, физически выдернуть сетевой кабель на пк, где установлен брокер. Диодом моргать не могу, клиент зависает. При подключение сетевого кабеля назад, соединение не восстанавливается, клиент продолжает висеть. Помогает ресет клиента.
Пока что все. Какие будут идеи?
Вложения
wemos mqtt test.flp
(255.58 КБ) 109 скачиваний
Последний раз редактировалось CraCk 23.12.2018{, 00:06}, всего редактировалось 1 раз.

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#83

Сообщение Golan » 22.12.2018{, 22:17}

У меня аналогично по WiFi, отключение брокера вручную и снова включение, связь восстанавливает, но если клиент отключится, например при кратковременном "сбое" питание, то большая вероятность что зависнет до ресета.
Добро не ценится в современном мире, люди от него наглеют!

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#84

Сообщение CraCk » 22.12.2018{, 22:26}

Golan писал(а):
22.12.2018{, 22:17}
У меня аналогично по WiFi, отключение брокера вручную и снова включение, связь восстанавливает, но если клиент отключится, например при кратковременном "сбое" питание, то большая вероятность что зависнет до ресета.
А если роутер вык/вкл? Или роутер там где и брокер?

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#85

Сообщение Rovki » 22.12.2018{, 22:29}

Тогда естественный вопрос - а стоит ли игра свечь ? Одно мучение... ,что может быть дороже ,чем надежность ? :smile44:
Электронщик до мозга костей и не только

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#86

Сообщение Golan » 22.12.2018{, 22:36}

CraCk писал(а):
22.12.2018{, 22:26}
А если роутер вык/вкл? Или роутер там где и брокер?
Пробовал, переподключается, как мне кажется, проблемы в блоке, там в настройках реконнекты и еще что то, ну 60000 секунд и 15.

Отправлено спустя 54 секунды:
Rovki писал(а):
22.12.2018{, 22:29}
что может быть дороже ,чем надежность ?
Несомненно, но не все же всегда сразу надежным получается.
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#87

Сообщение User8 » 22.12.2018{, 22:46}

CraCk, проверю у себя.
Golan, qos 1 или 2 нужно использовать очень редко и только для важных и не меняющихся каждую секунду данных.
Последний раз редактировалось User8 22.12.2018{, 23:00}, всего редактировалось 1 раз.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#88

Сообщение CraCk » 22.12.2018{, 22:48}

User8 писал(а):
08.09.2018{, 14:04}
- QoS - можно указать 0, 1 или 2. Если не указывать ничего, то сообщение отправляется с QoS 0.
QoS 1 не работает. Проверял так: На роутере блокирую мак адрес клиента, на клиенте меняю состояние с false на true. Дальше на роутере отключаю блокировку по мак. Брокер показывает что подключение восстановилось client1/status обновился. но значение моей публикации осталось false.
Rovki писал(а):
22.12.2018{, 22:29}
Тогда естественный вопрос - а стоит ли игра свечь ? Одно мучение... ,что может быть дороже ,чем надежность ?
Нет альтернатив. Используем то что есть.

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

MQTT для Arduino, ESP8266, ESP32

#89

Сообщение User8 » 22.12.2018{, 22:55}

CraCk писал(а):
22.12.2018{, 22:48}
QoS 1 не работает.
Надеюсь вы читали документацию и выставили на принимающей стороне так же qos 1.

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#90

Сообщение Golan » 22.12.2018{, 23:14}

User8 писал(а):
22.12.2018{, 22:46}
Golan, qos 1 или 2 нужно использовать очень редко
Ща совсем не использую

Отправлено спустя 43 секунды:
User8 писал(а):
22.12.2018{, 22:55}
на принимающей стороне так же qos 1
я попадался на это :smile171:
Добро не ценится в современном мире, люди от него наглеют!

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#91

Сообщение CraCk » 22.12.2018{, 23:18}

User8 писал(а):
22.12.2018{, 22:55}
Надеюсь вы читали документацию и выставили на принимающей стороне так же qos 1.
Все как книжка пишет
СпойлерПоказать
Снимок2.JPG
СпойлерПоказать
Снимок.JPG

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

MQTT для Arduino, ESP8266, ESP32

#92

Сообщение User8 » 22.12.2018{, 23:21}

CraCk, Golan, проверил у себя все возможные ситуации на NodeMCU v3, ни одного зависания не заметил, светодиод мигает когда нет коннекта - быстрее и когда есть коннект - медленнее, подвисание только во время попытки подключиться. Попробуйте у себя с эти скетчем, не забудьте указать свои данные wifi и mqtt.
Вложения
mqtt_test.flp
(200.86 КБ) 138 скачиваний

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#93

Сообщение Golan » 22.12.2018{, 23:27}

Евгений, вот смотрите, я сделал проектик, залил в Wemos, после прошивки он подключился к брокеру, это было неделю назад, все было нормально всю неделю. Сегодня с утра включил, он подключился, минут через десять модуль моргнул и вырубился, брокер всегда был на связи, так как через него идет публикация с MQTTfx (числа до бесконечности с клиента в брокере), ни ресет модуля не отключение от питание не помогло, только заново перепрошивка. Залил в другой модуль ту же прошиву, все пошло, перепрошил первый, так же запустился, в чем засада, модуле?
User8 писал(а):
22.12.2018{, 23:21}
Попробуйте у себя с эти скетчем, не забудьте указать свои данные wifi и mqtt.
Сделаю, отпишусь, теперь уж завтра
Добро не ценится в современном мире, люди от него наглеют!

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#94

Сообщение CraCk » 23.12.2018{, 00:52}

User8 писал(а):
22.12.2018{, 23:21}
Попробуйте у себя с эти скетчем,
Перво отключил сам брокер-востановилось
Второе заблокировал клиента по мак-востановился
Трете отключил от сети ПК с брокером-завис.

slon-genia
Сержант
Сообщения: 102
Зарегистрирован: 21.11.2016{, 11:05}
Репутация: 2

MQTT для Arduino, ESP8266, ESP32

#95

Сообщение slon-genia » 23.12.2018{, 09:07}

Собрал трёхканальное WI-FI реле с возможностью управления как с местного выключателя, так и дистанционно по протоколу MQTT. В качестве брокера использую mosquito+ magordomo, установленные на orangepi one. Плату собрал , всё работает. На команды реагирует (вкл, выкл) как с выключателя, так и по протоколу. Включил функцию retain в блоке MQTT ESP pub, эту же функцию включил в magordomo. Перевёл все три канала в режим (вкл), передёрнул питание блока реле и восстановились только каналы 2 и 3 (вкл), канал 1- остался в выключенном положении (выкл), хотя должен был тоже перейти в режим (вкл). При этом в magordomo все каналы отображаются как (вкл). Заметил одну фишку: при перетаскивании канала №1 в проэкте FLProg в самый низ- наблюдается та же картина только уже с другим каналом. В чём может быть проблема? Косяк программы, или копать в сторону сервера?
Вложения
MQTT.flp
(873.71 КБ) 136 скачиваний

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#96

Сообщение Sancho » 23.12.2018{, 09:13}

Поставь как нить задержку, перетащив блоки, не основной, на другую плату, выполняющуюся по условию - после того, как пройдёт время Х
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

slon-genia
Сержант
Сообщения: 102
Зарегистрирован: 21.11.2016{, 11:05}
Репутация: 2

MQTT для Arduino, ESP8266, ESP32

#97

Сообщение slon-genia » 23.12.2018{, 09:30}

Sancho писал(а):
23.12.2018{, 09:13}
Поставь как нить задержку, перетащив блоки, не основной, на другую плату, выполняющуюся по условию - после того, как пройдёт время Х
Ятак понял: перетаскиваю один канал на другую плату, при этом блок MQTT ESP Main не трогаю. По задержке ничего не понял? Какую куда задержку и зачем?

Отправлено спустя 2 часа 26 минут 39 секунд:
Не помогло. Переносил на другую плату, делал задержку. Не знаю куда копать.

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

MQTT для Arduino, ESP8266, ESP32

#98

Сообщение User8 » 23.12.2018{, 12:07}

CraCk, да действительно есть зависание, надо разбираться.
slon-genia, retain не всегда будет показывать актуальное состояние, в вашей ситуации лучше отключить retain и попробовать использовать qos.

slon-genia
Сержант
Сообщения: 102
Зарегистрирован: 21.11.2016{, 11:05}
Репутация: 2

MQTT для Arduino, ESP8266, ESP32

#99

Сообщение slon-genia » 23.12.2018{, 12:28}

User8 писал(а):
23.12.2018{, 12:07}
retain не всегда будет показывать актуальное состояние, в вашей ситуации лучше отключить retain и попробовать использовать qos.
Хорошо. Простая ситуация: лампочка горит, пропадает электричество, а затем через время опять подаётся, при этом сервер питается от резервного источника питания и пропадание электричества на него никак не влияет. После подачи электричества на блок реле- оно будет в выключенном состоянии а на сервере при этом будет показано что включено. Как быть в такой ситуации без использования retain?

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

MQTT для Arduino, ESP8266, ESP32

#100

Сообщение User8 » 23.12.2018{, 14:01}

CraCk, много разных тестов провел, получается тормозит loop(), нужно править в самой библиотеке.
slon-genia, последнее состояние сохранять в eeprom.

Ответить

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