硬件使用的是STM32、ESP-01S(出厂AT固件);
连线:
STM32 | ESP-01S |
---|---|
UART-TX | RX |
UART-RX | TX |
VCC-3.3 | 3.3 |
GND | GND |
代码如下:
void ESP8266_Init_SmartConfig(void)
{
ESP8266_Clear();
/* AT测试 */
printf("0. AT\r\n");
ESP8266_SendCmd("AT\r\n", "");
delay_ms(500);
/* 重启 */
printf("1. RST\r\n");
ESP8266_SendCmd("AT+RST\r\n", "");
delay_ms(500);
/* 关闭回显 */
// printf("2. ATE0\r\n");
// while(ESP8266_SendCmd("ATE0\r\n","OK"))
// delay_ms(500);
/* 设置WiFi模式
* 1:Station 模式
* 2:SoftAP 模式
* 3:SoftAP+Station 模式
*/
printf("3. CWMODE\r\n");
while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK"))
delay_ms(500);
/* 开启SmartConfig */
printf("4. CWSTARTSMART\r\n");
while(ESP8266_SendCmd("AT+CWSTARTSMART=1\r\n", "OK"))
delay_ms(500);
}
关不关指令回显看个人需要;
printf 重定向到串口输出 方便调试;
开启SmartConfig后即可使用手机APP ESP-TOUCH 进行配网;
成功之后需及时关闭SmartConfig;
例如以下代码:
void ESP8266_Init_after_SmartConfig(void)
{
ESP8266_Clear();
/* 关闭SmartConfig */
printf("1. CWSTOPSMART\r\n");
while(ESP8266_SendCmd("AT+CWSTOPSMART\r\n", "OK"))
delay_ms(500);
/* 开启 DHCP */
printf("2. AT+CWDHCP\r\n");
while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK"))
delay_ms(500);
/* 建立TCP连接 */
printf("3. CIPSTART\r\n");
while(ESP8266_SendCmd(ESP8266_TCP_INFO, "CONNECT"))
delay_ms(500);
printf("4. ESP8266 Init OK\r\n");
}
执行第一步关闭SmartConfig后,就看自行发挥了,本例执行TCP连接;
第三步ESP8266_TCP_INFO的宏定义如下:
#define ESP8266_TCP_INFO "AT+CIPSTART=\"TCP\",\"www.bilibili.com\",80\r\n"
例子使用的服务器地址: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 的位置,不包含终止符 '\0',该函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 NULL。
有无其它方法呢?欢迎留言讨论。
参考资料:
https://open.iot.10086.cn/bbs/thread-863-1-1.html
https://docs.ai-thinker.com/_media/esp8266/esp8266_at_instruction_set_cn.pdf