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

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

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

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

Блоки для Ethernet Arduino: viewtopic.php?p=61490#p61486
Main блок для ESP32: viewtopic.php?p=61490#p61490
Копии блоков для ESP8266 и ESP32, для подключения к двум брокерам одновременно: viewtopic.php?p=61489#p61489
Блоки для ESP8266:
Для скачивания вложений Вы должны быть зарегистрированы.
Последний раз редактировалось User8 02.10.2021{, 12:24}, всего редактировалось 173 раза.

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

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

#421

Сообщение Phazz » 15.08.2021{, 18:52}

Di123, я использую wqtt.ru. Но есть и для форумчан брокер.

ecoins
Подполковник
Сообщения: 1365
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 224
Откуда: Шатура
Имя: Энвер

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

#422

Сообщение ecoins » 15.08.2021{, 18:59}

Вопросы к User8, Phazz:
В блоках используется библиотека async-mqtt-client.
На сайте Arduino.cc рекомендованная библиотека arduino-mqtt.
Arduino IDE предлагает более 80 вариантов.
1.Чем привлек выбранный вариант?
2.В первом посте написано, что библиотека "кривая" и Вы что-то доработали?
3.Где возникли проблемы и что дорабатывалось?
4.С учетом полученного опыта Вы бы снова остановились бы на выбранном варианте, или известны и другие неплохие реализации на Arduino?
-----
Спасибо.

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

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

#423

Сообщение Phazz » 15.08.2021{, 19:08}

ecoins, реализация User8 работает очень хорошо. Мой выбор основан только лишь на том что это практически единственный блок mqtt для Flprog )

ecoins
Подполковник
Сообщения: 1365
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 224
Откуда: Шатура
Имя: Энвер

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

#424

Сообщение ecoins » 15.08.2021{, 19:57}

Phazz писал(а):
15.08.2021{, 19:08}
ecoins, реализация User8 работает очень хорошо. Мой выбор основан только лишь на том что это практически единственный блок mqtt для Flprog )
Спасибо. Понял. Хотелось бы поглубже разобраться.

Аватара пользователя
Di123
Капитан
Сообщения: 725
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 17
Имя: Дмитрий

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

#425

Сообщение Di123 » 16.08.2021{, 02:50}

добавил ваши библиотеки стала вылетать ошибка

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

Arduino: 1.8.15 (Windows 10), Плата:"NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:none OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

C:\Users\User\AppData\Local\Temp\flprog\pr40\pr40.ino: In function 'void setup()':

pr40:57:5: error: '_esp8266WifiModuleApReconnect' was not declared in this scope

   57 |     _esp8266WifiModuleApReconnect();

      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

pr40:58:50: error: 'onWifiConnect' was not declared in this scope

   58 |     wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);

      |                                                  ^~~~~~~~~~~~~

pr40:59:60: error: 'onWifiDisconnect' was not declared in this scope

   59 |     wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);

      |                                                            ^~~~~~~~~~~~~~~~

pr40:60:26: error: 'onMqttMessage' was not declared in this scope; did you mean 'inputMessage'?

   60 |     mqttClient.onMessage(onMqttMessage);

      |                          ^~~~~~~~~~~~~

      |                          inputMessage

pr40:61:26: error: 'onMqttConnect' was not declared in this scope

   61 |     mqttClient.onConnect(onMqttConnect);

      |                          ^~~~~~~~~~~~~

pr40:62:29: error: 'onMqttDisconnect' was not declared in this scope

   62 |     mqttClient.onDisconnect(onMqttDisconnect);

      |                             ^~~~~~~~~~~~~~~~

pr40:63:26: error: 'onMqttPublish' was not declared in this scope

   63 |     mqttClient.onPublish(onMqttPublish);

      |                          ^~~~~~~~~~~~~

C:\Users\User\AppData\Local\Temp\flprog\pr40\pr40.ino: In function 'void loop()':

pr40:71:9: error: '_esp8266WifiModuleApReconnect' was not declared in this scope

   71 |         _esp8266WifiModuleApReconnect();

      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

pr40:154:28: error: '_floatToStringWitRaz' was not declared in this scope

  154 |     Message_245667527_1 = (_floatToStringWitRaz(temp_82749380_1,2));

      |                            ^~~~~~~~~~~~~~~~~~~~

pr40:157:5: error: 'pub' was not declared in this scope

  157 |     pub(Send_245667527_1, Topic_245667527_1, Message_245667527_1, QoS_245667527_1, Retain_245667527_1, qosDelivered_245667527_1, packetId_245667527_1, rTrig_245667527_1);

      |     ^~~

C:\Users\User\AppData\Local\Temp\flprog\pr40\pr40.ino: In function 'void onWifiConnect(const WiFiEventStationModeGotIP&)':

pr40:189:5: error: 'connectToMqtt' was not declared in this scope

  189 |     connectToMqtt();

      |     ^~~~~~~~~~~~~

C:\Users\User\AppData\Local\Temp\flprog\pr40\pr40.ino: In function 'void _esp8266WifiModuleApReconnect()':

pr40:355:9: error: '_checkMacAddres' was not declared in this scope

  355 |     if (_checkMacAddres(ESPControllerWifiAP_mac))

      |         ^~~~~~~~~~~~~~~

pr40:361:12: error: '_checkMacAddres' was not declared in this scope

  361 |     if (! (_checkMacAddres(ESPControllerWifiAP_mac)))

      |            ^~~~~~~~~~~~~~~

Несколько библиотек найдено для "AsyncMqttClient.h"

 Используется: c:\PortableFLProg_7-3-8_Win64\ideV7\portable\sketchbook\libraries\async-mqtt-client

Не используется: c:\PortableFLProg_7-3-8_Win64\ideV7\libraries\async-mqtt-client

Несколько библиотек найдено для "ESPAsyncTCP.h"

 Используется: c:\PortableFLProg_7-3-8_Win64\ideV7\portable\sketchbook\libraries\ESPAsyncTCP

Не используется: c:\PortableFLProg_7-3-8_Win64\ideV7\libraries\ESPAsyncTCP

exit status 1

'_esp8266WifiModuleApReconnect' was not declared in this scope



Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

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

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

#426

Сообщение User8 » 30.08.2021{, 13:21}

ecoins писал(а):
15.08.2021{, 18:59}
Вопросы к User8, Phazz:
В блоках используется библиотека async-mqtt-client.
На сайте Arduino.cc рекомендованная библиотека arduino-mqtt.
Arduino IDE предлагает более 80 вариантов.
1.Чем привлек выбранный вариант?
2.В первом посте написано, что библиотека "кривая" и Вы что-то доработали?
3.Где возникли проблемы и что дорабатывалось?
4.С учетом полученного опыта Вы бы снова остановились бы на выбранном варианте, или известны и другие неплохие реализации на Arduino?
-----
Спасибо.
1. Поддержкой всех видов qos;
2. Что-то было, не помню что, взял на гитхабе исправленную версию, но щас там можно найти новую версию, где скорее всего поправили косяки https://github.com/marvinroger/async-mqtt-client
4. Возможно что и появилось лучше, не смотрел, пока не занимаюсь микроконтроллерами.

ecoins
Подполковник
Сообщения: 1365
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 224
Откуда: Шатура
Имя: Энвер

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

#427

Сообщение ecoins » 30.08.2021{, 13:56}

User8 писал(а):
30.08.2021{, 13:21}
1. Поддержкой всех видов qos;
2. Что-то было, не помню что, взял на гитхабе исправленную версию, но щас там можно найти новую версию, где скорее всего поправили косяки https://github.com/marvinroger/async-mqtt-client
4. Возможно что и появилось лучше, не смотрел, пока не занимаюсь микроконтроллерами.
Вернуться к началу
Спасибо.

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

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

#428

Сообщение zik12 » 05.10.2021{, 14:33}

Здравствуйте! При компиляции вылазят вот такие ошибки. WiFi в настройках включил, flprog 7.3.8.
Что может быть?
СпойлерПоказать
Arduino: 1.8.15 (Windows 7), Плата:"ESP32 Dev Module, Disabled, Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, None"
pr1:157:1: error: 'WiFiEventHandler' does not name a type

pr1:158:1: error: 'WiFiEventHandler' does not name a type

pr1:1833:26: error: 'WiFiEventStationModeGotIP' does not name a type

pr1:1837:29: error: 'WiFiEventStationModeDisconnected' does not name a type

C:\Users\Алексей\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'void setup()':

pr1:419:5: error: 'wifiConnectHandler' was not declared in this scope

pr1:419:31: error: 'class WiFiClass' has no member named 'onStationModeGotIP'

pr1:420:5: error: 'wifiDisconnectHandler' was not declared in this scope

pr1:420:34: error: 'class WiFiClass' has no member named 'onStationModeDisconnected'

C:\Users\Алексей\AppData\Local\Temp\flprog\pr1\pr1.ino: At global scope:

pr1:1833:26: error: 'WiFiEventStationModeGotIP' does not name a type

pr1:1837:29: error: 'WiFiEventStationModeDisconnected' does not name a type

Несколько библиотек найдено для "WiFi.h"

Используется: C:\Program Files (x86)\FLProg\ideV7\portable\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi

Не используется: c:\Program Files (x86)\FLProg\ideV7\libraries\WiFi

Несколько библиотек найдено для "AsyncMqttClient.h"

Используется: c:\Program Files (x86)\FLProg\ideV7\portable\sketchbook\libraries\async-mqtt-client-develop

Не используется: c:\Program Files (x86)\FLProg\ideV7\portable\sketchbook\libraries\async-mqtt-client

Несколько библиотек найдено для "AsyncTCP.h"

Используется: c:\Program Files (x86)\FLProg\ideV7\portable\sketchbook\libraries\AsyncTCP

Не используется: c:\Program Files (x86)\FLProg\ideV7\portable\sketchbook\libraries\AsyncTCP-master

exit status 1

'WiFiEventHandler' does not name a type



Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1417
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 438
Откуда: Ярославль
Имя: Андрей
Контактная информация:

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

#429

Сообщение Dryundel » 05.10.2021{, 14:39}

zik12 писал(а):
05.10.2021{, 14:33}
Что может быть?
Вы Wi-Fi правильно настроили?
Лучше бы проект приложили.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#430

Сообщение zik12 » 05.10.2021{, 14:44}

Dryundel писал(а):
05.10.2021{, 14:39}
Вы Wi-Fi настроили?
Клиент в работе
SSID и пароль ввел.

Аватара пользователя
Dryundel
Подполковник
Сообщения: 1417
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 438
Откуда: Ярославль
Имя: Андрей
Контактная информация:

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

#431

Сообщение Dryundel » 05.10.2021{, 14:45}

Возможно не те библиотеки у вас установлены.
Попробуйте использовать встроенный IDE

Отправлено спустя 1 минуту 38 секунд:
Да, увидел, встроенным и пользуетесь.

Отправлено спустя 11 минут 28 секунд:
zik12, Попробуйте обновить библиотеки связанные с ESP32 в IDE
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

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

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

#432

Сообщение zik12 » 05.10.2021{, 15:19}

Dryundel писал(а):
05.10.2021{, 14:58}
Попробуйте обновить библиотеки связанные с ESP32 в IDE
библиотека ESP32 последней версии стоит (1.0.6), а вот библиотеку для WIFI не могу найти новую, у меня 2016 года стоит.

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

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

#433

Сообщение starshoy81 » 06.10.2021{, 14:29}

zik12, сверьте версии библиотек, про которые компилятор пишет -"используется - не используется" и оставьте самые новые, остальные снесите.

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

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

#434

Сообщение zik12 » 06.10.2021{, 15:46}

starshoy81, Проблему с ошибкой в роди как решил: была проблема в одном из блоков. Нашел другую версию и все скомпилировалось. Теперь не могу загрузить: после компеляции пишет
esptool.py v3.0-dev
Serial port COM9
Connecting........
Я нажимаю boot, но ничего не происходит.
В итоге получаю это:
esptool.py v3.0-dev
Serial port COM9
Connecting........_____....._____....._____....._____....._____....._____.....____Произошла ошибка при загрузке скетча
_

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

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

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

#435

Сообщение starshoy81 » 06.10.2021{, 15:50}

zik12, проц не отвечает, значит режим загрузки выключен.

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

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

#436

Сообщение zik12 » 06.10.2021{, 15:51}

starshoy81, а как его включить?

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

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

#437

Сообщение starshoy81 » 06.10.2021{, 16:04}

zik12, перезагрузить

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

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

#438

Сообщение zik12 » 06.10.2021{, 16:09}

starshoy81, перезагрузить ESP32? Просто нажать reset?

UPD: не помогло.

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

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

#439

Сообщение Sancho » 06.10.2021{, 16:16}

zik12 писал(а):
06.10.2021{, 15:46}
Я нажимаю boot, но ничего не происходит.
Нажмите и удерживайте boot и кратко нажмите сброс, затем отпустите boot и вгружайте.
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

Ingwar
Подполковник
Сообщения: 1498
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 111
Откуда: Ленобласть
Имя: Игорь

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

#440

Сообщение Ingwar » 06.10.2021{, 17:11}

Sancho писал(а):
06.10.2021{, 16:16}
и вгружайте
Улыбнуло :yes:
Велик и могуч так сказать... :smile9:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Ответить

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