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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -320,7 +320,7 @@
<Group>
<GroupName>User</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@@ -936,7 +936,7 @@
<Group>
<GroupName>System</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@@ -26,7 +26,7 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
@@ -34,13 +34,13 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART1, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; // <20>ж<EFBFBD>ͨ<EFBFBD><CDA8>
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5; // <20><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ڷ<EFBFBD>Χ<EFBFBD>ڿ<EFBFBD><DABF>Ե<EFBFBD><D4B5><EFBFBD>FreeRTOS<4F><53><EFBFBD>ԡ<EFBFBD>FromISR()<29><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>api<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 6; // <20><>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>FreeRTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ڷ<EFBFBD>Χ<EFBFBD>ڿ<EFBFBD><DABF>Ե<EFBFBD><D4B5><EFBFBD>FreeRTOS<4F><53><EFBFBD>ԡ<EFBFBD>FromISR()<29><><EFBFBD><EFBFBD>β<EFBFBD><CEB2>api<70><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
NVIC_Init(&NVIC_InitStructure); // ָ<><D6B8>NVIC_InitStructure<72>ĵ<EFBFBD>ַ
@@ -68,7 +68,8 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART2, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
@@ -103,8 +104,8 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART3, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); // ʹ<>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ж<EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // <20>ж<EFBFBD>ͨ<EFBFBD><CDA8>
@@ -172,7 +173,7 @@ void vUsartSendString(USART_TypeDef *xUsartId, char *pcString)
*/
void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
{
char cBuffer[100];
char cBuffer[1024];
va_list arg; // arg<72>Ƕ<EFBFBD><C7B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
va_start(arg, format); // <20><>formatλ<74>ÿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>arg<72><67><EFBFBD><EFBFBD>
vsprintf(cBuffer, format, arg); // <20><>װ<EFBFBD><D7B0>ʽҪ<CABD><D2AA>vsprintf<74><66><EFBFBD><EFBFBD>Ϊsprintfֻ<66>ܽ<EFBFBD><DCBD><EFBFBD>ֱ<EFBFBD><D6B1>д<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>format<61><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>arg<72><67>
@@ -216,19 +217,22 @@ void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
*/
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART1);
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
/* code */
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART1);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#endif
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 0)
#endif
}
/**
@@ -239,19 +243,22 @@ void USART1_IRQHandler(void)
*/
void USART2_IRQHandler(void)
{
if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART2);
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
#if (USE_RTOS == NONE && defined __ESP8266_SAMPLE_H__)
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART2);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#endif
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 0)
#endif
}
/**
@@ -262,17 +269,19 @@ void USART2_IRQHandler(void)
*/
void USART3_IRQHandler(void)
{
if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3);
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART3);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#endif
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
}
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 0)
#endif
}

View File

@@ -1,10 +1,11 @@
#ifndef __USART_H__
#define __USART_H__
#define USE_RTOS FREERTOS
/* <20>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>RTOS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>ϵͳ<CFB5><CDB3>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA>õ<EFBFBD><C3B5><EFBFBD>RTOS<4F><53><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNONE<4E><45> */
#define USE_RTOS FREERTOS
#define NONE 0
#define FREERTOS 1
#define OSAL 2
#define vUsart1IrqHandler USART1_IRQHandler
#define vEsp8266IrqHandler USART2_IRQHandler
#define vLoRaIrqHandler USART3_IRQHandler
@@ -22,9 +23,13 @@
#define USART3_GPIO_PIN_RX GPIO_Pin_11
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
#include "FreeRTOS.h"
#include "queue.h"
#define ENABLE_FREERTOS_API_QUEUE_USART1_IRQ 0
#define ENABLE_FREERTOS_API_QUEUE_USART2_IRQ 0
#define ENABLE_FREERTOS_API_QUEUE_USART3_IRQ 1
#endif
#include "stm32f10x.h" // Device header
@@ -32,13 +37,33 @@
#include <stdarg.h>
#include <string.h>
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
#if (ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
extern QueueHandle_t xQueueUsart1IrqHdlr;
#endif
#if (ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
extern QueueHandle_t xQueueUsart2IrqHdlr;
#endif
#if (ENABLE_FREERTOS_API_QUEUE_USART3_IRQ == 1)
extern QueueHandle_t xQueueUsart3IrqHdlr;
#endif
extern volatile uint8_t ucTcpClosedFlag;
#define BUFFER_MAX_LENGTH 1024 // <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
extern struct SerialFrame_t // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
{
char cSerialReceivedBuffer [ BUFFER_MAX_LENGTH ];
union
{
__IO uint16_t usInfoAll;
struct
{
__IO uint16_t usFrameLength :15; // 14:0
__IO uint16_t usFrameFinishFlag :1; // 15
} Bits_t;
};
} xSerialFrameRecord;
void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate);
void vUsartSendByte(USART_TypeDef *xUsartId, uint8_t ucByte);
void vUsartSendArray(USART_TypeDef *xUsartId, uint8_t *pucArray, uint16_t usLength);

View File

@@ -112,7 +112,7 @@ void vTaskDht11(void *pvParameters)
xQueueSend(xQueueHumiHdlr, &ucSendHumiData, pdMS_TO_TICKS(10));
}
while (1)
{
{
/* code */
if (vDht11ReadData(&xDHT11Data.ucTemp,&xDHT11Data.ucHumi) == 0)
{
@@ -137,6 +137,7 @@ void vTaskDht11(void *pvParameters)
*/
void vTaskLoRaToGatePkt(void *pvParameters)
{
char cBuffer[50];
uint8_t ucRecTempData = 0, ucRecHumiData = 0;
/* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ճɹ<D5B3> */
BaseType_t xRetvalQueueTemp, xRetvalQueueHumi;
@@ -158,6 +159,9 @@ void vTaskLoRaToGatePkt(void *pvParameters)
/* code */
vUsartSendArray(USART3, &ucRecTempData, 1);
vUsartSendArray(USART3, &ucRecHumiData, 1);
snprintf(cBuffer, sizeof(cBuffer), "Temp=%d, Humi=%d\r\n", ucRecTempData, ucRecHumiData);
vUsartSendString(USART1, cBuffer);
vTaskDelay(1000);
}
if (xSemaphoreTake(xSemLedOnHdlr, pdMS_TO_TICKS(10)) == pdTRUE)
{
@@ -301,7 +305,7 @@ void vCreateQueuesList(void)
if (xQueueTempHdlr == NULL || xQueueHumiHdlr == NULL || xQueueUsart3IrqHdlr == NULL)
{
/* code */
vUsartPrintf(USART3, "Queue Init Failed.\r\n");
vUsartPrintf(USART1, "Queue Init Failed.\r\n");
}
}
@@ -330,6 +334,7 @@ int main(void)
vFanRelayInit();
vDelayInit();
vPc13LedInit();
vUsartInit(USART1, 115200);
vUsartInit(USART3, 115200);
vCreateQueuesList();
vCreateSemaphoresList();

View File

@@ -0,0 +1,9 @@
#include "App_MQTT.h"
bool bMqttNormalSubscribe(char *pcTopic, char *pcMessage)
{
char cCmd[256] = {0};
snprintf(cCmd, sizeof(cCmd), "AT+MQTT_SUBSCRIBE=\"%s\",\"%s\"", pcTopic, pcMessage);
// Add logic to send the command and handle the response
return true;
}

View File

@@ -0,0 +1,20 @@
#ifndef __APP_MQTT_H__
#define __APP_MQTT_H__
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "ESP8266.h"
typedef enum
{
MQTT_MODE_NORMAL = 0,
MQTT_MODE_PROPERTY,
}eMqttMode_t;
bool bMqttSubMsgFormat(eMqttMode_t ucMode, char *pcReceivedMsg, char *pcTopic, char *pcMessage);
bool bMqttNormalSubscribe(char *pcTopic, char *pcMessage);
bool bMqttNormalPublish(char *pcTopic, char *pcMessage);
#endif /* __APP_MQTT_H__ */

View File

@@ -10,9 +10,9 @@ struct SerialFrame_t xSerialFrameRecord = { 0 };
* @param <20><>
* @retval <20><>
*/
static void vEsp8266GpioConfig ( void )
void vEsp8266GpioConfig ( void )
{
/*<2A><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>GPIO_InitTypeDef<65><66><EFBFBD>͵Ľṹ<C4BD><E1B9B9>*/
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>GPIO_InitTypeDef<EFBFBD><EFBFBD><EFBFBD>͵Ľṹ<EFBFBD><EFBFBD> */
GPIO_InitTypeDef GPIO_InitStructure;
/* <20><><EFBFBD><EFBFBD> CH_PD <20><><EFBFBD><EFBFBD>*/
RCC_APB2PeriphClockCmd ( macESP8266_CH_PD_CLK, ENABLE );
@@ -26,20 +26,6 @@ static void vEsp8266GpioConfig ( void )
GPIO_Init ( macESP8266_RST_PORT, & GPIO_InitStructure );
}
/**
* @brief vEsp8266Init
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param <20><>
* @retval <20><>
*/
void vEsp8266Init ( void )
{
vEsp8266GpioConfig ();
macESP8266_RST_HIGH_LEVEL();
macESP8266_CH_DISABLE();
}
/**
* @brief vEsp8266Rst
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ESP8266ģ<36><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>vEsp8266AtTest<73><74><EFBFBD>á<EFBFBD>
@@ -157,26 +143,26 @@ bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcM
{
char cCmd[512] = {0};
// 1. <20><><EFBFBD><EFBFBD>MQTT<54>û<EFBFBD><C3BB><EFBFBD>Ϣ
/* 1. <20><><EFBFBD><EFBFBD>MQTT<54>û<EFBFBD><C3BB><EFBFBD>Ϣ */
snprintf(cCmd, sizeof(cCmd), "AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"",
pcMqttUserName, pcMqttPassword);
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
return false;
// 2. <20><><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD>ID
/* 2. <20><><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD>ID */
memset(cCmd, 0, sizeof(cCmd));
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCLIENTID=0,\"%s\"", pcMqttClientId);
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
return false;
// 3. <20><><EFBFBD>ӵ<EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* 3. <20><><EFBFBD>ӵ<EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
memset(cCmd, 0, sizeof(cCmd));
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCONN=0,\"%s\",%u,1",
pcMqttServerIp, usMqttServerPort);
if (!bEsp8266Command(cCmd, "OK", NULL, 5000))
if (!bEsp8266Command(cCmd, "OK", NULL, 5000) && !bEsp8266Command(cCmd, "+MQTTCONN", NULL, 5000))
return false;
// 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
memset(cCmd, 0, sizeof(cCmd));
snprintf(cCmd, sizeof(cCmd), "AT+MQTTSUB=0,\"%s\",1", pcMqttSubscribeTopic);
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
@@ -216,17 +202,17 @@ bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx )
/**
* @brief bEsp8266LinkServer
* @note ESP8266ģ<36><C4A3><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
* @param enumE<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param xNetProtocol<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pcIp<49><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param pcComNum<75><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA>ַ<EFBFBD><D6B7><EFBFBD>
* @param xId<49><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44>
* @retval 1<><31><EFBFBD><EFBFBD><EFBFBD>ӳɹ<D3B3>
* @retval 0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*/
bool bEsp8266LinkServer ( eNetPro_t enumE, char * pcIp, char * pcComNum, eIdNo_t xId)
bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, char * pcIp, char * pcComNum, eIdNo_t xId)
{
char cStr [100] = { 0 }, cCmd [120];
switch ( enumE )
switch ( xNetProtocol )
{
case enumTCP:
sprintf ( cStr, "\"%s\",\"%s\",%s", "TCP", pcIp, pcComNum );
@@ -241,7 +227,7 @@ bool bEsp8266LinkServer ( eNetPro_t enumE, char * pcIp, char * pcComNum, eIdNo_t
sprintf ( cCmd, "AT+CIPSTART=%d,%s", xId, cStr);
else
sprintf ( cCmd, "AT+CIPSTART=%s", cStr );
return bEsp8266Command ( cCmd, "OK", "ALREAY CONNECT", 4000 );
return bEsp8266Command ( cCmd, "OK", "ALREADY CONNECT", 4000 );
}
/**
@@ -368,7 +354,7 @@ uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
*/
bool bEsp8266UnvarnishSend ( void )
{
return ( bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 ) );
return bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 );
}
/**

View File

@@ -74,42 +74,53 @@ typedef enum{
#define macESP8266_RST_LOW_LEVEL() GPIO_ResetBits ( macESP8266_RST_PORT, macESP8266_RST_PIN )
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
static void vEsp8266GpioConfig ( void );
void vEsp8266Init ( void );
void vEsp8266GpioConfig ( void );
void vEsp8266Rst ( void );
bool bEsp8266Command ( char * pcCmd, char * pcAck1, char * pcAck2, uint32_t ulWaittime );
bool bEsp8266Command ( char * pcCmd, char * pcAck1,
char * pcAck2, uint32_t ulWaittime );
void vEsp8266AtTest ( void );
bool bEsp8266NetModeChoose ( eNetMode_t xMode );
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord );
bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcMqttClientId, char * pcMqttServerIp, uint16_t usMqttServerPort, char * pcMqttSubscribeTopic );
bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcMqttClientId,
char * pcMqttServerIp, uint16_t usMqttServerPort, char * pcMqttSubscribeTopic );
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode );
bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx );
bool bEsp8266LinkServer ( eNetPro_t enumE, char * pcIp, char * pcComNum, eIdNo_t xId);
bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, char * pcIp,
char * pcComNum, eIdNo_t xId);
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver );
uint8_t ucEsp8266GetLinkStatus ( void );
uint8_t ucEsp8266GetIdLinkStatus ( void );
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength );
bool bEsp8266UnvarnishSend ( void );
void vEsp8266ExitUnvarnishSend ( void );
bool bEsp8266SendString ( FunctionalState xEnumEnUnvarnishTx, char * pcStr, uint32_t ulStrLength, eIdNo_t xId );
bool bEsp8266SendString ( FunctionalState xEnumEnUnvarnishTx, char * pcStr,
uint32_t ulStrLength, eIdNo_t xId );
char * pcEsp8266ReceiveString ( FunctionalState xEnumEnUnvarnishTx );
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
#define ESP8266_APSSID "TESTAP888" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ESP8266_APPWD "123345567" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>Կ
// #define ESP8266_APSSID "CMCC-5bjx" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ESP8266_APSSID "TESTAP"
#define ESP8266_APPWD "jp7qpqn3" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>Կ
#define ESP8266_MQTT_SERVER_IP "121.36.104.9" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
#define ESP8266_MQTT_SERVER_PORT 1883 // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
#define ESP8266_MQTT_CLIENT_ID "LoRaEnvAssistant&stm32" // MQTT<54>ͻ<EFBFBD><EFBFBD><EFBFBD>ID
#define ESP8266_MQTT_USERNAME "stm32" // MQTT<54>û<EFBFBD><C3BB><EFBFBD>
#define ESP8266_MQTT_PASSWORD "123456789" // MQTT<54><54><EFBFBD><EFBFBD>
#define ALIYUN 0
#define EMQX 1
#define ESP8266_MQTT_SERVER_MODE ALIYUN // ѡ<EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ALIYUN/EMQX
#define ESP8266_EMQX_MQTT_SERVER_IP "121.36.104.9" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ַ
#define ESP8266_EMQX_MQTT_SERVER_PORT 1883 // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
#define ESP8266_EMQX_MQTT_CLIENTID "LoRaEnvAssistant&stm32" // MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID
#define ESP8266_EMQX_MQTT_USERNAME "stm32" // MQTT<54>û<EFBFBD><C3BB><EFBFBD>
#define ESP8266_EMQX_MQTT_PASSWORD "123456789" // MQTT<54><54><EFBFBD><EFBFBD>
#define ESP8266_EMQX_MQTT_SUBSCRIBE_TOPIC "/LoRaEnvAssistant/LoRaEnvAssistant&mqttfx/topics" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ESP8266_EMQX_MQTT_PUBLISH_TOPIC "/LoRaEnvAssistant/LoRaEnvAssistant&stm32/topics" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ESP8266_ALIYUN_MQTT_IP "iot-06z00by9al78fmz.mqtt.iothub.aliyuncs.com"
#define ESP8266_ALIYUN_MQTT_PORT 1883
#define ESP8266_ALIYUN_MQTT_CLIENT_ID "k11ilqnf8mF.GATEWAY_STM32_ESP8266|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768114890602|"
#define ESP8266_ALIYUN_MQTT_CLIENTID "k11ilqnf8mF.GATEWAY_STM32_ESP8266|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768415322303|"
#define ESP8266_ALIYUN_MQTT_USERNAME "GATEWAY_STM32_ESP8266&k11ilqnf8mF"
#define ESP8266_ALIYUN_MQTT_PASSWORD "8457286184495376a925f47ca284bb46a2fe8f6a6b76b0479ddb066038fe0d26"
#define ESP8266_ALIYUN_MQTT_PASSWORD "a74261b04d7dda672342776b88e956f26f74f4d9d104461f8b65cbf544ab9c03"
#define ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC "/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/get"
#define ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC "/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/update"
/* <20>ⲿȫ<E2B2BF>ֱ<EFBFBD><D6B1><EFBFBD> */

View File

@@ -58,7 +58,7 @@
#define configUSE_TIME_SLICING 1
/* <20><><EFBFBD>С<EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA>ر<EFBFBD> */
#define configUSE_QUEUE_SETS 0
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> */
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD> */
#define configUSE_TASK_NOTIFICATIONS 1
/* <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define configUSE_MUTEXES 0

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -982,7 +982,7 @@
<Group>
<GroupName>Drivers</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@@ -26,7 +26,7 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
@@ -217,22 +217,32 @@ void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
*/
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
/* code */
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART1);
/* code */
#if (USE_RTOS == NONE)
uint8_t ucRxData;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
ucRxData = USART_ReceiveData(USART1);
USART_SendData(USART1, ucRxData);
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 1)
if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART1);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 0)
#endif
}
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART1_IRQ == 0)
// uint8_t ucRxData;
// if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
// {
// ucRxData = USART_ReceiveData(USART1);
// USART_SendData(USART1, ucRxData);
// }
#endif
}
/**
@@ -244,44 +254,45 @@ void USART1_IRQHandler(void)
void USART2_IRQHandler(void)
{
#if (USE_RTOS == NONE && defined __ESP8266_SAMPLE_H__)
uint8_t ulRxData;
uint8_t ucRxData;
if ( USART_GetITStatus ( USART2, USART_IT_RXNE ) != RESET )
{
ulRxData = USART_ReceiveData( USART2 );
ucRxData = USART_ReceiveData( USART2 );
if ( xSerialFrameRecord .Bits_t .usFrameLength < ( BUFFER_MAX_LENGTH - 1 ) ) //Ԥ<><D4A4>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ++ ] = ulRxData;
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ++ ] = ucRxData;
}
if ( USART_GetITStatus( USART2, USART_IT_IDLE ) == SET ) //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
xSerialFrameRecord .Bits_t .usFrameFinishFlag = 1;
ulRxData = USART_ReceiveData( USART2 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ(<28>ȶ<EFBFBD>USART_SR<53><52>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>USART_DR)
ucRxData = USART_ReceiveData( USART2 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ(<28>ȶ<EFBFBD>USART_SR<53><52>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>USART_DR)
ucTcpClosedFlag = strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "CLOSED\r\n" ) ? 1 : 0;
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 1)
if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART2);
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART2);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
#elif (USE_RTOS == FREERTOS && ENABLE_FREERTOS_API_QUEUE_USART2_IRQ == 0)
uint8_t ulRxData;
uint8_t ucRxData;
if ( USART_GetITStatus ( USART2, USART_IT_RXNE ) != RESET )
{
ulRxData = USART_ReceiveData( USART2 );
ucRxData = USART_ReceiveData( USART2 );
if ( xSerialFrameRecord .Bits_t .usFrameLength < ( BUFFER_MAX_LENGTH - 1 ) ) //Ԥ<><D4A4>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ++ ] = ulRxData;
xSerialFrameRecord .cSerialReceivedBuffer [ xSerialFrameRecord .Bits_t .usFrameLength ++ ] = ucRxData;
}
if ( USART_GetITStatus( USART2, USART_IT_IDLE ) == SET ) //<2F><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
xSerialFrameRecord .Bits_t .usFrameFinishFlag = 1;
ulRxData = USART_ReceiveData( USART2 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ(<28>ȶ<EFBFBD>USART_SR<53><52>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>USART_DR)
ucRxData = USART_ReceiveData( USART2 ); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ(<28>ȶ<EFBFBD>USART_SR<53><52>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>USART_DR)
ucTcpClosedFlag = strstr ( xSerialFrameRecord .cSerialReceivedBuffer, "CLOSED\r\n" ) ? 1 : 0;
}
USART_SendData(USART1, ucRxData);
#endif
}
@@ -299,9 +310,9 @@ void USART3_IRQHandler(void)
if (USART_GetITStatus(USART3, USART_IT_RXNE) == SET)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3);
uint8_t ucRxData = (uint8_t)USART_ReceiveData(USART3);
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ucRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

View File

@@ -49,15 +49,17 @@
extern volatile uint8_t ucTcpClosedFlag;
#define BUFFER_MAX_LENGTH 1024 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
extern struct SerialFrame_t // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
#define BUFFER_MAX_LENGTH 1024 // <20><><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>
extern struct SerialFrame_t // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
{
char cSerialReceivedBuffer [ BUFFER_MAX_LENGTH ];
union {
__IO uint16_t usInfoAll;
struct {
__IO uint16_t usFrameLength :15; // 14:0
__IO uint16_t usFrameFinishFlag :1; // 15
char cSerialReceivedBuffer [ BUFFER_MAX_LENGTH ];
union
{
__IO uint16_t usInfoAll;
struct
{
__IO uint16_t usFrameLength :15; // 14:0
__IO uint16_t usFrameFinishFlag :1; // 15
} Bits_t;
};
} xSerialFrameRecord;

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();
}
/**

21
update.md Normal file
View File

@@ -0,0 +1,21 @@
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
### 2026.1.15<EFBFBD><EFBFBD>
**1<><31>**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTTЭ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ܡ<EFBFBD>
**2<><32>**
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʼ<EFBFBD><EFBFBD>Wi-Fi<46><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>ͨ<EFBFBD><CDA8>
```c
xTaskNotifyGive(xXxTaskHandle);
```
<EFBFBD><EFBFBD>
```c
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪ͨ<EFBFBD><EFBFBD>ͬʱ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>֪ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
**3<><33>**
<EFBFBD>޸IJ<EFBFBD><EFBFBD>ֺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ⡣