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

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

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

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 КБ) 2340 скачиваний
MQTT_ESP_Sub_6_8_(CODE).ubi
(38.95 КБ) 2178 скачиваний
MQTT_ESP_Pub_6_8_(CODE).ubi
(44.63 КБ) 2286 скачиваний
Последний раз редактировалось User8 28.01.2023{, 01:57}, всего редактировалось 175 раз.

Agat
Рядовой
Сообщения: 37
Зарегистрирован: 07.01.2023{, 12:29}
Репутация: 2
Имя: Дмитрий

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

#521

Сообщение Agat » 07.01.2023{, 14:52}

slsl писал(а):
07.01.2023{, 14:23}
Agat писал(а):
07.01.2023{, 12:49}
есть блок DS1820
Попробуйте блок от Эконис.
На нем работает несколько месяцев - никакких проблем. Правда, версия MQTT 6.8
(ЕСР32)
Его и использую

slsl
Рядовой
Сообщения: 26
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 3
Имя: Вячеслав

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

#522

Сообщение slsl » 07.01.2023{, 15:07}

Agat писал(а):
07.01.2023{, 14:52}
Его и использую
Может тогда версия 6.8.2 косячит?
У меня эта связка, да ещё + телеграм на нескольких проектах работает нормально.

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#523

Сообщение SerOv » 07.01.2023{, 15:09}

Agat писал(а):
07.01.2023{, 12:49}
С Рождеством друзья! Использую Блок MQTT_ESP_Main_v6.82, теряется связь с брокером, если в программе есть блок DS1820. Несколькими постами выше встречал уже такую проблему. Может есть решение?
Какой версией Flprog вы пользуетесь?

Agat
Рядовой
Сообщения: 37
Зарегистрирован: 07.01.2023{, 12:29}
Репутация: 2
Имя: Дмитрий

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

#524

Сообщение Agat » 07.01.2023{, 15:37}

SerOv писал(а):
07.01.2023{, 15:09}
Agat писал(а):
07.01.2023{, 12:49}
С Рождеством друзья! Использую Блок MQTT_ESP_Main_v6.82, теряется связь с брокером, если в программе есть блок DS1820. Несколькими постами выше встречал уже такую проблему. Может есть решение?
Какой версией Flprog вы пользуетесь?
7.3.8

Отправлено спустя 1 минуту 45 секунд:
slsl писал(а):
07.01.2023{, 15:07}
Agat писал(а):
07.01.2023{, 14:52}
Его и использую
Может тогда версия 6.8.2 косячит?
У меня эта связка, да ещё + телеграм на нескольких проектах работает нормально.
попробую 6.8.
а у вас один датчик?

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#525

Сообщение SerOv » 07.01.2023{, 15:44}

ESP8266?

Отправлено спустя 2 минуты 7 секунд:
Если esp8266 попробуйте поставить В IDE для esp8266 версии 2.7.4
Последний раз редактировалось SerOv 07.01.2023{, 15:50}, всего редактировалось 1 раз.

slsl
Рядовой
Сообщения: 26
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 3
Имя: Вячеслав

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

#526

Сообщение slsl » 07.01.2023{, 15:46}

Agat писал(а):
07.01.2023{, 15:39}
а у вас один датчик?
Есть с несколькими. Есть с одним в купе с датчиками другого типа.
Версия Флпрог 7.50, 7.52, 8.02

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#527

Сообщение SerOv » 07.01.2023{, 16:36}

СпойлерПоказать
photo_2023-01-07_15-49-29.jpg
СпойлерПоказать
VID_20230101_175933n.mp4
(3.73 МБ) 5 скачиваний
Проблема началась после версии Flprog 735. В новых версиях IDE обновлялась плата ESP8266. Так вот версии плат 2.7.4 .С ней все работало. И если даже в новой версии Flprog8.0.2. установить старую версию плат 2.7.4. То все работает отлично. Вот если кто может найти в чем проблема в блоке MQTT_ESR_Main_6_8 и переписать его?

Agat
Рядовой
Сообщения: 37
Зарегистрирован: 07.01.2023{, 12:29}
Репутация: 2
Имя: Дмитрий

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

#528

Сообщение Agat » 07.01.2023{, 16:56}

SerOv писал(а):
07.01.2023{, 15:46}
ESP8266?

Отправлено спустя 2 минуты 7 секунд:
Если esp8266 попробуйте поставить В IDE для esp8266 версии 2.7.4
Поставил 2.7.4. - не помогло. И еще в ходе долгих экспериментов обнаружил, что связь с брокером теряется не из-за датчика :smile44: (удалил все все блоки датчиков и отключил все датчики)...

Отправлено спустя 2 минуты 16 секунд:
поставил FLProg 8.02 - проблема не решилась

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#529

Сообщение SerOv » 07.01.2023{, 17:18}

Agat писал(а):
07.01.2023{, 16:58}
поставил FLProg 8.02 - проблема не решилась
У меня все работает с версиией 2.7.4 все хорошо. Еще предполагаю, что возможно зависит от версии MQTT на сервере. Я пользуюсь IObroker и все работает даже в Flprog 8.0.2. Спациалисты может быть смогут решить эту проблему. Если будет желание. Но пока тишина. Желающих нет. А сам автор блоков сказал что пока не занимается ардуиной. А что такое пока не известно. Как то так :(

Отправлено спустя 5 минут 19 секунд:
Agat писал(а):
07.01.2023{, 16:58}
Поставил 2.7.4. - не помогло. И еще в ходе долгих экспериментов обнаружил, что связь с брокером теряется не из-за датчика :smile44: (удалил все все блоки датчиков и отключил все датчики)...
Думаю что с блоком MQTT_ESR_Main_6_8 какая то не стыковка. так как другие блоки свсе работают

Отправлено спустя 4 минуты 7 секунд:
Agat, Попробуте в версии Flprog 735 поставить только один блок MQTT_ESP_Main_6_8 и проверить. будет работать или нет?
СпойлерПоказать
photo_2023-01-07_15-49-29.jpg

slsl
Рядовой
Сообщения: 26
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 3
Имя: Вячеслав

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

#530

Сообщение slsl » 07.01.2023{, 19:52}

Agat

А кроме обрыва связи с брокером, сама есп-ха не ребутится?
количество и общая длина стринговых переменных и констант сильно большая?

Agat
Рядовой
Сообщения: 37
Зарегистрирован: 07.01.2023{, 12:29}
Репутация: 2
Имя: Дмитрий

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

#531

Сообщение Agat » 08.01.2023{, 07:53}

SerOv писал(а):
07.01.2023{, 17:28}
Agat, Попробуте в версии Flprog 735 поставить только один блок MQTT_ESP_Main_6_8 и проверить. будет работать или нет?
Спасибо! В FLProg 735 с блоком MQTT_ESP_Main_6_8 все заработало идеально со всеми датчиками!

Отправлено спустя 9 минут 24 секунды:
slsl писал(а):
07.01.2023{, 19:52}
Agat

А кроме обрыва связи с брокером, сама есп-ха не ребутится?
количество и общая длина стринговых переменных и констант сильно большая?
Зависит от количества блоков датчиков, с блоками DS1820 и BME280 были зависания. Переменные и константы все вмещались, судя по статистике компилятора занимали 40% памяти..

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#532

Сообщение SerOv » 08.01.2023{, 09:47}

Agat, Попробуйте в версии Flprog 8.0.2 в настройках установить так как на картинки. Таком образом вы будете работать в версии 8.0.2 а прошиваться в IDE из версии 7.3.5 Должно тоже работать.
СпойлерПоказать
capture_002_08012023_093809.jpg

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

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

#533

Сообщение starshoy81 » 08.01.2023{, 11:45}

Agat писал(а):
08.01.2023{, 08:03}
Спасибо! В FLProg 735 с блоком MQTT_ESP_Main_6_8 все заработало идеально со всеми датчиками!
Значит дело в ядре есп, либо в библиотеках которые идут в комплекте с ФЛПрог 735.

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#534

Сообщение SerOv » 08.01.2023{, 12:24}

starshoy81 писал(а):
08.01.2023{, 11:45}
Значит дело в ядре есп, либо в библиотеках которые идут в комплекте с ФЛПрог 735.
Предположительно что так. Осталось совсем малость исправить блок MQTT_ESP_Main_6_8 :)

slsl
Рядовой
Сообщения: 26
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 3
Имя: Вячеслав

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

#535

Сообщение slsl » 08.01.2023{, 12:42}

Хм, специально сделал на вэмос мини 8266 - MQTT 6.8 + один 1820 на блоке эконис (правда сам датчик не подключал) + родной вэб интерфейс.
MQTT - работает, не отваливается.
Флпрог 8.0.2
ядро - последнее.

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#536

Сообщение SerOv » 08.01.2023{, 12:45}

slsl, там странная система. Его несколь раз подключишь с полным сбросом напряжение и начинается бардак :)

Отправлено спустя 6 минут 24 секунды:
И еще возможно имеет значение версия MQTT на сервере.

Отправлено спустя 32 минуты 51 секунду:
IObroker пишет вот такую версию. Но это именно версия в Iobrokere или общие версии MQTT не знаю
СпойлерПоказать
capture_003_08012023_132135.jpg

slsl
Рядовой
Сообщения: 26
Зарегистрирован: 08.12.2021{, 22:41}
Репутация: 3
Имя: Вячеслав

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

#537

Сообщение slsl » 08.01.2023{, 13:38}

SerOv писал(а):
08.01.2023{, 13:25}
И еще возможно имеет значение версия MQTT на сервере.
На Аедесе (нода брокера в Ноде-Ред) и на моските - работает.

У меня как-то было нечто подобное, но я там бодался с телегой: при превышении определенного количества строковых переменных и констант начиналась свистопляка, с ребутами и отвалами.
Причем, компилировалось нормально с остатком свободной памяти.
И не важно было где эти "стринги" использовались - в телеги ли или в mqtt, важно было их общее количество (суммарная длина строк всего проекта)

SerOv
Лейтенант
Сообщения: 487
Зарегистрирован: 06.01.2018{, 19:50}
Репутация: 16

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

#538

Сообщение SerOv » 08.01.2023{, 13:52}

slsl, один блок и задействон светодиод на плате через генератор
СпойлерПоказать
capture_003_01012023_180543.jpg
capture_003_01012023_180543.jpg (10.63 КБ) 317 просмотров

Agat
Рядовой
Сообщения: 37
Зарегистрирован: 07.01.2023{, 12:29}
Репутация: 2
Имя: Дмитрий

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

#539

Сообщение Agat » 08.01.2023{, 14:20}

SerOv писал(а):
08.01.2023{, 09:47}
Agat, Попробуйте в версии Flprog 8.0.2 в настройках установить так как на картинки. Таком образом вы будете работать в версии 8.0.2 а прошиваться в IDE из версии 7.3.5 Должно тоже работать.
СпойлерПоказать
capture_002_08012023_093809.jpg
Попробовал. Может бы оно и заработало, но вылезла другая проблема - FLProg 8.0.2 подключает библиотеку DHTESP.h , а в ней не работает датчик DHT21. В FLProg 7.3.5 используется DHT.h которая работает с 11, 22 и 21 датчиками..

pochabych
Рядовой
Сообщения: 25
Зарегистрирован: 09.11.2021{, 15:12}
Репутация: 1
Имя: Денис

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

#540

Сообщение pochabych » 19.01.2023{, 09:48}

Коллеги добрый день. Подскажите а шифрование tls/ssl на 8883 порту реализовано? А то у меня при по пытке соедениться с ЕСП на 8883 порту брокер ругается. Дескать клиент <неизвестный> отключен. неизвестный протокол. хотя MQTT explorer (Винда) через TLS (8883) ходит и видит что отдает есп на 1883 порту.
Просто я залез в логи брокера и офигел от количества потыток вломиться на брокер с левых адресов. Там и штаты и бельгия короче упырей пруд пруди. Хотелось бы закрыть лазейку открытую по 1883 поту с передачей данных в открытом виде.

Ответить

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