20260111:解决了连接MQTT平台的bug(sprintf数组越界bug和参数类型错误)
This commit is contained in:
@@ -143,26 +143,45 @@ bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord )
|
||||
/**
|
||||
* @brief bEsp8266MqttInit
|
||||
* @note ESP8266ģ<36><C4A3>MQTT<54><54>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>á<EFBFBD>
|
||||
* @param pcMqttUser<65><72>MQTT<54>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMqttPwd<EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcMqttCliId<49><64>MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID<49>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param pcMqttUserName<EFBFBD><EFBFBD>MQTT<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcMqttPassword<EFBFBD><EFBFBD>MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcMqttClientId<EFBFBD><EFBFBD>MQTT<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param pcMqttServerIp<49><70>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* @param usMqttServerPort<72><74>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
|
||||
* @retval 1<><31><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
||||
* @retval 0<><30><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>
|
||||
*/
|
||||
bool bEsp8266MqttInit ( char * pcMqttUser, char * pcMqttPwd, char * pcMqttCliId, char * pcMqttServerIp, char * usMqttServerPort )
|
||||
bool bEsp8266MqttInit ( char * pcMqttUserName, char * pcMqttPassword, char * pcMqttClientId,
|
||||
char * pcMqttServerIp, uint16_t usMqttServerPort,
|
||||
char * pcMqttSubscribeTopic )
|
||||
{
|
||||
char cCmd [200];
|
||||
sprintf ( cCmd, "AT+MQTTUSERCFG=0,1,\"NULL\",\"%s\",\"%s\",0,0,\"\"", pcMqttUser, pcMqttPwd );
|
||||
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 1500 ) )
|
||||
char cCmd[512] = {0};
|
||||
|
||||
// 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;
|
||||
sprintf ( cCmd, "AT+MQTTCLIENTID=0,\"%s\"", pcMqttCliId );
|
||||
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 1500 ) )
|
||||
|
||||
// 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;
|
||||
sprintf ( cCmd, "AT+MQTTCONN=0,\"%s\",%s,1", pcMqttServerIp, usMqttServerPort );
|
||||
if ( ! bEsp8266Command ( cCmd, "OK", NULL, 2000 ) )
|
||||
|
||||
// 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))
|
||||
return false;
|
||||
|
||||
// 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))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -349,7 +368,7 @@ uint8_t ucEsp8266InquireApIp ( char * pcApIp, uint8_t ucArrayLength )
|
||||
*/
|
||||
bool bEsp8266UnvarnishSend ( void )
|
||||
{
|
||||
bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 );
|
||||
return ( bEsp8266Command ( "AT+CIPMODE=1", "OK", 0, 500 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -264,4 +264,22 @@ void vTaskWifiConnection(void *pvParameters)
|
||||
}
|
||||
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);
|
||||
// }
|
||||
@@ -19,6 +19,11 @@ typedef enum{
|
||||
STA_AP
|
||||
} eNetMode_t;
|
||||
|
||||
typedef enum{
|
||||
ALIYUN = 0,
|
||||
EMQX
|
||||
} eMqttServerMode_t;
|
||||
|
||||
typedef enum{
|
||||
enumTCP,
|
||||
enumUDP,
|
||||
@@ -76,7 +81,7 @@ bool bEsp8266Command ( char * pcCmd, char
|
||||
void vEsp8266AtTest ( void );
|
||||
bool bEsp8266NetModeChoose ( eNetMode_t xMode );
|
||||
bool bEsp8266JoinAp ( char * pcSsid, char * pcPassWord );
|
||||
bool bEsp8266MqttInit ( char * pcMqttUser, char * pcMqttPwd, char * pcMqttCliId, char * pcMqttServerIp, char * usMqttServerPort );
|
||||
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);
|
||||
@@ -90,14 +95,22 @@ bool bEsp8266SendString ( FunctionalState xE
|
||||
char * pcEsp8266ReceiveString ( FunctionalState xEnumEnUnvarnishTx );
|
||||
|
||||
/* <20>û<EFBFBD><C3BB><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>õIJ<C3B5><C4B2><EFBFBD> */
|
||||
#define ESP8266_APSSID "TESTAP66667" // Ҫ<><D2AA><EFBFBD>ӵ<EFBFBD><D3B5>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_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 "TestServer&stm32" // MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>ID
|
||||
#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><CDBB><EFBFBD>ID
|
||||
#define ESP8266_MQTT_USERNAME "stm32" // MQTT<54>û<EFBFBD><C3BB><EFBFBD>
|
||||
#define ESP8266_MQTT_PASSWORD "123456789" // MQTT<54><54><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_USERNAME "GATEWAY_STM32_ESP8266&k11ilqnf8mF"
|
||||
#define ESP8266_ALIYUN_MQTT_PASSWORD "8457286184495376a925f47ca284bb46a2fe8f6a6b76b0479ddb066038fe0d26"
|
||||
#define ESP8266_ALIYUN_MQTT_SUBSCRIBE_TOPIC "/k11ilqnf8mF/GATEWAY_STM32_ESP8266/user/get"
|
||||
|
||||
/* <20>ⲿȫ<E2B2BF>ֱ<EFBFBD><D6B1><EFBFBD> */
|
||||
|
||||
#endif /* __ESP8266_H */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -153,17 +153,17 @@
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>cNetFifoBuffer</ItemText>
|
||||
<ItemText>bMqttUserCfgInit</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ucEsp8266ResHandler,0x0A</ItemText>
|
||||
<ItemText>bMqttCliIdInit</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ucEsp8266Log,0x0A</ItemText>
|
||||
<ItemText>bMqttConnectResult</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<Tracepoint>
|
||||
@@ -184,7 +184,7 @@
|
||||
<AscS1>0</AscS1>
|
||||
<AscS2>0</AscS2>
|
||||
<AscS3>0</AscS3>
|
||||
<aSer3>1</aSer3>
|
||||
<aSer3>0</aSer3>
|
||||
<eProf>0</eProf>
|
||||
<aLa>0</aLa>
|
||||
<aPa1>0</aPa1>
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
#include "USART.h"
|
||||
#include "LED.h"
|
||||
#include "ESP8266.h"
|
||||
#include "NetFIFO.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;
|
||||
@@ -42,7 +41,12 @@ 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)
|
||||
@@ -56,36 +60,52 @@ void vTaskWifiJoinAp(void *pvParameters)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief <20><>ʼ<EFBFBD><CABC>MQTTЭ<54><D0AD><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)
|
||||
{
|
||||
// bool bMqttUserCfgInit = false, bMqttCliIdInit = false, bMqttConnectResult = false;
|
||||
BaseType_t bMqttConnectResult = pdFALSE;
|
||||
while (1)
|
||||
{
|
||||
// MQTT<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// bMqttUserCfgInit = bEsp8266Command("AT+MQTTUSERCFG=0,1,\"NULL\",\"stm32\",\"IPSK25em.\",0,0,\"\"", "OK", NULL, 1500);
|
||||
// bMqttCliIdInit = bEsp8266Command("AT+MQTTCLIENTID=0,\"TestServer&stm32\"", "OK", NULL, 1500);
|
||||
// bMqttConnectResult = bEsp8266Command("AT+MQTTCONN=0,\"121.36.104.9\",1883,1", "OK", NULL, 2000);
|
||||
// if (bMqttUserCfgInit == true && bMqttCliIdInit == true && bMqttConnectResult == true)
|
||||
// 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)
|
||||
{
|
||||
/* code */
|
||||
vUsartPrintf(USART1, "MQTT Init Success\r\n");
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
// 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");
|
||||
// break;
|
||||
// } else
|
||||
// {
|
||||
// /* code */
|
||||
// vUsartPrintf(USART1, "MQTT Init Failed, Retry...\r\n");
|
||||
// vDelayMs(2000);
|
||||
// vTaskDelete(NULL);
|
||||
// }
|
||||
bMqttConnectResult = bEsp8266MqttInit(ESP8266_MQTT_USERNAME, ESP8266_MQTT_PASSWORD, ESP8266_MQTT_CLIENT_ID, ESP8266_MQTT_SERVER_IP, ESP8266_MQTT_SERVER_PORT);
|
||||
if (bMqttConnectResult == pdFALSE)
|
||||
{
|
||||
vUsartPrintf(USART1, "MQTT Init Failed, Retry...\r\n");
|
||||
vDelayMs(2000);
|
||||
continue;
|
||||
}
|
||||
vUsartPrintf(USART1, "MQTT Init Success\r\n");
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +135,7 @@ void vCreateTasksList(void)
|
||||
(TaskFunction_t ) vTaskWifiMqttInit,
|
||||
(char * ) "TaskName_WifiInitMQTTProtocol",
|
||||
(configSTACK_DEPTH_TYPE) 512,
|
||||
(void * ) NULL,
|
||||
(void * ) NULL,
|
||||
(UBaseType_t ) 2,
|
||||
(TaskHandle_t * ) &xTaskWifiMqttInitHdlr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user