20260201:完善MQTT协议下发布消息与解析订阅消息函数

This commit is contained in:
2026-02-01 17:04:09 +08:00
parent dd946595c4
commit a9a2674db9
17 changed files with 385 additions and 4285 deletions

View File

@@ -6,12 +6,14 @@
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "App_MQTT.h"
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ<EFBFBD><D3A6> */
TaskHandle_t xTaskWorkStatusLedHdlr;
TaskHandle_t xTaskWifiJoinApHdlr;
TaskHandle_t xTaskWifiNwkInitHdlr;
TaskHandle_t xTaskMqttPublishTestHdlr;
TaskHandle_t xTaskMqttPublishHdlr;
TaskHandle_t xTaskMqttSubscribeHdlr;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
QueueHandle_t xQueueUsart1IrqHdlr;
@@ -19,12 +21,11 @@ QueueHandle_t xQueueUsart2IrqHdlr;
QueueHandle_t xQueueUsart3IrqHdlr;
/**
* @brief ״ָ̬ʾLED<45><44><EFBFBD><EFBFBD>
* @brief ״ָ̬ʾLED<45><44><EFBFBD><EFBFBD>
* @note ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PC13<31><33><EFBFBD>ŵ<EFBFBD>LED<45>ƣ<EFBFBD>ʵ<EFBFBD><CAB5>ϵͳ״̬<D7B4><CCAC>ָʾ<D6B8><CABE><EFBFBD>ܡ<EFBFBD>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void vTaskWorkStatusLed(void *pvParameters)
{
while(1)
@@ -37,7 +38,7 @@ void vTaskWorkStatusLed(void *pvParameters)
}
/**
* @brief <20><>ʼ<EFBFBD><CABC>Wi-Fiģ<69><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief <20><>ʼ<EFBFBD><CABC>Wi-Fiģ<69><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>MQTTЭ<54><D0AD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
@@ -73,7 +74,8 @@ void vTaskWifiNetWorkInit(void *pvParameters)
/* code */
vUsartSendString(USART1, "Aliyun MQTT Init Successfully.\r\n");
/* ֪ͨMQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
xTaskNotifyGive(xTaskMqttPublishHdlr);
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
vTaskDelete(NULL);
} else
{
@@ -87,7 +89,8 @@ void vTaskWifiNetWorkInit(void *pvParameters)
{
/* code */
vUsartPrintf(USART1, "EMQX MQTT Init Successfully.\r\n");
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
xTaskNotifyGive(xTaskMqttPublishHdlr);
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
vTaskDelete(NULL);
} else
{
@@ -100,54 +103,86 @@ void vTaskWifiNetWorkInit(void *pvParameters)
}
/**
* @brief MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
*/
void vTaskMqttPublishTest(void *pvParameters)
void vTaskMqttPublish(void *pvParameters)
{
/* <20><><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> */
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
char pcCmd[256] = {0};
char *pcJsonMsg = "{\"temperature\":23,\"humidity\":60}";
while (1)
{
/* code */
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
uint8_t ucLen = strlen(pcJsonMsg);
snprintf(pcCmd, sizeof(pcCmd), "AT+MQTTPUBRAW=0,\"%s\",%d,1,0",
ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC, ucLen);
if (bEsp8266Command(pcCmd, "OK", ">", 3000) == pdTRUE &&
bEsp8266Command(pcJsonMsg, "OK", NULL, 3000) == pdTRUE)
while (bMqttPublish(ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
{
/* code */
vUsartSendString(USART1, "Aliyun MQTT Publish Successfully.\r\n");
} else
{
/* code */
vUsartSendString(USART1, "Aliyun MQTT Publish Failed.\r\n");
vUsartSendString(USART1, "MQTT Publish Successfully.\r\n");
}
vUsartSendString(USART1, "MQTT Publish Failed.\r\n");
vTaskDelay(2000);
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
uint8_t ucLen = strlen(pcJsonMsg);
snprintf(pcCmd, sizeof(pcCmd), "AT+MQTTPUBRAW=0,\"%s\",%d,1,0",
ESP8266_EMQX_MQTT_PUBLISH_TOPIC, ucLen);
if (bEsp8266Command(pcCmd, "OK", ">", 3000) == pdTRUE &&
bEsp8266Command(pcJsonMsg, "OK", NULL, 3000) == pdTRUE)
{
vUsartSendString(USART1, "EMQX MQTT Publish Successfully.\r\n");
} else
while (bMqttPublish(ESP8266_EMQX_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
{
/* code */
vUsartSendString(USART1, "EMQX MQTT Publish Failed.\r\n");
vUsartSendString(USART1, "MQTT Publish Successfully.\r\n");
}
vTaskDelay(500);
vUsartSendString(USART1, "MQTT Publish Failed.\r\n");
vTaskDelay(2000);
#endif
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
* @brief MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note ͨ<><CDA8>ESP8266ģ<36><EFBFBD><E9B6A9>MQTT<54><54><EFBFBD><EFBFBD><E2B2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param *pvParameters <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD><D8B6>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ָ<EFBFBD><D6B8>
* @retval None
*/
void vTaskMqttSubscribe(void *pvParameters)
{
while (1)
{
/* code */
if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_LED_ON)
{
/* code */
vUsartPrintf(USART1, "Lights on\r\n");
}
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_LED_OFF)
{
/* code */
vUsartPrintf(USART1, "Lights off\r\n");
}
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_FAN_ON)
{
/* code */
vUsartPrintf(USART1, "Fan on\r\n");
}
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_FAN_OFF)
{
/* code */
vUsartPrintf(USART1, "Fan off\r\n");
}
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_HUMIDIFIER_ON)
{
/* code */
vUsartPrintf(USART1, "Humidifier on\r\n");
}
else if (xMqttCmdParse(ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == MQTT_CMD_HUMIDIFIER_OFF)
{
/* code */
vUsartPrintf(USART1, "Humidifier off\r\n");
}
vTaskDelay(1000);
}
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>񣬲<EFBFBD>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>Ķ<EFBFBD>ջ<EFBFBD><D5BB>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
* @param None
* @retval None
@@ -169,16 +204,23 @@ void vCreateTasksList(void)
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskWifiNwkInitHdlr);
xTaskCreate(
(TaskFunction_t ) vTaskMqttPublishTest,
(TaskFunction_t ) vTaskMqttPublish,
(char * ) "TaskName_MqttPublishTest",
(configSTACK_DEPTH_TYPE) 512,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskMqttPublishTestHdlr);
(TaskHandle_t * ) &xTaskMqttPublishHdlr);
xTaskCreate(
(TaskFunction_t ) vTaskMqttSubscribe,
(char * ) "TaskName_MqttSubscribe",
(configSTACK_DEPTH_TYPE) 512,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskMqttSubscribeHdlr);
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>б<EFBFBD>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>б<EFBFBD>
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ķ<EFBFBD><C4B6>У<EFBFBD><D0A3><EFBFBD>Ϊÿ<CEAA><C3BF><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ij<EFBFBD><C4B3>Ⱥ<EFBFBD><C8BA><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1>
* @param None
* @retval None
@@ -204,7 +246,7 @@ void vCreateQueuesList(void)
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>б<EFBFBD>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>б<EFBFBD>
* @note <20>ڴ˺<DAB4><CBBA><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
* @param None
* @retval None
@@ -214,7 +256,7 @@ void vCreateSemaphoresList(void)
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <20><>ʼ<EFBFBD><CABC>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񡢶<EFBFBD><F1A1A2B6>к<EFBFBD><D0BA>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param None
* @retval int