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

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

MQTT для Arduino, ESP8266, ESP32

#141

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

Golan, arduino-mqtt должна быть папка

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

MQTT для Arduino, ESP8266, ESP32

#142

Сообщение Golan » 24.12.2018{, 22:39}

User8 писал(а):
24.12.2018{, 22:35}
arduino-mqtt должна быть папка
Библиотека, Вы имеете ввиду?
Вот в скетче что.
СпойлерПоказать
1.jpg
Все есть у меня
СпойлерПоказать
1.jpg
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#143

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

Golan, значит он пытается с помощью другой библиотеки компилировать, надо удалять другие

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

MQTT для Arduino, ESP8266, ESP32

#144

Сообщение Golan » 24.12.2018{, 22:47}

Ща гляну что он там ищет.

Отправлено спустя 4 минуты 44 секунды:
Иху мать, Вы правы, он именно на "левую" библу переключался.
Спасибо большое, за путь истиный
Добро не ценится в современном мире, люди от него наглеют!

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

MQTT для Arduino, ESP8266, ESP32

#145

Сообщение CraCk » 24.12.2018{, 23:23}

User8 писал(а):
24.12.2018{, 22:18}
CraCk, у каждого клиента должны быть эти настройки

Отправлено спустя 10 минут 50 секунд:
На брокере так же должен быть выставлен cleansession false
Но как эти настройки могут влиять на публикацию? ЕСП должен отправить сообщение и ему там не интересно как подписчики настроены.
Последний раз редактировалось CraCk 24.12.2018{, 23:32}, всего редактировалось 1 раз.

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

MQTT для Arduino, ESP8266, ESP32

#146

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

CraCk, как не важно, если на принимающей стороне стоит cleansession true или на брокере стоит тоже true, то он никаких сообщений с qos не получит

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

MQTT для Arduino, ESP8266, ESP32

#147

Сообщение CraCk » 24.12.2018{, 23:42}

User8 писал(а):
24.12.2018{, 23:27}
CraCk, как не важно, если на принимающей стороне стоит cleansession true или на брокере стоит тоже true, то он никаких сообщений с qos не получит
Но на прошивке esp-link работало и ненужно было никаких cleansession. Завтра буду пробовать снова прошивать esp-link. Может проблема в брокере.

Отправлено спустя 4 часа 23 минуты 40 секунд:
Что то еще такое нашел https://github.com/marvinroger/async-mqtt-client

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

MQTT для Arduino, ESP8266, ESP32

#148

Сообщение pipapsix » 25.12.2018{, 09:28}

User8,
Вот теперь все ОК. Все сохраняется.Зависаний со вчера не было.
Сейчас попробую еще всякой ерунды добавлю в проект, и посмотрим.

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

MQTT для Arduino, ESP8266, ESP32

#149

Сообщение CraCk » 25.12.2018{, 10:16}

pipapsix писал(а):
25.12.2018{, 09:28}
User8,
Вот теперь все ОК. Все сохраняется.Зависаний со вчера не было.
Сейчас попробую еще всякой ерунды добавлю в проект, и посмотрим.
Какой брокер используете? Можете протестироватьу себя qos=1 ?

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

MQTT для Arduino, ESP8266, ESP32

#150

Сообщение pipapsix » 25.12.2018{, 10:23}

CraCk писал(а):
25.12.2018{, 10:16}
Какой брокер используете? Можете протестироватьу себя qos=1 ?
пока - cloudmqtt.com
напишите что нужно сделать., проверю., мне это не требовалось/,я не углублялся.

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

MQTT для Arduino, ESP8266, ESP32

#151

Сообщение User8 » 25.12.2018{, 15:47}

CraCk писал(а):
25.12.2018{, 04:06}
Что то еще такое нашел https://github.com/marvinroger/async-mqtt-client
Да эта даже лучше, т.к. асинхронно работает, но нужно разбираться. На днях заберу esp горстку и нормально протестирую все.

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

MQTT для Arduino, ESP8266, ESP32

#152

Сообщение CraCk » 25.12.2018{, 17:42}

Еще протестировал с облачным брокером cloudmqtt.com
На сервере по сессиям только такая настройка:
СпойлерПоказать
Снимок.JPG
Клиент есп8266 настроен так:
СпойлерПоказать
Снимок2.JPG
Клиент на ПК MQTTBox настроен так:
СпойлерПоказать
Снимок3.JPG
Подписка клиента на ПК MQTTBox настроена так:
СпойлерПоказать
Снимок4.JPG
Снимок4.JPG (16.18 КБ) 1055 просмотров
Сообщения из есп8266 на клиент на ПК приходят с qos=1
СпойлерПоказать
Снимок5.JPG
Но если разорвать связь между есп8266 и брокером cloudmqtt.com. И изменить на есп8266 стояние с true на false, а потом восстановить соединение то на ПК клиент ничего не приходит.
Я в небольшом замешательстве где же подвох :smile37:

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

MQTT для Arduino, ESP8266, ESP32

#153

Сообщение pipapsix » 30.12.2018{, 07:52}

Всем привет.
Сижу туплю.
Как сделать управление реле?
Чтобы оно включалось выключалось по времени и если я захотел через MQTT?
не понятно.flp
(408.8 КБ) 85 скачиваний

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

MQTT для Arduino, ESP8266, ESP32

#154

Сообщение Timoha » 30.12.2018{, 21:30}

pipapsix,
Попробуйте задействовать в вашей схеме часы реального времени. (включение/отключение реле по времени)

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

MQTT для Arduino, ESP8266, ESP32

#155

Сообщение SerOv » 30.12.2018{, 23:27}

Когда связь хорошая (блоки MQTT 4 версии) то все в majordomo работает и показания передаются.
СпойлерПоказать
mqtt1.jpg
но когда связь прерывется, то статус меняется с 1 на 0, а показания остаются. Последними которые пришли.
СпойлерПоказать
mqtt2.jpg
Почему показаний нет. А данные температуры и влажности не меняют свои значения на нулевые? Настройки одинаковые в мажордомо для всех трех страниц
СпойлерПоказать
тк1.jpg
СпойлерПоказать
st1.jpg
Почему так происходит?

Аватара пользователя
Kotafey
Лейтенант
Сообщения: 311
Зарегистрирован: 18.07.2018{, 15:03}
Репутация: 21
Откуда: Геленджик
Имя: Константин

MQTT для Arduino, ESP8266, ESP32

#156

Сообщение Kotafey » 30.12.2018{, 23:38}

SerOv писал(а):
30.12.2018{, 23:27}
Когда связь хорошая (блоки MQTT 4 версии) то все в majordomo работает и показания передаются.
СпойлерПоказать
mqtt1.jpg
но когда связь прерывется, то статус меняется с 1 на 0, а показания остаются. Последними которые пришли.
СпойлерПоказать
mqtt2.jpg
Почему показаний нет. А данные температуры и влажности не меняют свои значения на нулевые? Настройки одинаковые в мажордомо для всех трех страниц
СпойлерПоказать
тк1.jpg
СпойлерПоказать
st1.jpg
Почему так происходит?
Так и должно быть. Так работает брокер. Я к облачному сереверу mqtt давно не подключался. И вот подключился и пришли показания трехмесячной давности. Или я не об этом и вас не понял?

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

MQTT для Arduino, ESP8266, ESP32

#157

Сообщение SerOv » 30.12.2018{, 23:43}

проблема вся в том что. Данных то нет, а он считает что они вот такие. И продолжает нагревать. а по истине там уже лишнее.

Отправлено спустя 2 минуты 33 секунды:
Да и график нужен. там греет. а тут не меняются.

Аватара пользователя
Kotafey
Лейтенант
Сообщения: 311
Зарегистрирован: 18.07.2018{, 15:03}
Репутация: 21
Откуда: Геленджик
Имя: Константин

MQTT для Arduino, ESP8266, ESP32

#158

Сообщение Kotafey » 30.12.2018{, 23:51}

SerOv писал(а):
30.12.2018{, 23:45}
проблема вся в том что. Данных то нет, а он считает что они вот такие. И продолжает нагревать. а по истине там уже лишнее.

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

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

MQTT для Arduino, ESP8266, ESP32

#159

Сообщение SerOv » 30.12.2018{, 23:54}

мне нужно чтобы показания обнулялись. нуже график правдопободный в мажордомо.

Аватара пользователя
Kotafey
Лейтенант
Сообщения: 311
Зарегистрирован: 18.07.2018{, 15:03}
Репутация: 21
Откуда: Геленджик
Имя: Константин

MQTT для Arduino, ESP8266, ESP32

#160

Сообщение Kotafey » 30.12.2018{, 23:55}

SerOv писал(а):
30.12.2018{, 23:54}
мне нужно чтобы показания обнулялись. нуже график правдопободный.
Что мешает обнулить используя сигнал со статуса?

Ответить

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