MQTT 客户端

mqtt.h

#ifndef __MQTT_H
#define __MQTT_H

#include "mqtt_client.h"
#include "esp_log.h"

#define MQTT_SERVER_URI     "mqtt://192.168.4.2:1883"
#define MQTT_LED_TOPIC      "led/rgb"

void mqtt_init(void);
void mqtt_publish(const char* data);
bool mqtt_is_connected(void);

#endif

mqtt.c

#include "mqtt.h"

static const char *TAG = "MQTT";

static esp_mqtt_client_handle_t client;
static bool connected_flag = false;

/**
 * @brief 事件处理
 */
static void mqtt_event_handler(void* arg, esp_event_base_t base, int32_t event_id, void* event_data)
{
    esp_mqtt_event_id_t evtid = (esp_mqtt_event_id_t)event_id;
    if (evtid == MQTT_EVENT_CONNECTED)
    {
        ESP_LOGI(TAG, "MQTT connected");
        connected_flag = true;
    }
    else if (evtid == MQTT_EVENT_DISCONNECTED)
    {
        ESP_LOGI(TAG, "MQTT disconnected");
        connected_flag = false;
    }
}

/**
 * @brief 发布消息
 */
void mqtt_publish(const char* data)
{
    esp_mqtt_client_publish(client, MQTT_LED_TOPIC, data, 0, 1, 0);
}

/**
 * @brief 初始化
 */
void mqtt_init(void)
{
    esp_mqtt_client_config_t mqtt_client_config = {
        .broker = {
            .address = {
                .uri = MQTT_SERVER_URI,
            },
        }
    };

    client = esp_mqtt_client_init(&mqtt_client_config);
    esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
    esp_mqtt_client_start(client);
}

/**
 * @brief 是否连接成功
 */
bool mqtt_is_connected(void)
{
    return connected_flag;
}
posted on 2025-09-27 14:42  星辰河岳  阅读(10)  评论(0)    收藏  举报