完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
硬件使用的是STM32、ESP-01S(出厂AT固件); 连线: [tr]STM32ESP-01S[/tr]
代码如下: void ESP8266_Init_SmartConfig(void) { ESP8266_Clear(); /* AT测试 */ printf("0. ATrn"); ESP8266_SendCmd("ATrn", ""); delay_ms(500); /* 重启 */ printf("1. RSTrn"); ESP8266_SendCmd("AT+RSTrn", ""); delay_ms(500); /* 关闭回显 */ // printf("2. ATE0rn"); // while(ESP8266_SendCmd("ATE0rn","OK")) // delay_ms(500); /* 设置WiFi模式 * 1:Station 模式 * 2:SoftAP 模式 * 3:SoftAP+Station 模式 */ printf("3. CWMODErn"); while(ESP8266_SendCmd("AT+CWMODE=1rn", "OK")) delay_ms(500); /* 开启SmartConfig */ printf("4. CWSTARTSMARTrn"); while(ESP8266_SendCmd("AT+CWSTARTSMART=1rn", "OK")) delay_ms(500); } 关不关指令回显看个人需要; printf 重定向到串口输出 方便调试; 开启SmartConfig后即可使用手机APP ESP-TOUCH 进行配网; 成功之后需及时关闭SmartConfig; 例如以下代码: void ESP8266_Init_after_SmartConfig(void) { ESP8266_Clear(); /* 关闭SmartConfig */ printf("1. CWSTOPSMARTrn"); while(ESP8266_SendCmd("AT+CWSTOPSMARTrn", "OK")) delay_ms(500); /* 开启 DHCP */ printf("2. AT+CWDHCPrn"); while(ESP8266_SendCmd("AT+CWDHCP=1,1rn", "OK")) delay_ms(500); /* 建立TCP连接 */ printf("3. CIPSTARTrn"); while(ESP8266_SendCmd(ESP8266_TCP_INFO, "CONNECT")) delay_ms(500); printf("4. ESP8266 Init OKrn"); } 执行第一步关闭SmartConfig后,就看自行发挥了,本例执行TCP连接; 第三步ESP8266_TCP_INFO的宏定义如下: #define ESP8266_TCP_INFO "AT+CIPSTART="TCP","www.bilibili.com",80rn" 例子使用的服务器地址:www.bilibili.com 端口:80 需要自行更改; 上述例子中的 ESP8266_Clear() 和 ESP8266_SendCmd() 函数在文末的参考资料中找到; 应用: 1、调用 ESP8266_Init_SmartConfig(); 开启SmartConfig; 2、使用 手机APP进行配网; 3、判断 配网是否成功; 4、调用 ESP8266_Init_after_SmartConfig(); 关闭SmartConfig; 示例: ESP8266_Init_SmartConfig(); while(1) { if(strstr((char *)esp8266_buf, "smartconfig connected wifi")) { ESP8266_Init_after_SmartConfig(); break; } delay_ms(500); } esp8266_buf是用于接收串口数据的数组; 配网成功后ESP-01S通过串口发送包含 smartconfig connected wifi 的字符串; stm32循环检测串口收到的数据有无该字符串; char *strstr(const char *haystack, const char *needle) 在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 ' |