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

Taser
Рядовой
Сообщения: 10
Зарегистрирован: 05.06.2020{, 00:21}
Репутация: 0
Имя: Sergey

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

#381

Сообщение Taser » 13.06.2020{, 13:28}

JonyBest писал(а):
13.06.2020{, 11:05}
У меня такое было, пока не настроил правильно топик esp32 - топик на Beebotte.com
А что значит правильно?

starmos
Сержант
Сообщения: 114
Зарегистрирован: 11.04.2016{, 15:46}
Репутация: 13
Откуда: Челябинск

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

#382

Сообщение starmos » 15.06.2020{, 07:50}

Taser писал(а):
13.06.2020{, 03:29}
Здравствуйте а у вас esp32 не перезагружается?
Просто у меня раз в 60-90 секунд уходит в перезагрузку.
все по вине блока main
Посмотрите, выводит ли он что-нибудь в COM-порт. А меня была подобная перезагрузка, из-за того, что при работе с MQTT не хватало размера стека. Увеличил (удвоил) стек = все стало нормально. О том что не хватает стека контроллер сообщал в порт.

Taser
Рядовой
Сообщения: 10
Зарегистрирован: 05.06.2020{, 00:21}
Репутация: 0
Имя: Sergey

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

#383

Сообщение Taser » 15.06.2020{, 21:27}

starmos писал(а):
15.06.2020{, 07:50}
Посмотрите, выводит ли он что-нибудь в COM-порт. А меня была подобная перезагрузка, из-за того, что при работе с MQTT не хватало размера стека. Увеличил (удвоил) стек = все стало нормально. О том что не хватает стека контроллер сообщал в порт.
Я решил проблему уменьшив количество блоков PUB
ну и без танца с бубном не обошлось

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

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

#384

Сообщение Lukum » 26.06.2020{, 16:23}

Подскажите как правильно, пример (topic/temp или просто temp )и так и эдак работает?

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

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

#385

Сообщение Phazz » 27.06.2020{, 05:31}

Lukum, оба варианта правильные

Lukum
Рядовой
Сообщения: 63
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 1
Имя: Алексей

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

#386

Сообщение Lukum » 27.06.2020{, 10:50}

Понятно я к чему спросил, у меня mqtt на m16.cloudmqtt.com он стал платным но у меня остался бесплатный и каждый день он стал выключатся перегрузишь есп опять подключается, было у меня так(tep, min, maks, obn) отключался а сделал так ( topik/tep, topik/min, topik/maks, topik/obn) перестал отключатся вот уже 3 суток работает

RootShell
Рядовой
Сообщения: 77
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 18
Откуда: World
Имя: Agat
Контактная информация:

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

#387

Сообщение RootShell » 27.06.2020{, 14:35}

Не по теме
Подскажите как такое реализовать не исправляя код в arduino IDE? Я всего несколько часов назад нашел FLProg.

Код: Выделить всё

String mess = "{\"TEMP0\":"+(String)Temperature_61214933_1+",\"HUM0\":"+(String)Humidity_61214933_1+",\"PRESS0\":"+(String)Pressure_61214933_1+"}";
Этот mess отправляю на вход mqtt. Float забираю с BME280 и пересобираю в json строку внутри arduinoIDE. Код работает, но есть желание использовать внутренние возможности программы.
P.S. Прошу извинить за офтопик, не могу создать сообщение в соответствующей теме.

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

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

#388

Сообщение JonyBest » 23.07.2020{, 17:59}

starmos писал(а):
15.06.2020{, 07:50}
Посмотрите, выводит ли он что-нибудь в COM-порт. А меня была подобная перезагрузка, из-за того, что при работе с MQTT не хватало размера стека. Увеличил (удвоил) стек = все стало нормально. О том что не хватает стека контроллер сообщал в порт.
Доброго дня! Не могу найти как увеличить размер стека. Подскажите направление!

starmos
Сержант
Сообщения: 114
Зарегистрирован: 11.04.2016{, 15:46}
Репутация: 13
Откуда: Челябинск

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

#389

Сообщение starmos » 25.07.2020{, 13:10}

JonyBest писал(а):
23.07.2020{, 17:59}
Доброго дня! Не могу найти как увеличить размер стека. Подскажите направление!
Путь \PortableFLProg_6-3-1_Win64\ideV5\portable\packages\esp32\hardware\esp32\1.0.4\cores\esp32
Файл main.cpp
Строка xTaskCreateUniversal(loopTask, "loopTask", 16384, NULL, 1, &loopTaskHandle, CONFIG_ARDUINO_RUNNING_CORE); - здесь создается задача Arduino и 16384 - как раз размер стека для неё, уже увеличенный у меня.

kos1970
Рядовой
Сообщения: 21
Зарегистрирован: 08.10.2017{, 12:10}
Репутация: 0
Откуда: Daugavpils
Имя: Konstantin

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

#390

Сообщение kos1970 » 25.08.2020{, 14:40}

Добрый день.
Может кто сталкивался с постоянным пере подключением к брокеру. Не успевает даже информацию принять.
СпойлерПоказать
mqtt_flprog.JPG
Буду признателен, если подскажите в чем проблема.
Вот проект.

Решение: бело два одинаковых ID у клиентов.
Вложения
disp_mqtt.flp
(1.24 МБ) 72 скачивания

Pelletizer
Рядовой
Сообщения: 91
Зарегистрирован: 12.09.2019{, 07:10}
Репутация: 5
Имя: Дмитрий

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

#391

Сообщение Pelletizer » 08.11.2020{, 21:09}

Скажите пожалуйста, данные блоки не подойдут для работы на esp32 с blynk?

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

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

#392

Сообщение Phazz » 08.11.2020{, 21:41}

Pelletizer, Нет

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

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

#393

Сообщение JonyBest » 20.11.2020{, 16:43}

User8 писал(а):
08.09.2018{, 14:04}
QoS - можно указать 0, 1 или 2. Если не указывать ничего, то сообщение отправляется с QoS 0.
- Esp не сохраняет у себя неотправленные сообщения, вы должны сами проконтролировать, чтобы сообщение дошло до брокера с QoS 1 и 2, после чего брокер возьмет на себя ответственность по доставке сообщений с QoS 1 и 2.
Доброго дня! Можно пример как организовать на Esp32 выполнение данного условия

JonyBest
Сержант
Сообщения: 269
Зарегистрирован: 18.11.2015{, 22:42}
Репутация: 89
Откуда: Близко к Ставрополю
Имя: Евгений

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

#394

Сообщение JonyBest » 14.12.2020{, 10:56}

Как то тема стала не активна. В телеграмм канале "Anatoliy" подсказал очень не плохую реализацию контроля доставки сообщения. Может кому еще пригодится...
Вложения
5097ff83-61e8-4ab2-968b-90ce3f42666d.jpg
5097ff83-61e8-4ab2-968b-90ce3f42666d.jpg (9.15 КБ) 1283 просмотра

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

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

#395

Сообщение slon-genia » 27.12.2020{, 23:47}

Ребята, столкнулся с такой проблемой. В качестве брокера использую одноплатник Orangepi One. Установил брокер mosquitto. В проекте FLprog использовал блоки MQTT 6.8 из шапки этой темы. После запуска брокера наблюдаю периодическое подключение и отключение клиента. До этого стоял IOBROKER с родным MQTT драйвером- проблем не было. Лог программы Mosquito прилагаю.
Вложения
log.txt
(1021 байт) 43 скачивания

Bentry
Рядовой
Сообщения: 43
Зарегистрирован: 20.09.2017{, 10:22}
Репутация: 7

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

#396

Сообщение Bentry » 28.12.2020{, 12:33}

slon-genia писал(а):
27.12.2020{, 23:47}
После запуска брокера наблюдаю периодическое подключение и отключение клиента.
Была схожая проблема на OrangePi3
Попробуйте внести пару строк в файл ect/mosquitto/mosquitto.conf

keepalive_interval 60
idle_timeout 60

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

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

#397

Сообщение slon-genia » 29.12.2020{, 00:45}

Bentry писал(а):
28.12.2020{, 12:33}
slon-genia писал(а):
27.12.2020{, 23:47}
После запуска брокера наблюдаю периодическое подключение и отключение клиента.
Была схожая проблема на OrangePi3
Попробуйте внести пару строк в файл ect/mosquitto/mosquitto.conf

keepalive_interval 60
idle_timeout 60
Переписал весь проэкт с нуля и всё пошло. Даже не знаю в чём причина. Блоки работают исключительно.

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

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

#398

Сообщение SerOv » 01.01.2021{, 15:31}

Здравствуйте. Всех с наступившем Новым годом.
Некоторые ESP очень долго подключается к MQTT. Другие очень быстро. Хотел понять в чем проблема.
Почему так происходит? Почему одни подключаются быстро, а другие очень долго? Ссылка на ролик.
СпойлерПоказать

kramar
Рядовой
Сообщения: 41
Зарегистрирован: 29.12.2020{, 13:53}
Репутация: -4
Имя: Виталий

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

#399

Сообщение kramar » 02.01.2021{, 03:58}

Если возможно, подправьте блок :)

viewtopic.php?f=71&t=6293&start=20#p97941

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

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

#400

Сообщение Rovki » 02.01.2021{, 20:45}

Уважаемый Евгений ,не могли бы вы доделать блоки для подписчика и издателя ,что бы можно было принимать и отправлять разные типы данных - bool , int,float в сообщении (в настройках блока,меняя тип данных), сейчас только string. Для User8,
Электронщик до мозга костей и не только

Ответить

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