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

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#101

Сообщение CraCk » 23.12.2018{, 15:04}

User8 писал(а):
23.12.2018{, 12:07}
попробовать использовать qos
Как не крути. Оно не работает. Пробовал обратно от брокера отправлять состояние, доставка работает после восстановление соединения.
Могу снять видео.
Еще в проекте добавил подписку на туже публикацию. Если отправлять от клиента esp1826/pin_D5 = true то тот же клиент не хочет принимать true, а если отправить туже публикацию от брокера esp1826/pin_D5 = true то клиент принимает.
Доработаны проект приложу.

Отправлено спустя 15 минут 41 секунду:
slon-genia писал(а):
23.12.2018{, 12:28}
После подачи электричества на блок реле- оно будет в выключенном состоянии а на сервере при этом будет показано что включено
Попробуйте подписать клиента на те же топик. И в брокере если есть возможность включить Публиковать состояния при подписке или что то подобное.
СпойлерПоказать
Снимок2.JPG
Вложения
2.flp
(313.91 КБ) 76 скачиваний

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

MQTT для Arduino, ESP8266, ESP32

#102

Сообщение User8 » 23.12.2018{, 15:49}

Golan писал(а):
22.12.2018{, 23:27}
в чем засада, модуле?
Не знаю, возможно нужно перед заливкой скетча, прошивать esp пустым файлом.

Отправлено спустя 2 минуты 9 секунд:
CraCk, может взять 2 esp и попробовать, чтобы точно быть уверенным. Когда я делал блоки, проверял qos, все работало.

Отправлено спустя 4 минуты 55 секунд:
CraCk, проблема с зависанием решилась включением "Защита от зависания" в настройках контроллера.

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#103

Сообщение CraCk » 23.12.2018{, 16:14}

User8 писал(а):
23.12.2018{, 15:56}
CraCk, может взять 2 esp и попробовать, чтобы точно быть уверенным. Когда я делал блоки, проверял qos, все работало.
Я бы с удовольствием но до второго esp еще не доработался :(
Вы как то проверяли работу qos?
User8 писал(а):
23.12.2018{, 15:56}
CraCk, проблема с зависанием решилась включением "Защита от зависания" в настройках контроллера.
Это ни как не повлияет на работу в целом?

Отправлено спустя 5 минут 54 секунды:
Размышление на тему qos. Если включен на есп qos=1, значит должен создаваться какой то буфер на есп при разрыве связи. И при восстановление связи с буфера должно произойти повторное отправление. Буфер можно как то смотреть например через терминал?

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

MQTT для Arduino, ESP8266, ESP32

#104

Сообщение User8 » 23.12.2018{, 16:34}

CraCk писал(а):
23.12.2018{, 16:14}
Вы как то проверяли работу qos?
Проверял с двумя esp, отключал одну, на включенной отправлял сообщение, включал другую и после старта сообщение приходило.
CraCk писал(а):
23.12.2018{, 16:14}
Это ни как не повлияет на работу в целом?
Не должно, просто esp перезагрузится.
CraCk писал(а):
23.12.2018{, 16:20}
Буфер можно как то смотреть например через терминал?
Там сложная система, получается если связи с брокером нет, то есп должна хранить данные в памяти. А если например esp отправила данные на другую esp, а другая esp недоступна, получается в таком случае брокер на себя берет ответственность и хранит данные у себя, пока другая esp не появится в сети. Не разбирался где это все хранится на брокере.

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#105

Сообщение CraCk » 23.12.2018{, 16:59}

User8 писал(а):
23.12.2018{, 15:56}
CraCk, может взять 2 esp и попробовать, чтобы точно быть уверенным. Когда я делал блоки, проверял qos, все работало.
Немного подзатупил. Есть же телефон с MQTT dashboard.
User8 писал(а):
23.12.2018{, 16:34}
Проверял с двумя esp, отключал одну, на включенной отправлял сообщение, включал другую и после старта сообщение приходило.
Проверил с телефоном. Тот же результат. Сообщение не обновляется после переподключения. Раньше тестировал esp-link. То там после восстановления связи состояние столько раз изменялось сколько было сделано изменений при отсутствии связи. Например при отсутствии связи нажал 10 раз кнопку, Восcтановилась связь и на брокер прилетело 10 раз true/false. Только жаль esp-link не до конца работает хорошо. По этому муштрую MQTT ESP8266.
А вообще есть еще какие то хорошие библиотеки MQTT для ESP8266, может на них попробовать?

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

MQTT для Arduino, ESP8266, ESP32

#106

Сообщение User8 » 23.12.2018{, 17:08}

CraCk, эта улучшенная с qos, лучше вроде как нет. Есть стандартная без qos: viewtopic.php?p=54118#p54118

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#107

Сообщение Golan » 23.12.2018{, 17:15}

CraCk писал(а):
23.12.2018{, 16:59}
Например при отсутствии связи нажал 10 раз кнопку, Восcтановилась связь и на брокер прилетело 10 раз true/false
А сейчас разве не так?
Добро не ценится в современном мире, люди от него наглеют!

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#108

Сообщение CraCk » 23.12.2018{, 17:21}

Golan писал(а):
23.12.2018{, 17:15}
А сейчас разве не так?
Если бы так, я бы тут не спамил.

Отправлено спустя 7 минут 41 секунду:
User8 писал(а):
23.12.2018{, 17:08}
эта улучшенная с qos, лучше вроде как нет.
А есть примеры *.ino с qos чтоб залить и проверить? Для исключение проблем с блоками.

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#109

Сообщение Golan » 23.12.2018{, 17:36}

CraCk, точно, виноват, ща проверил, релюхи при подключение клиента, встают в положение заданное в браузере.
СпойлерПоказать
1.jpg
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#110

Сообщение User8 » 23.12.2018{, 17:37}


CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#111

Сообщение CraCk » 23.12.2018{, 17:43}

User8 писал(а):
23.12.2018{, 17:08}
эта улучшенная с qos, лучше вроде как нет. Есть стандартная без qos:
Что такое еще есть. Тоже библиотека https://github.com/256dpi/arduino-mqtt/issues/68
Golan писал(а):
23.12.2018{, 17:36}
встают в положение заданное в браузере.
Веб может глючить. Лучше смотреть состояние а админ панели раздел Объекты. Там сразу и время можно увидеть.

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#112

Сообщение Golan » 23.12.2018{, 17:45}

CraCk писал(а):
23.12.2018{, 17:43}
Веб может глючить.
Не замечал, что в объектах что в вебе одинаково, хотя все может быть.
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#113

Сообщение User8 » 23.12.2018{, 18:13}

CraCk, надо будет попробовать библиотеку

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

MQTT для Arduino, ESP8266, ESP32

#114

Сообщение slon-genia » 23.12.2018{, 19:31}

Установил MQTT клиент на телефон и подписался на топик. Второй MQTT клиент установил на планшет и опубликовал в тот же топик сообщение "1", при этом в настройках установил галочку RETAIN. При подключении подписчика к брокеру ему сразу же выдаёт сообщение с текстом "1". Почему на ESP8266 такого не происходит, не понятно.

CraCk
Лейтенант
Сообщения: 634
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

MQTT для Arduino, ESP8266, ESP32

#115

Сообщение CraCk » 23.12.2018{, 20:04}

User8 писал(а):
23.12.2018{, 16:34}
Проверял с двумя esp, отключал одну, на включенной отправлял сообщение, включал другую и после старта сообщение приходило.
Если остался рабочий проект скиньте. Хочу у себя попробовать.

Отправлено спустя 23 секунды:
User8 писал(а):
23.12.2018{, 18:13}
CraCk, надо будет попробовать библиотеку
Жду с нетерпение.

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

MQTT для Arduino, ESP8266, ESP32

#116

Сообщение slon-genia » 24.12.2018{, 10:34}

В общем решил я свою задачу. Проэкт остался тот же, что и выкладывал выше. Поменял блоки MQTT, которые взял из этой viewtopic.php?t=4096&start=120 темы, и библиотеку так же взял из шапки этой темы. Всё стало работать на ура. Питание передёргиваю- всё восстанавливается. WI-FI пропадает- всё работает от местных выключателей. До этого брал блоки и ссылку на библиотеку из шапки этой темы- больше одного канала не работало нормально. Проэкт вылаживаю, может кому пригодится. В чём проблема- либо блоки либо библиотека 100%, не стал эксперементировать. Осталось решить проблему передёргивания реле при старте ESP, но это уже другая тема. Автору спасибо за блоки.
Вложения
MQTT.flp
(555.8 КБ) 107 скачиваний

Аватара пользователя
Golan
Капитан
Сообщения: 827
Зарегистрирован: 26.11.2017{, 23:18}
Репутация: 77
Откуда: Деревня, 98 домов в Мордовии
Имя: Владимир
Контактная информация:

MQTT для Arduino, ESP8266, ESP32

#117

Сообщение Golan » 24.12.2018{, 11:46}

Как по мне, попробовать убрать с блока вот эти настройки, у Андрея в блоках этого нет. Так для пробы и погонять
СпойлерПоказать
1.jpg
Отправлено спустя 2 минуты 5 секунд:
slon-genia писал(а):
24.12.2018{, 10:34}
Осталось решить проблему передёргивания реле при старте ESP
У меня вот так не передергивается, хотя изначально тоже прыгали.
СпойлерПоказать
2.jpg
2.jpg (30.41 КБ) 881 просмотр
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#118

Сообщение User8 » 24.12.2018{, 16:02}

CraCk, Golan, slon-genia, переделал все под другую библиотеку: https://github.com/256dpi/arduino-mqtt
Нужно тестировать. Зависания пропали, если разорвать соединение с брокером принудительно. qos 1 2 на блоке sub так и не смог толком проверить, у меня не работает, по идее после подключения если были недоставленные данные, то должны дойти сообщения, но вроде как не доходят.
Вложения
MQTT_ESP_Main_5_0_(CODE).ubi
(287.11 КБ) 98 скачиваний
MQTT_ESP_Sub_5_0_(CODE).ubi
(17.96 КБ) 89 скачиваний
MQTT_ESP_Pub_5_0_(CODE).ubi
(30.97 КБ) 84 скачивания
Последний раз редактировалось User8 24.12.2018{, 16:17}, всего редактировалось 2 раза.

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

MQTT для Arduino, ESP8266, ESP32

#119

Сообщение pipapsix » 24.12.2018{, 16:07}

User8,
Здрасти)
А я?
а мне?
с выходами на установку.

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

MQTT для Arduino, ESP8266, ESP32

#120

Сообщение User8 » 24.12.2018{, 16:16}

pipapsix, вот :smile225:
Вложения
MQTT_ESP_Main_5_0_External_Input_(CODE).ubi
(337.56 КБ) 76 скачиваний
Последний раз редактировалось User8 24.12.2018{, 20:52}, всего редактировалось 2 раза.

Ответить

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