11#include "esp_crt_bundle.h"
14#include "mqtt_client.h"
16static const char *
TAG =
"mqtt_app";
19#define MQTT_BROKER_URI "mqtts://microtec-lab.ru:8883"
22#define MQTT_USERNAME "ozlocks_mqtt"
23#define MQTT_PASSWORD "Tr0cK's_57$Y74"
26#define MQTT_CLIENT_ID_PREFIX "ozl-mb"
38 esp_read_mac(mac, ESP_MAC_ETH);
41 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
57 int32_t event_id,
void *event_data)
59 esp_mqtt_event_handle_t
event = event_data;
62 switch ((esp_mqtt_event_id_t)event_id) {
63 case MQTT_EVENT_CONNECTED:
65 ESP_LOGI(
TAG,
"Connected to broker");
68 case MQTT_EVENT_DISCONNECTED:
70 ESP_LOGI(
TAG,
"Disconnected from broker");
73 case MQTT_EVENT_PUBLISHED:
74 ESP_LOGD(
TAG,
"Message published, msg_id=%d", event->msg_id);
77 case MQTT_EVENT_ERROR:
78 ESP_LOGE(
TAG,
"MQTT error");
79 if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
80 ESP_LOGE(
TAG,
"Transport error: esp_tls=%d, tls_stack=%d, sock_errno=%d",
81 event->error_handle->esp_tls_last_esp_err,
82 event->error_handle->esp_tls_stack_err,
83 event->error_handle->esp_transport_sock_errno);
95 ESP_LOGW(
TAG,
"MQTT client already running");
101 esp_mqtt_client_config_t mqtt_cfg = {
103 .broker.verification.crt_bundle_attach = esp_crt_bundle_attach,
110 ESP_RETURN_ON_FALSE(
s_mqtt_client, ESP_ERR_NO_MEM,
TAG,
"mqtt init failed");
112 ESP_RETURN_ON_ERROR(esp_mqtt_client_register_event(
s_mqtt_client, ESP_EVENT_ANY_ID,
114 TAG,
"event register failed");
116 ESP_RETURN_ON_ERROR(esp_mqtt_client_start(
s_mqtt_client),
TAG,
"mqtt start failed");
118 ESP_LOGI(
TAG,
"Connecting to %s, client_id=%s, user=%s",
129 ESP_LOGI(
TAG,
"Stopping MQTT client");
146 return ESP_ERR_INVALID_STATE;
149 int msg_id = esp_mqtt_client_publish(
s_mqtt_client, topic, data, 0, qos, retain);
154 ESP_LOGI(
TAG,
"Published to %s: %s", topic, data);
static void build_client_id(void)
Формирует Client ID вида wt32-eth02-AABBCCDDEEFF из MAC Ethernet.
const char * mqtt_app_get_client_id(void)
Возвращает Client ID устройства (префикс + MAC Ethernet).
#define MQTT_BROKER_URI
URI облачного MQTT-брокера
esp_err_t mqtt_app_start(void)
Запускает MQTT-клиент и подключается к брокеру.
static char s_client_id[24]
esp_err_t mqtt_app_publish(const char *topic, const char *data, int qos, int retain)
Публикует сообщение в MQTT, если клиент подключён.
esp_err_t mqtt_app_stop(void)
Останавливает MQTT-клиент и освобождает ресурсы.
#define MQTT_CLIENT_ID_PREFIX
Префикс Client ID; суффикс — MAC Ethernet (уникален для каждого устройства)
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
Обработчик событий MQTT (подключение, ошибки, публикация).
bool mqtt_app_is_connected(void)
Проверяет, установлено ли соединение с MQTT-брокером.
#define MQTT_USERNAME
Учётные данные брокера
static bool s_mqtt_connected
static esp_mqtt_client_handle_t s_mqtt_client
Публичный интерфейс MQTT-клиента.