Страница 4 из 32

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

Добавлено: 08.09.2018{, 14:04}
User8
Подробнее про 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 для Arduino, ESP8266, ESP32

Добавлено: 14.12.2018{, 21:42}
Авиакот
User8 писал(а):
14.12.2018{, 21:03}
Авиакот, в коде все в порядке, вы единственный у кого не работает, у меня на 4.2 компилируется.
Пробовал на разных компах, на одном ХР, на другом десятка, результат одинаковый: на 4.0 все хорошо, на 4.2 ошибка. Вот я и хочу понять, почему у меня одного так.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 14.12.2018{, 21:57}
Dev1
User8 писал(а):
14.12.2018{, 21:33}
Dev1, он сыпет эти ошибки т.к. пытается скомпилировать со стандартной библиотекой, постоянно автоматом тянет ее из репозитория библиотек. С той библиотекой что в первом посте по ссылке на гитхаб, все компилируется.
Проблема этой программы в том что в комплекте идет старая версия IDE, с какими то доработками, костылями. Такого не должно быть, тем более каких то библиотек. Версия программы должна соответствовать какой то версии IDE, по хорошему под последнюю. И IDE и библиотеки должны ставится как положено и в соответствующие директории. А так постоянно будет бардак с версиями библиотек, которые и в программе и отдельно поставленные(в документы).

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 09:58}
lazd
Добрый день! Имею следующую проблему: При пропадании доступа к глобальной сети, программа зависает на main блоке MQTT. При возобновлении доступа продолжает работу. Это ни есть хорошо!!! Все процессы замирают... Как обойти это?

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 10:02}
User8
lazd, увеличьте время попытки переподключения, по умолчанию стояло 60000мс.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 10:13}
lazd
Увы! Это не оказывает ни какого воздействия. Получается, что нет интернета - прога стоит, есть интернет - работает. По моему мнению ей должно быть все равно есть интернет или нет. Просто не будет доступен сервер MQTT. Получается же, что не работает ничего из других важных задач.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 10:50}
User8
lazd, щас проверил на esp, светодиодом мигает когда есть коннект и мигает если нет коннекта, цикл не останавливается. Во время попытки подключения только идет остановка цикла секунд на 5-8.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 12:00}
lazd
User8, спасибо! Можно попросить Ваш проект на проверку у себя?

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 12:12}
User8
lazd, весь проект это включенный симетричный мультивибратор и его выход подключен на GPIO2. Можно на выход mqttConnected подключить 2 мультивибратора, когда нет коннекта быстрее мигает, а когда есть медленнее мигает и их выход на GPIO2(встроенный светодиод в esp).

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 12:54}
Авиакот
Dev1 писал(а):
14.12.2018{, 21:57}
User8 писал(а):
14.12.2018{, 21:33}
Dev1, он сыпет эти ошибки т.к. пытается скомпилировать со стандартной библиотекой, постоянно автоматом тянет ее из репозитория библиотек. С той библиотекой что в первом посте по ссылке на гитхаб, все компилируется.
Проблема этой программы в том что в комплекте идет старая версия IDE, с какими то доработками, костылями. Такого не должно быть, тем более каких то библиотек. Версия программы должна соответствовать какой то версии IDE, по хорошему под последнюю. И IDE и библиотеки должны ставится как положено и в соответствующие директории. А так постоянно будет бардак с версиями библиотек, которые и в программе и отдельно поставленные(в документы).
Действительно, проблема была в библиотеках, зря я на версию 4.2 наговаривал...

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 14:19}
lazd
Уважаемый User8, набросал проект, как Вы и указали. НЕ РАБОТАЕТ! Может быть я где-то допускаю ошибку? Слишком уж все элементарно...
Висяк и при отрубании WiFi, и при пропадании коннекта с MQTT сервером. Прилагаю свой проект, проверьте , пожалуйста! Wemos D1 mini

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 15:58}
User8
lazd, вот мигает светодиод, хотя даже сервер не указан и wifi не мой.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 17:08}
lazd
User8, Спасибо! Гляну. Не могли бы Вы расшифровать эту строку:
if ((WiFi.status() == WL_CONNECTED && now - lastReconnectAttempt > reconnectionTime) || (WiFi.status() == WL_CONNECTED && tryStartConnect)) {

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 17:16}
User8
lazd, первое условие: если wifi подключен и количество миллисекунд прошло больше чем указано в настройках. Второе условие добавлено, чтобы делать попытку подключиться после старта esp, а не ждать 60сек для первой попытки.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 15.12.2018{, 23:58}
CraCk
Для параноиков можно добавить TLS/SSL шифрование?
https://habr.com/company/intel/blog/283440/
Пример на библиотеке Adafruit library

https://github.com/adafruit/Adafruit_MQ ... sp8266.ino
Еще немного инфы
https://internetofhomethings.com/homethings/?p=1820
https://www.hivemq.com/blog/mqtt-securi ... s-tls-ssl/

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 08:27}
User8
CraCk, вот что нашел: "ESP8266 is very slow to handle TLS/AES. You should use ESP32 for SSL. That's why you cannot find it - it's not worth trying." И так не совсем гладко все работает, а если еще и шифрование добавить...

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 12:07}
CraCk
User8 писал(а):
16.12.2018{, 08:27}
И так не совсем гладко все работает, а если еще и шифрование добавить..
Да согласен. Но если в будущем что то измениться в лучшую сторону по ESP8266 то не забудьте про SSL.

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 12:17}
Anydy
А если использовать ESP32?

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 12:27}
User8
Anydy, мне лень разбираться, кому очень нужно, разберется и добавит :D

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 12:47}
pipapsix
вот похвалиться хочу.


Датчик на улице.
передает на есп и Экран некстион дома.
С него на народный мониторинг.
Получает погоду с интернета, но что то большая разница.
Все работает.. пока..
бЛАГОДАРЮ ЗА ПОЩЬ.
img_20181216_132729.xpNwK.jpg

MQTT для Arduino, ESP8266, ESP32

Добавлено: 16.12.2018{, 12:52}
User8
pipapsix, молодец, в экранах щас большого смысла нет, когда у каждого есть телефон, можно на него все выводить, вот например: http://iotmanager.ru/ru/