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

worm73
Рядовой
Сообщения: 5
Зарегистрирован: 08.09.2021{, 16:10}
Репутация: 0
Имя: Александр

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

#541

Сообщение worm73 » 19.01.2023{, 17:51}

Добрый день. Помогите перепробовал разные версии FLprog так же разные версии блоков MQTT с данного форума и все время одна и таже ошибка при компиляции в arduino ide.


pr2:29:1: error: 'WiFiEventHandler' does not name a type; did you mean 'WiFiEventFuncCb'?
WiFiEventHandler wifiConnectHandler;
^~~~~~~~~~~~~~~~
WiFiEventFuncCb
pr2:30:1: error: 'WiFiEventHandler' does not name a type; did you mean 'WiFiEventFuncCb'?
WiFiEventHandler wifiDisconnectHandler;
^~~~~~~~~~~~~~~~
WiFiEventFuncCb
pr2:250:26: error: 'WiFiEventStationModeGotIP' does not name a type
void onWifiConnect(const WiFiEventStationModeGotIP& event)
^~~~~~~~~~~~~~~~~~~~~~~~~
pr2:254:29: error: 'WiFiEventStationModeDisconnected' does not name a type; did you mean 'esp_netif_action_disconnected'?
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
esp_netif_action_disconnected
C:\Users\Professional\AppData\Local\Temp\flprog\pr2\pr2.ino: In function 'void setup()':
pr2:47:5: error: 'wifiConnectHandler' was not declared in this scope
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
^~~~~~~~~~~~~~~~~~
C:\Users\Professional\AppData\Local\Temp\flprog\pr2\pr2.ino:47:5: note: suggested alternative: 'AcConnectHandler'
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
^~~~~~~~~~~~~~~~~~
AcConnectHandler
pr2:47:31: error: 'class WiFiClass' has no member named 'onStationModeGotIP'
wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);
^~~~~~~~~~~~~~~~~~
pr2:48:5: error: 'wifiDisconnectHandler' was not declared in this scope
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
^~~~~~~~~~~~~~~~~~~~~
C:\Users\Professional\AppData\Local\Temp\flprog\pr2\pr2.ino:48:5: note: suggested alternative: 'AcConnectHandler'
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
^~~~~~~~~~~~~~~~~~~~~
AcConnectHandler
pr2:48:34: error: 'class WiFiClass' has no member named 'onStationModeDisconnected'
wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);
^~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\Professional\AppData\Local\Temp\flprog\pr2\pr2.ino: At global scope:
pr2:250:26: error: 'WiFiEventStationModeGotIP' does not name a type
void onWifiConnect(const WiFiEventStationModeGotIP& event)
^~~~~~~~~~~~~~~~~~~~~~~~~
pr2:254:29: error: 'WiFiEventStationModeDisconnected' does not name a type; did you mean 'esp_netif_action_disconnected'?
void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
esp_netif_action_disconnected
Несколько библиотек найдено для "WiFi.h"
Используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\esp32\hardware\esp32\2.0.5\libraries\WiFi
Не используется: c:\Program Files (x86)\FLProg\ideV8\libraries\WiFi
exit status 1
'WiFiEventHandler' does not name a type; did you mean 'WiFiEventFuncCb'?

Уже руки опускаются, но хочется результата. Использую ESP32

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

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

#542

Сообщение Sancho » 19.01.2023{, 19:26}

worm73 писал(а):
19.01.2023{, 17:51}
Добрый день. Помогите перепробовал разные версии FLprog так же разные версии блоков MQTT с данного форума и все время одна и таже ошибка при компиляции в arduino ide.
Проект бы для теста...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

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

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

#543

Сообщение Phazz » 19.01.2023{, 20:14}

worm73, а майн блок для esp32?

artemka19
Лейтенант
Сообщения: 466
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 193
Откуда: Питер
Имя: Артем

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

#544

Сообщение artemka19 » 19.01.2023{, 22:48}

Sancho писал(а):
19.01.2023{, 19:26}
Проект бы для теста...
сегодня Крещение....гадаем на свечах)))

worm73
Рядовой
Сообщения: 5
Зарегистрирован: 08.09.2021{, 16:10}
Репутация: 0
Имя: Александр

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

#545

Сообщение worm73 » 20.01.2023{, 09:22}

Блоки использую из закрепленного сообщения здесь, а именно MQTT_ESP_Main_v6_82. Проект пока элементарный подсоедениться с брокеру MQTT и отправить сообщение, всего два блока. Пустой проект делаю с настройкой Wifi гружу в ESP32 все ок, добавляю блоки MQTT вылетает ошибка. С MQTT ранее работал на arduino mega все работало без проблем.

Отправлено спустя 4 минуты 13 секунд:
Test_ESP32.flp
(5.77 МБ) 10 скачиваний
- тестовый проект

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

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

#546

Сообщение slsl » 20.01.2023{, 12:17}

worm73 писал(а):
20.01.2023{, 09:26}
Блоки использую из закрепленного сообщения здесь, а именно MQTT_ESP_Main_v6_82.
Используйте блоки v6.8 -и всё будет норм.

worm73
Рядовой
Сообщения: 5
Зарегистрирован: 08.09.2021{, 16:10}
Репутация: 0
Имя: Александр

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

#547

Сообщение worm73 » 20.01.2023{, 14:55}

Я разные блоки пробовал, в том числе и v6.8 ошибка одна и таже, так же и разные версии flProg пробовал все одно и тоже. У кого работают эти блоки, можно выложить блоки и полностью папку ide из flprog.

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

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

#548

Сообщение SerOv » 20.01.2023{, 17:39}

worm73 писал(а):
20.01.2023{, 14:55}
Я разные блоки пробовал, в том числе и v6.8 ошибка одна и таже, так же и разные версии flProg пробовал все одно и тоже. У кого работают эти блоки, можно выложить блоки и полностью папку ide из flprog.
Вы истользуете Main блок для ESp8266 а для ESP32 блок называется MQTT_ESP32_Main_6_8 скачайте от сюда именно для ESP32 viewtopic.php?p=61490#p61490

Отправлено спустя 9 минут 56 секунд:
И Подавайте на вход блока Send через генератор. Иначе данные придут только один раз. при подключении к брокеру
СпойлерПоказать
capture_001_20012023_174418.jpg

costy1957
Сержант
Сообщения: 182
Зарегистрирован: 05.08.2018{, 08:37}
Репутация: 36
Имя: Константин

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

#549

Сообщение costy1957 » 20.01.2023{, 21:54}

Спасибо,SerOv, прояснил проблемму, блок для esp32 существует и в версии 6.82 отсутствует, так, как расположен инутри топика 174 сообщение, а в заголовочной части топика отсутствует. В версии 6.82.1 добавлена возможность выбора между 8266 и 32. Pub, Sub блоки те же, что и версии 6.82
Вложения
MQTT_ESP_Main_v6.82.2_(Code_-_Professional).ubi
(708.67 КБ) 0 скачиваний
MQTT_ESP_Sub_v6.82_(Code_-_Professional).ubi
(215.21 КБ) 12 скачиваний
MQTT_ESP_Pub_v6.82_(Code_-_Professional).ubi
(245.82 КБ) 11 скачиваний
Последний раз редактировалось costy1957 31.01.2023{, 21:20}, всего редактировалось 1 раз.

artemka19
Лейтенант
Сообщения: 466
Зарегистрирован: 03.09.2020{, 15:41}
Репутация: 193
Откуда: Питер
Имя: Артем

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

#550

Сообщение artemka19 » 20.01.2023{, 22:05}

costy1957,
все блоки и ссылки есть на первой странице: как для 8266 так и для 32

costy1957
Сержант
Сообщения: 182
Зарегистрирован: 05.08.2018{, 08:37}
Репутация: 36
Имя: Константин

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

#551

Сообщение costy1957 » 20.01.2023{, 22:32}

недоглядел....

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

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

#552

Сообщение SerOv » 20.01.2023{, 22:47}

artemka19 писал(а):
20.01.2023{, 22:05}
costy1957,
все блоки и ссылки есть на первой странице: как для 8266 так и для 32
надо в сылке Новая версия блоков: заменить Main на 6821 . так как там нет выбора ESP
СпойлерПоказать
capture_002_20012023_223504.jpg
capture_002_20012023_223504.jpg (29.2 КБ) 470 просмотров
СпойлерПоказать
capture_003_20012023_224111.jpg

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

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

#553

Сообщение pochabych » 24.01.2023{, 09:12}

Коллеги добрый день.
Я все со своим вопросом о шифровании и использовании порта 8883, нарыл статью как это реализовать в коде, но я не программист и думаю что портраченное мной время никак не скажется на результатах. Может автор блока сможет внести измения в структуру для выбора порта 1883 или 8883 и при использовании SSL/TLS скормить ESP32 ключ полученный от брокера.
статья

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

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

#554

Сообщение Agat » 26.01.2023{, 16:44}

Добрый день. Ошибки при компиляции для ESP32, FLProg802. Проект состоит из блока MQTT ESP32 Main v6.8 и вывода в UART
esp32.flp
(1011.63 КБ) 5 скачиваний
. Ошибка:
C:\Users\pro2\AppData\Local\Temp\flprog\pr5\pr5.ino: In function 'void connectToMqtt()':
pr5:123:22: error: comparison with string literal results in unspecified behavior [-Werror=address]
if ("default" == "default")
^~~~~~~~~
C:\Users\pro2\AppData\Local\Temp\flprog\pr5\pr5.ino: In function 'void onMqttConnect(bool)':
pr5:147:22: error: comparison with string literal results in unspecified behavior [-Werror=address]
if ("default" == "default")
^~~~~~~~~
C:\Users\pro2\AppData\Local\Temp\flprog\pr5\pr5.ino: In function 'void WiFiEvent(arduino_event_id_t)':
C:\Users\pro2\AppData\Local\Temp\flprog\pr5\pr5.ino:264:18: warning: comparison between 'enum arduino_event_id_t' and 'enum system_event_id_t' [-Wenum-compare]
if (event == SYSTEM_EVENT_STA_GOT_IP) connectToMqtt();
^~~~~~~~~~~~~~~~~~~~~~~
C:\Users\pro2\AppData\Local\Temp\flprog\pr5\pr5.ino:265:23: warning: comparison between 'enum arduino_event_id_t' and 'enum system_event_id_t' [-Wenum-compare]
else if (event == SYSTEM_EVENT_STA_DISCONNECTED) mqttReconnectTimer.detach();
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus.exe: some warnings being treated as errors
Несколько библиотек найдено для "WiFi.h"
Используется: C:\FLProg\ideV8\portable\packages\esp32\hardware\esp32\2.0.6\libraries\WiFi
Не используется: c:\FLProg\ideV8\libraries\WiFi
Используем библиотеку WiFi версии 2.0.0 из папки: C:\FLProg\ideV8\portable\packages\esp32\hardware\esp32\2.0.6\libraries\WiFi
Используем библиотеку async-mqtt-client версии 0.8.2 из папки: c:\FLProg\ideV8\portable\sketchbook\libraries\async-mqtt-client
Используем библиотеку AsyncTCP версии 1.1.1 из папки: c:\FLProg\ideV8\portable\sketchbook\libraries\AsyncTCP
Используем библиотеку Ticker версии 2.0.0 из папки: C:\FLProg\ideV8\portable\packages\esp32\hardware\esp32\2.0.6\libraries\Ticker
Используем библиотеку Flprog_Utilites версии 1.0.0 из папки: c:\FLProg\ideV8\portable\sketchbook\libraries\Flprog_Utilites
exit status 1
comparison with string literal results in unspecified behavior [-Werror=address]

costy1957
Сержант
Сообщения: 182
Зарегистрирован: 05.08.2018{, 08:37}
Репутация: 36
Имя: Константин

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

#555

Сообщение costy1957 » 26.01.2023{, 22:57}

Если есть желание работать с этими блоками в версии 8.02 удали папку ide8 в ней и скопируй из версии 7.5.2

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

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

#556

Сообщение Agat » 27.01.2023{, 09:31}

costy1957 писал(а):
26.01.2023{, 22:57}
Если есть желание работать с этими блоками в версии 8.02 удали папку ide8 в ней и скопируй из версии 7.5.2
Сделал в версии 7.3.5 - такая же ошибка.

costy1957
Сержант
Сообщения: 182
Зарегистрирован: 05.08.2018{, 08:37}
Репутация: 36
Имя: Константин

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

#557

Сообщение costy1957 » 27.01.2023{, 12:37}

проверил в версии 7.5.2 - блоки работают, в версии 8.02 не работают esp32. Нужны новые ПБ, стройте свои проекты в версии 7.5.2. Возможно что то в программе что то не так и в следующих версиях будет исправлено.

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

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

#558

Сообщение SerOv » 27.01.2023{, 17:40}

Agat писал(а):
26.01.2023{, 16:44}
Добрый день. Ошибки при компиляции для ESP32, FLProg802. Проект состоит из блока MQTT ESP32 Main v6.8 и вывода в UART esp32.flp. Ошибка:
Компиляция в 802 прошла без ошибок
СпойлерПоказать
capture_003_27012023_173650.jpg
СпойлерПоказать
capture_004_27012023_174106.jpg

costy1957
Сержант
Сообщения: 182
Зарегистрирован: 05.08.2018{, 08:37}
Репутация: 36
Имя: Константин

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

#559

Сообщение costy1957 » 27.01.2023{, 21:13}

Какую версию использовали? Х32 или х64, портативную или предустановленную. У меня портативная х64 выдает ошибку.

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

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

#560

Сообщение SerOv » 27.01.2023{, 21:22}

costy1957 писал(а):
27.01.2023{, 21:13}
Какую версию использовали? Х32 или х64, портативную или предустановленную. У меня портативная х64 выдает ошибку.
портативная x64
Portable_FLProg_8-0-2_Win64

Ответить

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