1.mqtt任务里
初始化定义
// 🔧 队列:用于从 SHT30 任务传递温湿度数据到 MQTT 任务
static QueueHandle_t sensor_data_queue = NULL;
#define SENSOR_QUEUE_SIZE 5
定时器中断里
// 🔧 从队列接收数据(非阻塞)
if (xQueueReceive(sensor_data_queue, json_payload, 0) == pdTRUE) {
int msg_id = esp_mqtt_client_publish(mqtt_client, "zhuwo_temp", json_payload, 0, 0, 0);
if (msg_id >= 0) {
ESP_LOGI(TAG, "📤 Published from queue: %s (msg_id=%d)", json_payload, msg_id);
} else {
ESP_LOGW(TAG, "❌ Failed to publish: %s", json_payload);
}
} else {
ESP_LOGD(TAG, "⏸️ Queue empty, waiting for sensor data...");
}
在主程序里
// 🔧 创建传感器数据队列
if (sensor_data_queue == NULL) {
sensor_data_queue = xQueueCreate(SENSOR_QUEUE_SIZE, 128); // 队列大小5,每条消息128字节
if (sensor_data_queue == NULL) {
ESP_LOGE(TAG, "Failed to create sensor data queue");
} else {
ESP_LOGI(TAG, "✅ Sensor data queue created (size: %d)", SENSOR_QUEUE_SIZE);
}
}
2.SHT30任务里
主任务里
// 🔧 构建 JSON 数据并发送到 MQTT 队列
char json_payload[128];
int written = snprintf(json_payload, sizeof(json_payload),
"{\"temp\":%.2f,\"humi\":%.2f}",
temperature, humidity);
if (written > 0 && written < (int)sizeof(json_payload)) {
esp_err_t send_ret = mqtt_send_sensor_data(json_payload);
if (send_ret == ESP_OK) {
ESP_LOGI(TAG, "📤 Data sent to MQTT queue: %s", json_payload);
} else {
ESP_LOGW(TAG, "⚠️ Failed to send to queue: %s", json_payload);
}
}
/**
* @brief 发送传感器数据到 MQTT 队列
*/
esp_err_t mqtt_send_sensor_data(const char *json_payload)
{
if (sensor_data_queue == NULL) {
ESP_LOGE(TAG, "Sensor data queue not initialized");
return ESP_FAIL;
}
if (json_payload == NULL) {
ESP_LOGE(TAG, "Invalid json_payload");
return ESP_ERR_INVALID_ARG;
}
// 发送到队列(非阻塞)
if (xQueueSend(sensor_data_queue, json_payload, 0) != pdTRUE) {
ESP_LOGW(TAG, "⚠️ Sensor queue full, data dropped: %s", json_payload);
return ESP_FAIL;
}
ESP_LOGD(TAG, "✅ Sensor data queued: %s", json_payload);
return ESP_OK;
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END








暂无评论内容