If you do not understand this text, please use the English version:
https://github.com/kotyara12/reMqtt/blob/master/README_EN.md
Sorry for the machine translation into English.
MQTT клиент ESP32 и ESP-IDF (не будет работать в Arduino) с возможностью настройки до двух MQTT брокеров с автоматическими переключением между ними. Брокер может быть "локальным" (то есть доступным только в пределах локальной сети, к которой подключено ESP), либо "публичным" (то есть доступным из сети интернет). Это позволяет реализовать схему работы, когда в качестве основого MQTT брокера используется локальный сервер на роутере с мостом на внешний (либo брокер Home Assistant, например), а в качестве резервного - любой публичный. В этом случае, при потере доступа из локальной сети к интернет устройство продолжает успешно функционировать на локальном брокере, но мы теряем возможность внешнего управления извне. И наоборот, если по какой-либо причине происходит потеря доступа к основному брокеру, то устройство автоматически переключится на резервный сервер. Можно также указать в качестве основного и резервного брокра публичные сервера, просто повысив надежность системы. Либо использовать только один сервер, как обычно.
Библиотека основана на ESP-IDF библиотеке "mqtt_client.h", поэтому вряд ли будет работать на Arduino фреймворке. По сути, это просто "обертка" вокруг "mqtt_client.h" для более удобного использования и автоматического выбора сервера. Вам следует учесть, что данная библиотека интегрирована в удобную событийную систему, релизованную с помощью других библиотек reEvents и reStates. Полный список зависимостей от других библиотек смотрите ниже в разделе "Зависимости". Если вы не планируете использовать весь набор библиотек, представленных в моем профиле, вам стоит создать форк и изменить код по своему желанию.
Функция mqttTaskStart
создает и, возможно, запускает задачу MQTT-клиента. Параметр createSuspended
позволяет создать задачу в приостановленном виде, чтобы запустить её позже по событию подключения к WiFi сети и (или) получению доступа в интернет. В случае успеха функция вернет true.
bool mqttTaskStart(bool createSuspended);
Данная функция может быть вызвана перед перезагрузкой устройства. В случае успеха функция вернет true.
bool mqttTaskStop();
bool mqttTaskSuspend();
bool mqttTaskResume();
Данные функции могут быть использованы для приостановки задачи на время, когда устройство отключилось от WiFi сети или потерян доступ к серверу. В случае успеха функция вернет true.
Функция mqttEventHandlerRegister
выполняет регистрацию обработчиков событий модуля в основном цикле событий reEvents.
bool mqttEventHandlerRegister();
С помощью этого клиент MQTT будет автоматически запущен или остановлен по событиям подключения к WiFi сети. Кроме того, задача MQTT клиента сама отправляет события подключения или отключения к MQTT брокеру для оповещения других подсистем прошивки. В случае успеха функция вернет true.
С помощью функции mqttIsConnected
можно узнать, подключен ли клиент к брокеру в данный момент или нет.
bool mqttIsConnected();
Подписка на топик topic
с заданным QoS
. В случае успеха функция вернет true.
bool mqttSubscribe(const char *topic, int qos);
Отмена подписки на ранее подписанный топик topic
. В случае успеха функция вернет true.
bool mqttUnsubscribe(const char *topic);
Публикация сообщения payload
в заданный топик topic
с заданными параметрами QoS
и retained
.
Если установлен бит forced
, то попытка отправки сообщения будет предпринята немедленно в контексте вызывающей задачи; иначе сообщение будет поставлено в очередь и отправлено позже в контексте задачи MQTT клиента.
При free_topic = true
переданная строка char *topic
будет удалена из кучи после отправки.
Аналогично, при free_payload = true
переданная строка char *payload
будет удалена из кучи после отправки.
bool mqttPublish(char *topic, char *payload, int qos, bool retained, bool forced, bool free_topic, bool free_payload);
- esp_event_base.h (ESP-IDF)
- mqtt_client.h (ESP-IDF)
- project_config.h (настройки проекта)
- https://github.com/kotyara12/rLog
- https://github.com/kotyara12/rStrings
- https://github.com/kotyara12/reEsp32
- https://github.com/kotyara12/reEvents
- https://github.com/kotyara12/reStates
- https://github.com/kotyara12/reWifi
- https://github.com/kotyara12/reNvs
Данные замечания относятся к моим библиотекам, размещенным на ресурсе https://github.com/kotyara12?tab=repositories.
- библиотеки, название которых начинается с префикса re, предназначены только для ESP32 и ESP-IDF (FreeRTOS)
- библиотеки, название которых начинается с префикса ra, предназначены только для ARDUINO
- библиотеки, название которых начинается с префикса r, могут быть использованы и для ARDUINO, и для ESP-IDF
Так как я в настроящее время разрабатываю программы в основном для ESP-IDF, основная часть моих библиотек предназначена только для этого фреймворка. Но Вы можете портировать их для другой системы, взяв за основу.