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;
}
浙公网安备 33010602011771号