STM32+ESP8266 AT指令配网-SmartConfig

硬件使用的是STM32、ESP-01S(出厂AT固件);

连线:

STM32ESP-01S
UART-TXRX
UART-RXTX
VCC-3.33.3
GNDGND

 

代码如下:

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

  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值