20260115:初步实现了MQTT协议发布指令的功能;完善了部分任务之间的运行逻辑。

This commit is contained in:
2026-01-15 16:50:36 +08:00
parent ce68cc42b3
commit 7708a22a6e
18 changed files with 8241 additions and 725 deletions

View File

@@ -1,28 +1,23 @@
#include "stm32f10x.h" // Device header
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "Delay.h"
#include "USART.h"
#include "LED.h"
#include "ESP8266.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.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 xTaskStateLedHdlr;
TaskHandle_t xTaskBufferRxHdlr;
TaskHandle_t xTaskWorkStatusLedHdlr;
TaskHandle_t xTaskWifiJoinApHdlr;
TaskHandle_t xTaskWifiMqttInitHdlr;
TaskHandle_t xTaskWifiNwkInitHdlr;
TaskHandle_t xTaskMqttPublishTestHdlr;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
QueueHandle_t xQueueUsart1IrqHdlr;
QueueHandle_t xQueueUsart2IrqHdlr;
QueueHandle_t xQueueUsart3IrqHdlr;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SemaphoreHandle_t xSemWifiRetOkHdlr;
SemaphoreHandle_t xSemWifiRetErrHdlr;
/**
* @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>
@@ -30,7 +25,7 @@ SemaphoreHandle_t xSemWifiRetErrHdlr;
* @retval None
*/
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void vTaskStateLed(void *pvParameters)
void vTaskWorkStatusLed(void *pvParameters)
{
while(1)
{
@@ -42,70 +37,108 @@ void vTaskStateLed(void *pvParameters)
}
/**
* @brief <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD><EFBFBD>
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>WiFi<46>ȵ㡣
* @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 vTaskWifiJoinAp(void *pvParameters)
{
while (1)
{
macESP8266_CH_ENABLE();
vEsp8266AtTest();
bEsp8266NetModeChoose(STA);
while(!bEsp8266JoinAp(ESP8266_APSSID, ESP8266_APPWD));
vUsartPrintf(USART1, "Wifi Join To AP Success\r\n");
vTaskDelete(NULL);
}
}
/**
* @brief <20><>ʼ<EFBFBD><CABC>MQTTЭ<54><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @brief <20><>ʼ<EFBFBD><EFBFBD>Wi-Fiģ<EFBFBD><EFBFBD><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
*/
void vTaskWifiMqttInit(void *pvParameters)
void vTaskWifiNetWorkInit(void *pvParameters)
{
while (1)
{
// if (*ucMqttMode == ALIYUN)
// {
// /* code */
// if (bEsp8266MqttInit(ESP8266_ALIYUN_MQTT_USERNAME, ESP8266_ALIYUN_MQTT_PASSWORD, ESP8266_ALIYUN_MQTT_CLIENT_ID,
// ESP8266_ALIYUN_MQTT_IP, ESP8266_ALIYUN_MQTT_PORT, ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC) == true)
// {
// /* code */
// vUsartPrintf(USART1, "MQTT Init Success\r\n");
// vTaskDelete(NULL);
// }
// }
// else if (*ucMqttMode == EMQX)
// {
// /* code */
// if (bEsp8266MqttInit(ESP8266_MQTT_USERNAME, ESP8266_MQTT_PASSWORD, ESP8266_MQTT_CLIENT_ID,
// ESP8266_MQTT_SERVER_IP, ESP8266_MQTT_SERVER_PORT, NULL) == true)
// {
// /* code */
// vUsartPrintf(USART1, "MQTT Init Success\r\n");
// vTaskDelete(NULL);
// }
// }
if (bEsp8266MqttInit(ESP8266_ALIYUN_MQTT_USERNAME, ESP8266_ALIYUN_MQTT_PASSWORD, ESP8266_ALIYUN_MQTT_CLIENT_ID,
ESP8266_ALIYUN_MQTT_IP, ESP8266_ALIYUN_MQTT_PORT, ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC) == true)
vEsp8266GpioConfig();
vEsp8266AtTest();
if (bEsp8266NetModeChoose(STA) == pdTRUE)
{
vUsartSendString(USART1, "Set ESP8266 Net Mode Successfully.\r\n");
} else
{
/* code */
vUsartPrintf(USART1, "MQTT Init Success\r\n");
vTaskDelete(NULL);
vUsartSendString(USART1, "Set ESP8266 Net Mode Failed.\r\n");
continue;
}
if (bEsp8266JoinAp(ESP8266_APSSID, ESP8266_APPWD) == pdTRUE)
{
vUsartSendString(USART1, "Wifi Join To AP Successfully.\r\n");
} else
{
/* code */
vUsartSendString(USART1, "Wifi Join To AP Failed.\r\n");
continue;
}
// if (bEsp8266MqttInit(ESP8266_MQTT_USERNAME, ESP8266_MQTT_PASSWORD, ESP8266_MQTT_CLIENT_ID,
// ESP8266_MQTT_SERVER_IP, ESP8266_MQTT_SERVER_PORT, NULL) == true)
// {
// /* code */
// vUsartPrintf(USART1, "MQTT Init Success\r\n");
// vTaskDelete(NULL);
// }
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
if (bEsp8266MqttInit(ESP8266_ALIYUN_MQTT_USERNAME, ESP8266_ALIYUN_MQTT_PASSWORD, ESP8266_ALIYUN_MQTT_CLIENTID,
ESP8266_ALIYUN_MQTT_IP, ESP8266_ALIYUN_MQTT_PORT, ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC) == pdTRUE)
{
/* code */
vUsartSendString(USART1, "Aliyun MQTT Init Successfully.\r\n");
/* ֪ͨMQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
vTaskDelete(NULL);
} else
{
/* code */
vUsartSendString(USART1, "Aliyun MQTT Init Failed.\r\n");
continue;
}
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
if (bEsp8266MqttInit(ESP8266_EMQX_MQTT_USERNAME, ESP8266_EMQX_MQTT_PASSWORD, ESP8266_EMQX_MQTT_CLIENTID,
ESP8266_EMQX_MQTT_SERVER_IP, ESP8266_EMQX_MQTT_SERVER_PORT, ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC) == pdTRUE)
{
/* code */
vUsartPrintf(USART1, "EMQX MQTT Init Successfully.\r\n");
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
vTaskDelete(NULL);
} else
{
/* code */
vUsartSendString(USART1, "EMQX MQTT Init Failed.\r\n");
continue;
}
#endif
}
}
/**
* @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)
{
/* <20><><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> */
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
char cCmd[256] = {0};
while (1)
{
/* code */
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
const char* pcMsg = "test";
sprintf(cCmd, "AT+MQTTPUB=0,\"%s\",\"%s\",1,0",
ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC, pcMsg);
if (bEsp8266Command(cCmd, "OK", NULL, 3000) == pdTRUE)
{
vUsartSendString(USART1, "Aliyun MQTT Publish Successfully.\r\n");
} else
{
/* code */
vUsartSendString(USART1, "Aliyun MQTT Publish Failed.\r\n");
}
vTaskDelay(500);
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
const char* pcMsg = "test";
sprintf(cCmd, "AT+MQTTPUB=0,\"%s\",\"%s\",0,0", ESP8266_EMQX_MQTT_PUBLISH_TOPIC, pcMsg);
if (bEsp8266Command(cCmd, "OK", NULL, 3000) == pdTRUE)
{
vUsartSendString(USART1, "EMQX MQTT Publish Successfully.\r\n");
} else
{
/* code */
vUsartSendString(USART1, "EMQX MQTT Publish Failed.\r\n");
}
vTaskDelay(500);
#endif
}
}
@@ -118,26 +151,26 @@ void vTaskWifiMqttInit(void *pvParameters)
void vCreateTasksList(void)
{
xTaskCreate(
(TaskFunction_t ) vTaskStateLed,
(TaskFunction_t ) vTaskWorkStatusLed,
(char * ) "TaskName_StateLed",
(configSTACK_DEPTH_TYPE) 256,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskStateLedHdlr);
(TaskHandle_t * ) &xTaskWorkStatusLedHdlr);
xTaskCreate(
(TaskFunction_t ) vTaskWifiJoinAp,
(char * ) "TaskName_WifiConnectToAP",
(configSTACK_DEPTH_TYPE) 512,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskWifiJoinApHdlr);
xTaskCreate(
(TaskFunction_t ) vTaskWifiMqttInit,
(TaskFunction_t ) vTaskWifiNetWorkInit,
(char * ) "TaskName_WifiInitMQTTProtocol",
(configSTACK_DEPTH_TYPE) 512,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskWifiMqttInitHdlr);
(TaskHandle_t * ) &xTaskWifiNwkInitHdlr);
xTaskCreate(
(TaskFunction_t ) vTaskMqttPublishTest,
(char * ) "TaskName_MqttPublishTest",
(configSTACK_DEPTH_TYPE) 512,
(void * ) NULL,
(UBaseType_t ) 2,
(TaskHandle_t * ) &xTaskMqttPublishTestHdlr);
}
/**
@@ -174,8 +207,6 @@ void vCreateQueuesList(void)
*/
void vCreateSemaphoresList(void)
{
xSemWifiRetOkHdlr = xSemaphoreCreateBinary();
xSemWifiRetErrHdlr = xSemaphoreCreateBinary();
}
/**