20260201:完善MQTT协议下发布消息与解析订阅消息函数
This commit is contained in:
@@ -1,9 +1,75 @@
|
|||||||
#include "App_MQTT.h"
|
#include "App_MQTT.h"
|
||||||
|
|
||||||
bool bMqttDefaultSubscribe(char *pcTopic, char *pcMessage)
|
/**
|
||||||
|
* @brief bMqttPublish
|
||||||
|
* @note ͨ<><CDA8>ESP8266ģ<36><C4A3><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||||
|
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
* @param pcMessage<67><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
* @retval true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||||
|
* @retval false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||||
|
*/
|
||||||
|
bool bMqttPublish(char *pcTopic, char *pcMessage)
|
||||||
{
|
{
|
||||||
char cCmd[256] = {0};
|
char cCmd[256] = {0};
|
||||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTT_SUBSCRIBE=\"%s\",\"%s\"", pcTopic, pcMessage);
|
uint8_t ucLen = strlen(pcMessage);
|
||||||
// Add logic to send the command and handle the response
|
snprintf(cCmd, sizeof(cCmd), "AT+MQTTPUBRAW=0,\"%s\",%d,1,0", pcTopic, ucLen);
|
||||||
|
return bEsp8266Command(cCmd, "OK", ">", 3000) && bEsp8266Command(pcMessage, "OK", NULL, 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief bMqttSubMsgFormat
|
||||||
|
* @note <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||||
|
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
* @param pcMessage<67><65><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>Ϣ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
* @retval true<75><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
||||||
|
* @retval false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
||||||
|
*/
|
||||||
|
bool bMqttSubMsgFormat(char *pcTopic, char *pcMessage)
|
||||||
|
{
|
||||||
|
// <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD>ͬ<EFBFBD><CDAC>ģʽ<C4A3><CABD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
||||||
|
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>Ϣ<EFBFBD><CFA2>ʽ<EFBFBD><CABD><EFBFBD>б<EFBFBD>д
|
||||||
|
char *pcSubRecMsg;
|
||||||
|
pcSubRecMsg = strstr(xSerialFrameRecord.cSerialReceivedBuffer, pcMessage);
|
||||||
|
if (strstr(xSerialFrameRecord.cSerialReceivedBuffer, pcTopic), pcSubRecMsg)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
vUsartPrintf(USART1, "MQTT Subscribe Message Matched: %s\r\n", pcSubRecMsg);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false; // ռλ<D5BC><CEBB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief xMqttCmdParse
|
||||||
|
* @note <20><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||||
|
* @param pcTopic<69><63><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||||
|
* @retval eMqttCmd_t<5F><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6>ֵ
|
||||||
|
*/
|
||||||
|
eMqttCmd_t xMqttCmdParse(char *pcTopic)
|
||||||
|
{
|
||||||
|
if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"led\":\"on\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_LED_ON;
|
||||||
|
}
|
||||||
|
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"led\":\"off\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_LED_OFF;
|
||||||
|
}
|
||||||
|
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"fan\":\"on\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_FAN_ON;
|
||||||
|
}
|
||||||
|
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"fan\":\"off\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_FAN_OFF;
|
||||||
|
}
|
||||||
|
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"humidifier\":\"on\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_HUMIDIFIER_ON;
|
||||||
|
}
|
||||||
|
else if (bMqttSubMsgFormat(pcTopic, "{\"cmd\":{\"humidifier\":\"off\"}}") == true)
|
||||||
|
{
|
||||||
|
return MQTT_CMD_HUMIDIFIER_OFF;
|
||||||
|
}
|
||||||
|
return MQTT_CMD_UNKNOWN; // δʶ<CEB4><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,8 +13,21 @@ typedef enum
|
|||||||
MQTT_MODE_PROPERTY,
|
MQTT_MODE_PROPERTY,
|
||||||
}eMqttMode_t;
|
}eMqttMode_t;
|
||||||
|
|
||||||
bool bMqttSubMsgFormat(eMqttMode_t ucMode, char *pcReceivedMsg, char *pcTopic, char *pcMessage);
|
typedef enum
|
||||||
bool bMqttDefaultSubscribe(char *pcTopic, char *pcMessage);
|
{
|
||||||
bool bMqttNormalPublish(char *pcTopic, char *pcMessage);
|
/* data */
|
||||||
|
MQTT_CMD_LED_ON = 0,
|
||||||
|
MQTT_CMD_LED_OFF,
|
||||||
|
MQTT_CMD_FAN_ON,
|
||||||
|
MQTT_CMD_FAN_OFF,
|
||||||
|
MQTT_CMD_HUMIDIFIER_ON,
|
||||||
|
MQTT_CMD_HUMIDIFIER_OFF,
|
||||||
|
MQTT_CMD_UNKNOWN = -1,
|
||||||
|
}eMqttCmd_t;
|
||||||
|
|
||||||
|
|
||||||
|
bool bMqttPublish(char *pcTopic, char *pcMessage);
|
||||||
|
bool bMqttSubMsgFormat(char *pcTopic, char *pcMessage);
|
||||||
|
eMqttCmd_t xMqttCmdParse(char *pcTopic);
|
||||||
|
|
||||||
#endif /* __APP_MQTT_H__ */
|
#endif /* __APP_MQTT_H__ */
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#include "NetFIFO.h"
|
#include "App_NetFIFO.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 初始化环形缓冲区
|
* @brief 初始化环形缓冲区
|
||||||
* @param pBuffer: 缓冲区结构体指针
|
* @param pxBuffer: 缓冲区结构体指针
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void vNetBufferInit(NetFifoBuffer_t *pxBuffer)
|
void vNetBufferInit(NetFifoBuffer_t *pxBuffer)
|
||||||
@@ -1,289 +0,0 @@
|
|||||||
#include "USART.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD><EFBFBD>1<EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @note ʹ<><CAB9>USART1<54><31><EFBFBD>ڣ<EFBFBD>PA9->USART1_RX<52><58>PA10->USART1_TX<54><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ115200<30><30>
|
|
||||||
* @param *xUsartId ѡ<>ں<F1B4AEBF>
|
|
||||||
* @param ulBaudrate Ҫ<><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
|
|
||||||
{
|
|
||||||
if (xUsartId == USART1)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
RCC_APB2PeriphClockCmd(USART1_GPIO_CLOCK, ENABLE);
|
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART1_GPIO_PIN_TX;
|
|
||||||
GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART1_GPIO_PIN_RX;
|
|
||||||
GPIO_Init(USART1_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
|
|
||||||
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);
|
|
||||||
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>λ
|
|
||||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
|
||||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
|
||||||
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>
|
|
||||||
|
|
||||||
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>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<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 = 7; // <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>ַ
|
|
||||||
|
|
||||||
USART_Cmd(USART1,ENABLE);
|
|
||||||
} else if (xUsartId == USART2)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
RCC_APB2PeriphClockCmd(USART2_GPIO_CLOCK,ENABLE);
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_TX;
|
|
||||||
GPIO_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART2_GPIO_PIN_RX;
|
|
||||||
GPIO_Init(USART2_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
|
|
||||||
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_APB1Periph_USART2, 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>λ
|
|
||||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
|
||||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
|
||||||
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>
|
|
||||||
|
|
||||||
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>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<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 = USART2_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_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>ַ
|
|
||||||
|
|
||||||
USART_Cmd(USART2, ENABLE);
|
|
||||||
} else if (xUsartId == USART3)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
RCC_APB2PeriphClockCmd(USART3_GPIO_CLOCK,ENABLE);
|
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStructure;
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
|
||||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_TX;
|
|
||||||
GPIO_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
|
||||||
GPIO_InitStructure.GPIO_Pin = USART3_GPIO_PIN_RX;
|
|
||||||
GPIO_Init(USART3_GPIO_PORT, &GPIO_InitStructure);
|
|
||||||
|
|
||||||
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_APB1Periph_USART3,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>λ
|
|
||||||
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
|
|
||||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA>飬<EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>8λ
|
|
||||||
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>
|
|
||||||
|
|
||||||
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>4λ<34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0λ<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>
|
|
||||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
||||||
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>ַ
|
|
||||||
|
|
||||||
USART_Cmd(USART3, ENABLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD>ڷ<EFBFBD><DAB7>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ֽں<D6BD><DABA><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF>Դ<EFBFBD>TX<54><58><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
|
||||||
* @param *xUsartId ѡ<>ں<F1B4AEBF>
|
|
||||||
* @param ucByte Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5>ֽ<EFBFBD>
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void vUsartSendByte(USART_TypeDef *xUsartId, uint8_t ucByte)
|
|
||||||
{
|
|
||||||
USART_SendData(xUsartId, ucByte); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Byte<74><65>д<EFBFBD><D0B4>TDR<44>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
// д<><D0B4>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ȴ<EFBFBD>һ<EFBFBD>£<EFBFBD><C2A3><EFBFBD>TDR<44><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>TDR<44>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݾͻ<DDBE><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ȴ<EFBFBD>һ<EFBFBD>±<EFBFBD>־λ
|
|
||||||
while(USART_GetFlagStatus(xUsartId, USART_FLAG_TXE) == RESET); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>ձ<EFBFBD>־λ<D6BE><CEBB><EFBFBD>ȴ<EFBFBD>TXE<58><45>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>һ<EFBFBD><D2BB>whileѭ<65><D1AD> TXE:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE>Զ<EFBFBD><D4B6><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>λ<EFBFBD><CEBB>
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>麯<EFBFBD><E9BAAF>
|
|
||||||
* @note һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD>ģʽ<C4A3>¡<EFBFBD>uint8_t<5F><74>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ٴ<EFBFBD><D9B4><EFBFBD>һ<EFBFBD><D2BB>Length<74><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @param *xUsartId ѡ<>ں<F1B4AEBF>
|
|
||||||
* @param *pucArray Ҫ<><D2AA><EFBFBD>͵<EFBFBD>ʮ<EFBFBD><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @param usLength <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void vUsartSendArray(USART_TypeDef *xUsartId, uint8_t *pucArray, uint16_t usLength)
|
|
||||||
{
|
|
||||||
for(uint16_t i = 0; i < usLength; i ++) // forѭ<72><D1AD>ִ<EFBFBD><D6B4>Length<74>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD>Զ<EFBFBD>Array<61><79><EFBFBD>ݽ<EFBFBD><DDBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鲻Ҫ<E9B2BB><D2AA><EFBFBD><EFBFBD>uint16_t<5F>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
|
|
||||||
{
|
|
||||||
vUsartSendByte(xUsartId, pucArray[i]); // <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Array<61><79>ÿһ<C3BF><D2BB>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鳤<EFBFBD><E9B3A4>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ĩβ<C4A9><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>͡<EFBFBD>
|
|
||||||
* @param *xUsartId ѡ<>ں<F1B4AEBF>
|
|
||||||
* @param *pcString Ҫ<><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void vUsartSendString(USART_TypeDef *xUsartId, char *pcString) // <20><>uint8_t *Ҳ<><D2B2><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Դ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD>ԾͲ<D4BE><CDB2><EFBFBD>Ҫ<EFBFBD>ٴ<EFBFBD><D9B4>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
{
|
|
||||||
for(uint8_t i = 0; pcString[i] != '\0'; i++) // ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD>ñ<EFBFBD>־λ<D6BE><CEBB><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>,<2C><>'\0'<27>ǿ<EFBFBD><C7BF>ַ<EFBFBD><D6B7><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ʾ<EFBFBD><CABE>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>д0<D0B4><30>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|
||||||
{
|
|
||||||
vUsartSendByte(xUsartId, pcString[i]); // <20><>String<6E>ַ<EFBFBD><D6B7><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>SendByte<74><65><EFBFBD><EFBFBD>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD>ڴ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鳤<EFBFBD><E9B3A4>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ĩβ<C4A9><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>Ȳ<EFBFBD><C8B2>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>͡<EFBFBD>
|
|
||||||
* @param *xUsartId ѡ<>ں<F1B4AEBF>
|
|
||||||
* @param *format <20>ַ<EFBFBD><D6B7><EFBFBD>
|
|
||||||
* @param ... <20>ɱ<EFBFBD><C9B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...)
|
|
||||||
{
|
|
||||||
char cBuffer[100];
|
|
||||||
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>
|
|
||||||
va_end(arg); // <20>ͷŲ<CDB7><C5B2><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
char *p = cBuffer;
|
|
||||||
if (xUsartId == USART1)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while (*p)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
|
||||||
USART_SendData(USART1, *p++);
|
|
||||||
}
|
|
||||||
} else if (xUsartId == USART2)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while (*p)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
|
|
||||||
USART_SendData(USART2, *p++);
|
|
||||||
}
|
|
||||||
} else if (xUsartId == USART3)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while (*p)
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
|
|
||||||
USART_SendData(USART3, *p++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7>͵<EFBFBD>ÿ֡<C3BF><D6A1><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
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)
|
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
||||||
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
|
||||||
#elif (USE_RTOS == OSAL)
|
|
||||||
#endif
|
|
||||||
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7>͵<EFBFBD>ÿ֡<C3BF><D6A1><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
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)
|
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
||||||
// <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
|
|
||||||
if(xQueueUsart2IrqHdlr != NULL) {
|
|
||||||
if (xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken) != pdTRUE) {
|
|
||||||
// <20><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD>
|
|
||||||
vUsartSendString(USART3, "Queue Full or Error!");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
vUsartSendString(USART3, "Queue Not Initialized!");
|
|
||||||
}
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
|
||||||
#elif (USE_RTOS == OSAL)
|
|
||||||
#endif
|
|
||||||
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
||||||
* @note <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>жϷ<D0B6><CFB7>͵<EFBFBD>ÿ֡<C3BF><D6A1><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
|
||||||
* @param None
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
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)
|
|
||||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
||||||
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
|
|
||||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
|
||||||
#elif (USE_RTOS == OSAL)
|
|
||||||
#endif
|
|
||||||
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#ifndef __USART_H__
|
|
||||||
#define __USART_H__
|
|
||||||
|
|
||||||
/* <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 vUsart1IrqHandler USART1_IRQHandler
|
|
||||||
#define vEsp8266IrqHandler USART2_IRQHandler
|
|
||||||
#define vLoRaIrqHandler USART3_IRQHandler
|
|
||||||
#define USART1_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
|
||||||
#define USART2_GPIO_CLOCK RCC_APB2Periph_GPIOA
|
|
||||||
#define USART3_GPIO_CLOCK RCC_APB2Periph_GPIOB
|
|
||||||
#define USART1_GPIO_PORT GPIOA
|
|
||||||
#define USART2_GPIO_PORT GPIOA
|
|
||||||
#define USART3_GPIO_PORT GPIOB
|
|
||||||
#define USART1_GPIO_PIN_TX GPIO_Pin_9
|
|
||||||
#define USART1_GPIO_PIN_RX GPIO_Pin_10
|
|
||||||
#define USART2_GPIO_PIN_TX GPIO_Pin_2
|
|
||||||
#define USART2_GPIO_PIN_RX GPIO_Pin_3
|
|
||||||
#define USART3_GPIO_PIN_TX GPIO_Pin_10
|
|
||||||
#define USART3_GPIO_PIN_RX GPIO_Pin_11
|
|
||||||
|
|
||||||
#if (USE_RTOS == NONE)
|
|
||||||
#elif (USE_RTOS == FREERTOS)
|
|
||||||
#include "FreeRTOS.h"
|
|
||||||
#include "queue.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "stm32f10x.h" // Device header
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#if (USE_RTOS == NONE)
|
|
||||||
#elif (USE_RTOS == FREERTOS)
|
|
||||||
extern QueueHandle_t xQueueUsart1IrqHdlr;
|
|
||||||
extern QueueHandle_t xQueueUsart2IrqHdlr;
|
|
||||||
extern QueueHandle_t xQueueUsart3IrqHdlr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
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);
|
|
||||||
void vUsartSendString(USART_TypeDef *xUsartId, char *pcString);
|
|
||||||
void vUsartPrintf(USART_TypeDef *xUsartId, char *format, ...);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -80,9 +80,10 @@ void vEsp8266AtTest ( void )
|
|||||||
char count=0;
|
char count=0;
|
||||||
macESP8266_RST_HIGH_LEVEL();
|
macESP8266_RST_HIGH_LEVEL();
|
||||||
vDelayMs( 1000 );
|
vDelayMs( 1000 );
|
||||||
while ( count < 10 )
|
while ( count < 3 )
|
||||||
{
|
{
|
||||||
if( bEsp8266Command ( "AT", "OK", NULL, 500 ) ) return;
|
if( bEsp8266Command ( "AT", "OK", NULL, 500 ) != true )
|
||||||
|
return;
|
||||||
vEsp8266Rst();
|
vEsp8266Rst();
|
||||||
++ count;
|
++ count;
|
||||||
}
|
}
|
||||||
@@ -120,9 +121,14 @@ bool bEsp8266NetModeChoose ( eNetMode_t xMode )
|
|||||||
*/
|
*/
|
||||||
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord )
|
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord )
|
||||||
{
|
{
|
||||||
char cCmd [120];
|
char cCmd [128];
|
||||||
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pcSsid, pcPassWord );
|
sprintf ( cCmd, "AT+CWJAP=\"%s\",\"%s\"", pcSsid, pcPassWord );
|
||||||
return bEsp8266Command ( cCmd, "OK", NULL, 5000 );
|
if (strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "WIFI CONNECTED" ) != NULL)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return bEsp8266Command ( cCmd, "OK", "WIFI CONNECTED", 8000 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -140,31 +146,31 @@ bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcM
|
|||||||
char * pcMqttServerIp, uint16_t usMqttServerPort,
|
char * pcMqttServerIp, uint16_t usMqttServerPort,
|
||||||
char * pcMqttSubscribeTopic )
|
char * pcMqttSubscribeTopic )
|
||||||
{
|
{
|
||||||
char cCmd[512] = {0};
|
char cCmd[256] = {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,\"\"",
|
snprintf(cCmd, sizeof(cCmd), "AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"",
|
||||||
pcMqttUserName, pcMqttPassword);
|
pcMqttUserName, pcMqttPassword);
|
||||||
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
|
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* 2. <20><><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD>ID */
|
/* 2. <20><><EFBFBD>ÿͻ<C3BF><CDBB><EFBFBD>ID */
|
||||||
memset(cCmd, 0, sizeof(cCmd));
|
memset(cCmd, 0, sizeof(cCmd));
|
||||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCLIENTID=0,\"%s\"", pcMqttClientId);
|
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCLIENTID=0,\"%s\"", pcMqttClientId);
|
||||||
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
|
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||||
return false;
|
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));
|
memset(cCmd, 0, sizeof(cCmd));
|
||||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCONN=0,\"%s\",%u,1",
|
snprintf(cCmd, sizeof(cCmd), "AT+MQTTCONN=0,\"%s\",%u,1",
|
||||||
pcMqttServerIp, usMqttServerPort);
|
pcMqttServerIp, usMqttServerPort);
|
||||||
if (!bEsp8266Command(cCmd, "OK", NULL, 5000) && !bEsp8266Command(cCmd, "+MQTTCONN", NULL, 5000))
|
if (bEsp8266Command(cCmd, "OK", NULL, 8000) != true && bEsp8266Command(cCmd, "+MQTTCONN", NULL, 8000) != true)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
memset(cCmd, 0, sizeof(cCmd));
|
memset(cCmd, 0, sizeof(cCmd));
|
||||||
snprintf(cCmd, sizeof(cCmd), "AT+MQTTSUB=0,\"%s\",1", pcMqttSubscribeTopic);
|
snprintf(cCmd, sizeof(cCmd), "AT+MQTTSUB=0,\"%s\",1", pcMqttSubscribeTopic);
|
||||||
if (!bEsp8266Command(cCmd, "OK", NULL, 2000))
|
if (bEsp8266Command(cCmd, "OK", NULL, 2000) != true)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -181,7 +187,7 @@ bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcM
|
|||||||
*/
|
*/
|
||||||
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode )
|
bool bEsp8266BuildAp ( char * pcSsid, char * pcPassWord, eApPsdMode_t xPsdMode )
|
||||||
{
|
{
|
||||||
char cCmd [120];
|
char cCmd [128];
|
||||||
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pcSsid, pcPassWord, xPsdMode );
|
sprintf ( cCmd, "AT+CWSAP=\"%s\",\"%s\",1,%d", pcSsid, pcPassWord, xPsdMode );
|
||||||
return bEsp8266Command ( cCmd, "OK", 0, 1000 );
|
return bEsp8266Command ( cCmd, "OK", 0, 1000 );
|
||||||
}
|
}
|
||||||
@@ -210,7 +216,7 @@ bool bEsp8266EnableMultipleId ( FunctionalState xEnumEnUnvarnishTx )
|
|||||||
*/
|
*/
|
||||||
bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, 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];
|
char cStr [128] = { 0 }, cCmd [128];
|
||||||
switch ( xNetProtocol )
|
switch ( xNetProtocol )
|
||||||
{
|
{
|
||||||
case enumTCP:
|
case enumTCP:
|
||||||
@@ -240,7 +246,7 @@ bool bEsp8266LinkServer ( eNetPro_t xNetProtocol, char * pcIp, char * pcComNum,
|
|||||||
*/
|
*/
|
||||||
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver )
|
bool bEsp8266StartOrShutServer ( FunctionalState xMode, char * pcPortNum, char * pcTimeOver )
|
||||||
{
|
{
|
||||||
char cCmd1 [120], cCmd2 [120];
|
char cCmd1 [128], cCmd2 [128];
|
||||||
if ( xMode )
|
if ( xMode )
|
||||||
{
|
{
|
||||||
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pcPortNum );
|
sprintf ( cCmd1, "AT+CIPSERVER=%d,%s", 1, pcPortNum );
|
||||||
@@ -324,7 +330,7 @@ uint8_t ucEsp8266GetIdLinkStatus ( void )
|
|||||||
*/
|
*/
|
||||||
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
|
uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
|
||||||
{
|
{
|
||||||
char uc;
|
char c;
|
||||||
char * pCh;
|
char * pCh;
|
||||||
bEsp8266Command ( "AT+CIFSR", "OK", 0, 500 );
|
bEsp8266Command ( "AT+CIFSR", "OK", 0, 500 );
|
||||||
pCh = strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "APIP,\"" );
|
pCh = strstr ( xSerialFrameRecord.cSerialReceivedBuffer, "APIP,\"" );
|
||||||
@@ -332,12 +338,12 @@ uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
|
|||||||
pCh += 6;
|
pCh += 6;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
for ( uc = 0; uc < ucArrayLength; uc ++ )
|
for ( c = 0; c < ucArrayLength; c ++ )
|
||||||
{
|
{
|
||||||
pcApIp [ uc ] = * ( pCh + uc);
|
pcApIp [ c ] = * ( pCh + c);
|
||||||
if ( pcApIp [ uc ] == '\"' )
|
if ( pcApIp [ c ] == '\"' )
|
||||||
{
|
{
|
||||||
pcApIp [ uc ] = '\0';
|
pcApIp [ c ] = '\0';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -381,7 +387,7 @@ 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 cStr [20];
|
char cStr [256];
|
||||||
bool bRet = false;
|
bool bRet = false;
|
||||||
if ( xEnumEnUnvarnishTx )
|
if ( xEnumEnUnvarnishTx )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -265,21 +265,3 @@ void vTaskWifiConnection(void *pvParameters)
|
|||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// bool bMqttConnectResult = false;
|
|
||||||
// bEsp8266Command("AT+MQTTUSERCFG=0,1,\"NULL\",\"GATEWAY_STM32_ESP8266&k11ilqnf8mF\",\"8457286184495376a925f47ca284bb46a2fe8f6a6b76b0479ddb066038fe0d26\",0,0,\"\"", "OK", NULL, 1500);
|
|
||||||
// bEsp8266Command("AT+MQTTCLIENTID=0,\"k11ilqnf8mF.GATEWAY_STM32_ESP8266|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768114890602|\"", "OK", NULL, 1500);
|
|
||||||
// bEsp8266Command("AT+MQTTCONN=0,\"iot-06z00by9al78fmz.mqtt.iothub.aliyuncs.com\",1883,1", "OK", NULL, 5000);
|
|
||||||
// bMqttConnectResult = bEsp8266Command("AT+MQTTSUB=0,\"/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/get\",1", "OK", NULL, 1500);
|
|
||||||
// if (bMqttConnectResult == 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)
|
|
||||||
// {
|
|
||||||
// /* code */
|
|
||||||
// vUsartPrintf(USART1, "MQTT Init Success\r\n");
|
|
||||||
// vTaskDelete(NULL);
|
|
||||||
// }
|
|
||||||
@@ -63,28 +63,33 @@ typedef enum{
|
|||||||
|
|
||||||
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
|
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
|
||||||
#define ESP8266_APSSID "CMCC-5bjx" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><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_APPWD "jp7qpqn3" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>Կ
|
||||||
|
|
||||||
#define ALIYUN 0
|
#define ALIYUN 0
|
||||||
#define EMQX 1
|
#define EMQX 1
|
||||||
#define ESP8266_MQTT_SERVER_MODE ALIYUN // ѡ<><D1A1>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ALIYUN/EMQX
|
#define ESP8266_MQTT_SERVER_MODE EMQX // ѡ<><D1A1>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>ALIYUN/EMQX
|
||||||
|
|
||||||
#define ESP8266_EMQX_MQTT_SERVER_IP "121.36.104.9" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
|
#define ESP8266_EMQX_MQTT_SERVER_IP "121.36.104.9" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ
|
||||||
#define ESP8266_EMQX_MQTT_SERVER_PORT 1883 // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
|
#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><EFBFBD><EFBFBD>ID
|
#define ESP8266_EMQX_MQTT_PROJECTID "LoRaEnvAssistant" // MQTT<54><54>ĿID
|
||||||
#define ESP8266_EMQX_MQTT_USERNAME "stm32" // MQTT<54>û<EFBFBD><EFBFBD><EFBFBD>
|
#define ESP8266_EMQX_MQTT_DEVICENAME "stm32" // MQTT<54>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
#define ESP8266_EMQX_MQTT_SUB_DEVICENAME "mqttfx" // MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||||
|
#define ESP8266_EMQX_MQTT_CLIENTID ESP8266_EMQX_MQTT_PROJECTID"&"ESP8266_EMQX_MQTT_DEVICENAME // MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID
|
||||||
|
#define ESP8266_EMQX_MQTT_USERNAME ESP8266_EMQX_MQTT_DEVICENAME // MQTT<54>û<EFBFBD><C3BB><EFBFBD>
|
||||||
#define ESP8266_EMQX_MQTT_PASSWORD "123456789" // MQTT<54><54><EFBFBD><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_SUBSCRIBE_TOPIC "/"ESP8266_EMQX_MQTT_PROJECTID"/"ESP8266_EMQX_MQTT_PROJECTID"&"ESP8266_EMQX_MQTT_SUB_DEVICENAME"/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_EMQX_MQTT_PUBLISH_TOPIC "/"ESP8266_EMQX_MQTT_PROJECTID"/"ESP8266_EMQX_MQTT_CLIENTID"/topics" // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
#define ESP8266_ALIYUN_MQTT_IP "iot-06z00by9al78fmz.mqtt.iothub.aliyuncs.com"
|
#define ESP8266_ALIYUN_MQTT_IP "iot-06z00by9al78fmz.mqtt.iothub.aliyuncs.com"
|
||||||
#define ESP8266_ALIYUN_MQTT_PORT 1883
|
#define ESP8266_ALIYUN_MQTT_PORT 1883
|
||||||
#define ESP8266_ALIYUN_MQTT_CLIENTID "k11ilqnf8mF.GATEWAY_STM32_ESP8266|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768415322303|"
|
#define ESP8266_ALIYUN_MQTT_PRODUCTKEY "k11ilqnf8mF"
|
||||||
#define ESP8266_ALIYUN_MQTT_USERNAME "GATEWAY_STM32_ESP8266&k11ilqnf8mF"
|
#define ESP8266_ALIYUN_MQTT_DEVICENAME "GATEWAY_STM32_ESP8266"
|
||||||
|
#define ESP8266_ALIYUN_MQTT_CLIENTID ESP8266_ALIYUN_MQTT_PRODUCTKEY"."ESP8266_ALIYUN_MQTT_DEVICENAME \
|
||||||
|
"|securemode=2\\,signmethod=hmacsha256\\,timestamp=1768415322303|"
|
||||||
|
#define ESP8266_ALIYUN_MQTT_USERNAME ESP8266_ALIYUN_MQTT_DEVICENAME"&"ESP8266_ALIYUN_MQTT_PRODUCTKEY
|
||||||
#define ESP8266_ALIYUN_MQTT_PASSWORD "a74261b04d7dda672342776b88e956f26f74f4d9d104461f8b65cbf544ab9c03"
|
#define ESP8266_ALIYUN_MQTT_PASSWORD "a74261b04d7dda672342776b88e956f26f74f4d9d104461f8b65cbf544ab9c03"
|
||||||
#define ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC "/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/get"
|
#define ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC "/"ESP8266_ALIYUN_MQTT_PRODUCTKEY"/"ESP8266_ALIYUN_MQTT_DEVICENAME"/user/get"
|
||||||
#define ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC "/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/update"
|
#define ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC "/"ESP8266_ALIYUN_MQTT_PRODUCTKEY"/"ESP8266_ALIYUN_MQTT_DEVICENAME"/user/update"
|
||||||
|
|
||||||
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* ESP8266 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
void vEsp8266GpioConfig ( void );
|
void vEsp8266GpioConfig ( void );
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1062,7 +1062,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>FreeRTOS/inc</GroupName>
|
<GroupName>FreeRTOS/inc</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -1286,7 +1286,7 @@
|
|||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>FreeRTOS/src</GroupName>
|
<GroupName>FreeRTOS/src</GroupName>
|
||||||
<tvExp>0</tvExp>
|
<tvExp>1</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -1441,8 +1441,8 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/NetFIFO</GroupName>
|
<GroupName>Application/App_MQTT</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
@@ -1453,8 +1453,8 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\Application\NetFIFO\NetFIFO.c</PathWithFileName>
|
<PathWithFileName>.\Application\App_MQTT\App_MQTT.c</PathWithFileName>
|
||||||
<FilenameWithoutPath>NetFIFO.c</FilenameWithoutPath>
|
<FilenameWithoutPath>App_MQTT.c</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
@@ -1465,8 +1465,8 @@
|
|||||||
<tvExp>0</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>.\Application\NetFIFO\NetFIFO.h</PathWithFileName>
|
<PathWithFileName>.\Application\App_MQTT\App_MQTT.h</PathWithFileName>
|
||||||
<FilenameWithoutPath>NetFIFO.h</FilenameWithoutPath>
|
<FilenameWithoutPath>App_MQTT.h</FilenameWithoutPath>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
<bShared>0</bShared>
|
<bShared>0</bShared>
|
||||||
</File>
|
</File>
|
||||||
|
|||||||
@@ -341,7 +341,7 @@
|
|||||||
<MiscControls>--no-multibyte-chars</MiscControls>
|
<MiscControls>--no-multibyte-chars</MiscControls>
|
||||||
<Define>USE_STDPERIPH_DRIVER</Define>
|
<Define>USE_STDPERIPH_DRIVER</Define>
|
||||||
<Undefine></Undefine>
|
<Undefine></Undefine>
|
||||||
<IncludePath>.\SystemFiles;.\Libraries\inc;.\User;.\BSP;.\Drivers;.\FreeRTOS\inc;.\FreeRTOS\portable\RVDS\ARM_CM3;.\FreeRTOS\config;.\Application\NetFIFO</IncludePath>
|
<IncludePath>.\SystemFiles;.\Libraries\inc;.\User;.\BSP;.\Drivers;.\FreeRTOS\inc;.\FreeRTOS\portable\RVDS\ARM_CM3;.\FreeRTOS\config;.\Application\NetFIFO;.\Application\App_MQTT</IncludePath>
|
||||||
</VariousControls>
|
</VariousControls>
|
||||||
</Cads>
|
</Cads>
|
||||||
<Aads>
|
<Aads>
|
||||||
@@ -903,17 +903,17 @@
|
|||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>Application/NetFIFO</GroupName>
|
<GroupName>Application/App_MQTT</GroupName>
|
||||||
<Files>
|
<Files>
|
||||||
<File>
|
<File>
|
||||||
<FileName>NetFIFO.c</FileName>
|
<FileName>App_MQTT.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>.\Application\NetFIFO\NetFIFO.c</FilePath>
|
<FilePath>.\Application\App_MQTT\App_MQTT.c</FilePath>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>NetFIFO.h</FileName>
|
<FileName>App_MQTT.h</FileName>
|
||||||
<FileType>5</FileType>
|
<FileType>5</FileType>
|
||||||
<FilePath>.\Application\NetFIFO\NetFIFO.h</FilePath>
|
<FilePath>.\Application\App_MQTT\App_MQTT.h</FilePath>
|
||||||
</File>
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
</Group>
|
</Group>
|
||||||
|
|||||||
@@ -6,12 +6,14 @@
|
|||||||
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "queue.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> */
|
/* <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 xTaskWorkStatusLedHdlr;
|
||||||
TaskHandle_t xTaskWifiJoinApHdlr;
|
TaskHandle_t xTaskWifiJoinApHdlr;
|
||||||
TaskHandle_t xTaskWifiNwkInitHdlr;
|
TaskHandle_t xTaskWifiNwkInitHdlr;
|
||||||
TaskHandle_t xTaskMqttPublishTestHdlr;
|
TaskHandle_t xTaskMqttPublishHdlr;
|
||||||
|
TaskHandle_t xTaskMqttSubscribeHdlr;
|
||||||
|
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>о<EFBFBD><D0BE><EFBFBD> */
|
||||||
QueueHandle_t xQueueUsart1IrqHdlr;
|
QueueHandle_t xQueueUsart1IrqHdlr;
|
||||||
@@ -24,7 +26,6 @@ QueueHandle_t xQueueUsart3IrqHdlr;
|
|||||||
* @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>
|
* @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
|
* @retval None
|
||||||
*/
|
*/
|
||||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
||||||
void vTaskWorkStatusLed(void *pvParameters)
|
void vTaskWorkStatusLed(void *pvParameters)
|
||||||
{
|
{
|
||||||
while(1)
|
while(1)
|
||||||
@@ -73,7 +74,8 @@ void vTaskWifiNetWorkInit(void *pvParameters)
|
|||||||
/* code */
|
/* code */
|
||||||
vUsartSendString(USART1, "Aliyun MQTT Init Successfully.\r\n");
|
vUsartSendString(USART1, "Aliyun MQTT Init Successfully.\r\n");
|
||||||
/* ֪ͨMQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
/* ֪ͨMQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
|
xTaskNotifyGive(xTaskMqttPublishHdlr);
|
||||||
|
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
@@ -87,7 +89,8 @@ void vTaskWifiNetWorkInit(void *pvParameters)
|
|||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
vUsartPrintf(USART1, "EMQX MQTT Init Successfully.\r\n");
|
vUsartPrintf(USART1, "EMQX MQTT Init Successfully.\r\n");
|
||||||
xTaskNotifyGive(xTaskMqttPublishTestHdlr);
|
xTaskNotifyGive(xTaskMqttPublishHdlr);
|
||||||
|
xTaskNotifyGive(xTaskMqttSubscribeHdlr);
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
@@ -105,47 +108,79 @@ void vTaskWifiNetWorkInit(void *pvParameters)
|
|||||||
* @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>
|
* @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
|
* @retval None
|
||||||
*/
|
*/
|
||||||
void vTaskMqttPublishTest(void *pvParameters)
|
void vTaskMqttPublish(void *pvParameters)
|
||||||
{
|
{
|
||||||
/* <20><><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD>պ<EFBFBD><D5BA><EFBFBD> */
|
||||||
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
|
||||||
char pcCmd[256] = {0};
|
|
||||||
char *pcJsonMsg = "{\"temperature\":23,\"humidity\":60}";
|
char *pcJsonMsg = "{\"temperature\":23,\"humidity\":60}";
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
|
#if (ESP8266_MQTT_SERVER_MODE == ALIYUN)
|
||||||
uint8_t ucLen = strlen(pcJsonMsg);
|
while (bMqttPublish(ESP8266_ALIYUN_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
/* code */
|
/* code */
|
||||||
vUsartSendString(USART1, "Aliyun MQTT Publish Successfully.\r\n");
|
vUsartSendString(USART1, "MQTT Publish Successfully.\r\n");
|
||||||
} else
|
|
||||||
{
|
|
||||||
/* code */
|
|
||||||
vUsartSendString(USART1, "Aliyun MQTT Publish Failed.\r\n");
|
|
||||||
}
|
}
|
||||||
|
vUsartSendString(USART1, "MQTT Publish Failed.\r\n");
|
||||||
|
vTaskDelay(2000);
|
||||||
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
|
#elif (ESP8266_MQTT_SERVER_MODE == EMQX)
|
||||||
uint8_t ucLen = strlen(pcJsonMsg);
|
while (bMqttPublish(ESP8266_EMQX_MQTT_PUBLISH_TOPIC, pcJsonMsg) == pdTRUE)
|
||||||
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
|
|
||||||
{
|
{
|
||||||
/* code */
|
/* 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
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief MQTT<54><54><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>
|
* @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>
|
* @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>
|
||||||
@@ -169,12 +204,19 @@ void vCreateTasksList(void)
|
|||||||
(UBaseType_t ) 2,
|
(UBaseType_t ) 2,
|
||||||
(TaskHandle_t * ) &xTaskWifiNwkInitHdlr);
|
(TaskHandle_t * ) &xTaskWifiNwkInitHdlr);
|
||||||
xTaskCreate(
|
xTaskCreate(
|
||||||
(TaskFunction_t ) vTaskMqttPublishTest,
|
(TaskFunction_t ) vTaskMqttPublish,
|
||||||
(char * ) "TaskName_MqttPublishTest",
|
(char * ) "TaskName_MqttPublishTest",
|
||||||
(configSTACK_DEPTH_TYPE) 512,
|
(configSTACK_DEPTH_TYPE) 512,
|
||||||
(void * ) NULL,
|
(void * ) NULL,
|
||||||
(UBaseType_t ) 2,
|
(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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
26
update.md
26
update.md
@@ -1,26 +0,0 @@
|
|||||||
## <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>ֿ⡣
|
|
||||||
|
|
||||||
### 2026.1.17<EFBFBD><EFBFBD>
|
|
||||||
|
|
||||||
**1<><31>**
|
|
||||||
֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>mqtt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
|
||||||
Reference in New Issue
Block a user