20260115:初步实现了MQTT协议发布指令的功能;完善了部分任务之间的运行逻辑。
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user