在使用Keil编写程序通过ESP8266连接阿里云平台时遇到问题,初始化过程中卡在了第八步无法连接,具体传输的at指令为"AT+MQTTCONN=0,"iot-06z00ia6orbs8ag.mqtt.iothub.aliyuncs.com",1883,1\r\n"
连接热点的AT指令能正常收到“OK”回复,并且关于MQTT的指令AT+MQTTCLIENTID=0,"k17fimjhRbe.MQTT|securemode=2\,signmethod=hmacsha256\,timestamp=1715136221700|"\r\n也能被正常识别
void esp8266_init(void)
{
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE); //打开串口2接收中断
printf("1.SETTING STATION MODE\r\n");
OLED_printf(0,0,"1.SETTING STATION MODE ");
while(esp8266_send_cmd((uint8_t *)"AT+CWMODE=1\r\n",strlen("AT+CWMODE=1\r\n"),"OK")!=0)
{
HAL_Delay(1000);
}
printf("2.CLOSE ESP8266 ECHO\r\n");
OLED_printf(0,0,"2.CLOSE ESP8266 ECHO ");
while(esp8266_send_cmd((uint8_t *)"ATE0\r\n",strlen("ATE0\r\n"),"OK")!=0)
{
HAL_Delay(1000);
}
printf("3.NO AUTO CONNECT WIFI\r\n");
OLED_printf(0,0,"3.NO AUTO CONNECT WIFI ");
while(esp8266_send_cmd((uint8_t *)"AT+CWAUTOCONN=0\r\n",strlen("AT+CWAUTOCONN=0\r\n"),"OK")!=0)
{
HAL_Delay(1000);
}
printf("4.RESET ESP8266\r\n");
OLED_printf(0,0,"4.RESET ESP8266 ");
while(esp8266_reset() != 0)
{
HAL_Delay(5000);
}
printf("5.CONFIG WIFI NETWORK\r\n");
OLED_printf(0,0,"5.CONFIG WIFI NETWORK ");
while(esp8266_config_network() != 0)
{
HAL_Delay(8000);
}
printf("6.MQTT USER CONFIG\r\n");
OLED_printf(0,0,"6.MQTT USER CONFIG ");
while(esp8266_send_cmd((uint8_t *)"AT+MQTTUSERCFG=0,1,\"NULL\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n",
strlen("AT+MQTTUSERCFG=0,1,\"NULL\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n"),"OK")!=0)
{
HAL_Delay(2000);
}
OLED_printf(0,0,"7.MQTT CLIENTID ");
while(esp8266_send_cmd((uint8_t *)MQTT_CLIENT_ID,strlen(MQTT_CLIENT_ID),"OK")!=0)
{
HAL_Delay(2000);
}
printf("8.CONNECT MQTT BROKER\r\n");
OLED_printf(0,0,"8.CONNECT MQTT BROKER ");
while(esp8266_connect_server() != 0)
{
HAL_Delay(8000);
}
printf("9.SUBSCRIBE TOPIC\r\n");
OLED_printf(0,0,"8.SUBSCRIBE TOPIC ");
while(esp8266_send_cmd((uint8_t *)"AT+MQTTSUB=0,\""SUB_TOPIC"\",0\r\n",strlen("AT+MQTTSUB=0,\""SUB_TOPIC"\",0\r\n"),"OK")!=0)
{
HAL_Delay(2000);
}
printf("0.ESP8266 INIT OK!!!\r\n");
OLED_printf(0,0,"0.ESP8266 INIT OK!!! ");
}
以下为出问题的代码
uint8_t esp8266_connect_server(void)
{
uint8_t retval=0;
uint16_t count = 0;
HAL_UART_Transmit(&huart2, (unsigned char *)BROKER_ASDDRESS,strlen(BROKER_ASDDRESS), 1000);
while((receive_start == 0)&&(count<1000))
{
count++;
HAL_Delay(1);
}
if(count >= 1000)
{
retval = 1;
}
else
{
HAL_Delay(5000);
if(strstr((const char*)receive_buf, "OK"))
{
retval = 0;
}
else
{
retval = 1;
}
}
uart2_receiver_clear(receive_count);
return retval;
}

使用串口助手是可以成功通信的。
以下是一些信息的初始化:
#define WIFI_SSID "kjpldzt"
#define WIFI_PASSWD "111111111"
#define MQTT_CLIENT_ID "AT+MQTTCLIENTID=0,\"k17fimjhRbe.MQTT|securemode=2\\,signmethod=hmacsha256\\,timestamp=1715136221700|\"\r\n"
#define MQTT_USER_NAME "MQTT&k17fimjhRbe"
#define MQTT_PASSWD "427442d303a6dac9ee88692e423be0ea3ccd8ec6313e2b19ad08dc24c4c35aac"
#define BROKER_ADDRESS "AT+MQTTCONN=0,\"iot-06z00ia6orbs8ag.mqtt.iothub.aliyuncs.com\",1883,1\r\n"
#define SUB_TOPIC "/sys/k17fimjhRbe/MQTT/thing/service/property/set"
#define PUB_TOPIC "/sys/k17fimjhRbe/MQTT/thing/event/property/post"
#define JSON_FORMAT "{\\\"params\\\":{\\\"temp\\\":%d\\,\\\"humi\\\":%d\\}\\,\\\"version\\\":\\\"1.0.0\\\"}"