Уважаемые пользователи! Наш сайт и форум содержится на средства полученные от рекламы. Если вы хотите и дальше продолжать общаться, скачивать, и т.п. пожалуйста отключите блокировку рекламы для нашего сайта/форума. Можно и покликать по рекламным ссылкам, так будут больше выплаты. Спасибо за понимание!

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

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

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

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

Настройка и использование 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

Группы в Telegram:
https://t.me/joinchat/G96_o1gDikzi_2F5vVLwhA
https://t.me/joinchat/BRr4VVHiIr1f-AX_Ubg1lg

Описание блока 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 сети.

В данных блоках используется исправленная библиотека где все работает как надо, на гитхабе лежит кривая библиотека.
Если у вас не может найти mqtt библиотеку при компиляции в arduino ide или ошибки при компиляции, установите библиотеку вручную: viewtopic.php?p=61491#p61491


Блоки для 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 КБ) 901 скачивание
MQTT_ESP_Sub_6_8_(CODE).ubi
(38.95 КБ) 825 скачиваний
MQTT_ESP_Pub_6_8_(CODE).ubi
(44.63 КБ) 879 скачиваний
Последний раз редактировалось User8 30.04.2020{, 21:21}, всего редактировалось 163 раза.

Taser
Рядовой
Сообщения: 6
Зарегистрирован: 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
Рядовой
Сообщения: 21
Зарегистрирован: 11.04.2016{, 15:46}
Репутация: 1
Откуда: Челябинск

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

#382

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

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

Taser
Рядовой
Сообщения: 6
Зарегистрирован: 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
Рядовой
Сообщения: 38
Зарегистрирован: 06.11.2018{, 18:46}
Репутация: 0
Имя: Алексей

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

#384

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

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

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

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

#385

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

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

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

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
Рядовой
Сообщения: 11
Зарегистрирован: 27.06.2020{, 04:22}
Репутация: 2
Имя: 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. Прошу извинить за офтопик, не могу создать сообщение в соответствующей теме.

Ответить

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