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

Timoha
Рядовой
Сообщения: 11
Зарегистрирован: 06.10.2017{, 21:15}
Репутация: 0
Откуда: Москва
Имя: Юрий

MQTT для Arduino, ESP8266, ESP32

#201

Сообщение Timoha » 15.01.2019{, 23:14}

YuriS, попробуйте установить необходимую библиотеку к пятой версии. тестировал шестую версию было так что статус соединения блока Майн был на нуле (ранее установленную библиотеку не обновлял), однако все остальные данные передавались.

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

MQTT для Arduino, ESP8266, ESP32

#202

Сообщение kos1970 » 16.01.2019{, 00:00}

User8 писал(а):
03.01.2019{, 01:04}
Блоки для Arduino Ethernet:

Если при компиляции или загрузке выдает ошибку, удалите папку pubsubclient по пути flprog\ideV2\libraries\
Если у вас portable версия flprog, удалите папку pubsubclient по пути flprog\ideV2\portable\sketchbook\libraries\
Доброго времени суток.
Если удалить эту папку, то компилятор не найдет <PubSubClient.h>. Простая задача: DHT +W5110 на cloudmqtt и не хочет компилироваться. Выдает ошибку.Arduino: 1.8.1 (Windows 10), Плата:"Arduino/Genuino Uno"

pr5:13: error: no matching function for call to 'PubSubClient::PubSubClient(EthernetClient&, const char [18], int)'

PubSubClient client(mqttClient, "m15.cloudmqtt.com", 16801);
Очень похоже на библиотеку, но я уже все возможные варианты перебрал. Может кто знает ответ?

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

MQTT для Arduino, ESP8266, ESP32

#203

Сообщение User8 » 16.01.2019{, 05:18}

kos1970, попробуйте удалить все библиотеки pubsubclient и потом положите в папку с библиотеками эту https://github.com/Imroy/pubsubclient

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

MQTT для Arduino, ESP8266, ESP32

#204

Сообщение kos1970 » 16.01.2019{, 09:10}

User8, , спасибо. Это помогло. Жизнь продолжается.

YuriS
Рядовой
Сообщения: 4
Зарегистрирован: 23.12.2018{, 22:49}
Репутация: 0
Имя: Юрий

MQTT для Arduino, ESP8266, ESP32

#205

Сообщение YuriS » 20.01.2019{, 08:35}

Коллеги, есть у кого работает в внешними входами хоть на какой версии ?

Отправлено спустя 2 часа 33 минуты 37 секунд:
pipapsix, можете скинуть работающий проект в флпрог, никак не могу заставить работать.

superolegb
Рядовой
Сообщения: 8
Зарегистрирован: 29.09.2017{, 13:05}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#206

Сообщение superolegb » 20.01.2019{, 17:18}

Добрый день!

Подскажите в чем проблема? Блок не хочет компелироваться
СпойлерПоказать
pr52:15:1: error: 'WiFiEventHandler' does not name a type

WiFiEventHandler wifiConnectHandler;

^

pr52:16:1: error: 'WiFiEventHandler' does not name a type

WiFiEventHandler wifiDisconnectHandler;

^

pr52:128:26: error: 'WiFiEventStationModeGotIP' does not name a type

void onWifiConnect(const WiFiEventStationModeGotIP& event)

^

pr52:128:53: error: ISO C++ forbids declaration of 'event' with no type [-fpermissive]

void onWifiConnect(const WiFiEventStationModeGotIP& event)

^

pr52:132:29: error: 'WiFiEventStationModeDisconnected' does not name a type

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)

^

pr52:132:63: error: ISO C++ forbids declaration of 'event' with no type [-fpermissive]

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)

^

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

pr52:50:1: error: 'wifiConnectHandler' was not declared in this scope

wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);

^

pr52:50:27: error: 'class ESP8266WiFiClass' has no member named 'onStationModeGotIP'

wifiConnectHandler = WiFi.onStationModeGotIP(onWifiConnect);

^

pr52:51:1: error: 'wifiDisconnectHandler' was not declared in this scope

wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);

^

pr52:51:30: error: 'class ESP8266WiFiClass' has no member named 'onStationModeDisconnected'

wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWifiDisconnect);

^

C:\Users\Win7\AppData\Local\Temp\flprog\pr52\pr52.ino: At global scope:

pr52:128:26: error: 'WiFiEventStationModeGotIP' does not name a type

void onWifiConnect(const WiFiEventStationModeGotIP& event)

^

pr52:128:53: error: ISO C++ forbids declaration of 'event' with no type [-fpermissive]

void onWifiConnect(const WiFiEventStationModeGotIP& event)

^

pr52:132:29: error: 'WiFiEventStationModeDisconnected' does not name a type

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)

^

pr52:132:63: error: ISO C++ forbids declaration of 'event' with no type [-fpermissive]

void onWifiDisconnect(const WiFiEventStationModeDisconnected& event)

^

Несколько библиотек найдено для "ArduinoOTA.h"
Используется: c:\Program Files\FLProg\ideV2\portable\packages\esp8266\hardware\esp8266\2.3.0-rc1\libraries\ArduinoOTA
Не используется: c:\Program Files\FLProg\ideV2\libraries\ArduinoOTA
exit status 1
'WiFiEventHandler' does not name a type

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

MQTT для Arduino, ESP8266, ESP32

#207

Сообщение User8 » 20.01.2019{, 17:32}

superolegb, в первом посте последнее предложение

superolegb
Рядовой
Сообщения: 8
Зарегистрирован: 29.09.2017{, 13:05}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#208

Сообщение superolegb » 20.01.2019{, 17:59}

User8, Если это предложение " Не забудьте включить wifi клиент в настройках контроллера и указать данные вашей wifi сети." То у меня все включено. Если не там смотрю то прошу тыкнуть куда посмотреть

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

MQTT для Arduino, ESP8266, ESP32

#209

Сообщение User8 » 20.01.2019{, 18:06}

superolegb, какая у вас версия flprog стоит?

superolegb
Рядовой
Сообщения: 8
Зарегистрирован: 29.09.2017{, 13:05}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#210

Сообщение superolegb » 20.01.2019{, 18:07}

User8, 4.2.4.

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

MQTT для Arduino, ESP8266, ESP32

#211

Сообщение User8 » 20.01.2019{, 18:26}

superolegb, попробуйте скачать и разархивировать в папку с библиотеками https://github.com/me-no-dev/ESPAsyncTCP

superolegb
Рядовой
Сообщения: 8
Зарегистрирован: 29.09.2017{, 13:05}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#212

Сообщение superolegb » 20.01.2019{, 18:57}

User8, Спасибо , но не помогло видимо есть какие то отличия в последней версии flprog или IDE оболочки

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

MQTT для Arduino, ESP8266, ESP32

#213

Сообщение pipapsix » 20.01.2019{, 19:11}

YuriS,
Скинте свой проэкт.

Тут и вэб интерфейс, можно в нем все настройки внести.
MQTT 6.4 внешние входы. рабочий. 1,1.flp
(822.09 КБ) 208 скачиваний

superolegb
Рядовой
Сообщения: 8
Зарегистрирован: 29.09.2017{, 13:05}
Репутация: 0

MQTT для Arduino, ESP8266, ESP32

#214

Сообщение superolegb » 20.01.2019{, 19:39}

pipapsix, Ваш проект так же не компилируется с той же ошибкой

Аватара пользователя
pipapsix
Лейтенант
Сообщения: 436
Зарегистрирован: 25.10.2016{, 21:26}
Репутация: 15
Откуда: Волгоградская обл.
Имя: СашкаСаняАлександр

MQTT для Arduino, ESP8266, ESP32

#215

Сообщение pipapsix » 20.01.2019{, 19:49}

superolegb,
Вот мои библиотеки. замените у себя папку с ними.
https://yadi.sk/d/e6JHqQZibfsEBA

sergej-chernov-1962
Рядовой
Сообщения: 25
Зарегистрирован: 26.01.2018{, 10:51}
Репутация: 1
Имя: сергей

MQTT для Arduino, ESP8266, ESP32

#216

Сообщение sergej-chernov-1962 » 20.01.2019{, 20:02}

А скажите ESP-WROOM-32 ,будет работать с этими блоками

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

MQTT для Arduino, ESP8266, ESP32

#217

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

sergej-chernov-1962, для ESP32 нужно Main блок переделывать

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

MQTT для Arduino, ESP8266, ESP32

#218

Сообщение SerOv » 04.02.2019{, 20:18}

В блоке MQTT ESP Main v6.4 в параметрах блока есть константа = client1/status /LWT топик которая передается на брокер при соединении к брокеру.
После старта esp и подключению к брокеру, в топик client1/status будет отправлено сообщение 1, а при отключении esp от брокера в топик client1/status будет отправлено сообщение 0.
Эту константу я вывел на график. который визуально показывает. есть соединение или нет.
В проекте, измерения температуры, ввел блок Deep Sleep. после того как ESP засыпает. client1/status бодрствует. Пытается постоянно подключиться к брокеру, но это ему не удается, так как ESP спит.
Но это не всегда так. Есть график где этого не происходит.
ESP точно спит.
Может я что то не понимаю. B так должно быть. Но на попытку связи требуется расходовать заряд аккумулятора. Он будет быстро разряжаться.
Отсюда вопрос. Почему так происходит?
Почему client1/status бодрствует после засыпания ESP?
Провожу два графика.
СпойлерПоказать
son.jpg
СпойлерПоказать
spit2.jpg
СпойлерПоказать
Проба3с.flp
(1.12 МБ) 82 скачивания

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

MQTT для Arduino, ESP8266, ESP32

#219

Сообщение User8 » 04.02.2019{, 21:00}

SerOv, после отключения есп от брокера должно пройти 15 сек, чтобы брокер считал клиент отключенным, за это отвечает параметр keepAlive. Подробнее ничего сказать не могу почему он коннектится во время сна.

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

MQTT для Arduino, ESP8266, ESP32

#220

Сообщение SerOv » 04.02.2019{, 21:05}

Про 15секунд я не говорю. Deep Sleep настроен на 7 минут. Он все 7 минут пытается подключиться.

Ответить

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