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

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

View File

@@ -1,9 +1,75 @@
#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};
snprintf(cCmd, sizeof(cCmd), "AT+MQTT_SUBSCRIBE=\"%s\",\"%s\"", pcTopic, pcMessage);
// Add logic to send the command and handle the response
return true;
uint8_t ucLen = strlen(pcMessage);
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 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>
}

View File

@@ -13,8 +13,21 @@ typedef enum
MQTT_MODE_PROPERTY,
}eMqttMode_t;
bool bMqttSubMsgFormat(eMqttMode_t ucMode, char *pcReceivedMsg, char *pcTopic, char *pcMessage);
bool bMqttDefaultSubscribe(char *pcTopic, char *pcMessage);
bool bMqttNormalPublish(char *pcTopic, char *pcMessage);
typedef enum
{
/* 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__ */

View File

@@ -1,8 +1,8 @@
#include "NetFIFO.h"
#include "App_NetFIFO.h"
/**
* @brief
* @param pBuffer:
* @param pxBuffer:
* @retval None
*/
void vNetBufferInit(NetFifoBuffer_t *pxBuffer)