赞
踩
你是否还在直接将wifi的ssid和密码直接写入STM32程序中通过串口发送给ESP8266?本文教你用微信Airkiss协议实现可视化地为ESP8266发送WiFi ssid和密码信息并连接WiFi,并使STM32主控设备接入OneNET。
微信Airkiss协议是微信提供的一款为设备配网的技术。它为ESP8266配网的原理可以简单理解为:微信尽管不知道我们所使用的ESP8266的物理地址,但以Airkiss协议发送WiFi信息后,只要ESP8266工作在Station混杂模式下(开启了SmartConfig功能),它就能把所有数据包都抓取下来并进行分析,而不管这个数据包是不是发送给它的,直到找到需要的WiFi信息。
目前,微信对Airkiss协议的支持并不是很完善,微信小程序似乎暂不支持Airkiss协议,但可以使用公众号实现。安信可科技公众号提供了微信Airkiss配网的功能,可以直接用这个公众号或者自己申请一个公众号。
使用流程:手机先连接到你想要让ESP8266连接的那个WiFi,进入公众号,点击应用开发-微信配网,输入WiFi密码,然后等待一段时间之后ESP8266就能连接上这个WiFi了,此时手机上会显示连接成功。
注意:这个功能只有安信可科技开发的ESP8266模组支持,正点原子的ESP8266由于也使用了安信可的模组,所以也是支持的。但是像ESP8266-01s是不支持的。
上述的配网过程需要ESP8266开启了SmartConfig模式,如果你使用STM32作为主控连接ESP8266,那么其中一种方式是在上电之后通过串口发送AT指令,使ESP8266开启SmartConfig功能。
查阅ESP8266 AT指令文档:
1.AT+CWSTARTSMART开启SmartConfig功能
但这个指令仅支持ESP8266在单station模式下使用,因此在使用该指令前,需要将ESP8266配置为STATION模式。
2.AT+CWMODE=1配置为station模式
当然在发送这些指令之前惯例采用以下命令做个初始化
3.AT+RST 重启ESP8266
连上WiFi之后,需要关闭SmartConfig才能使用其他AT指令,如果WiFi连接成功,会通过串口返回connected,以此作为判断依据。
4.AT+CWSTOPSMART
接下来就可以使用其他指令配置ESP8266与OneNET连接了。
主函数:
void Net_Init()
{
ESP8266_Init_SmartConfig();
while(strstr((char *)esp8266_buf, "connected") == NULL)
delay_ms(500);
//每500ms检测一次是否成功连接wifi
ESP8266_Init_after_SmartConfig(); //成功连接wifi后,与onenet服务器建立TCP连接
while(OneNet_DevLink()) //每500ms尝试接入OneNET一次,直至成功
delay_ms(500);
LED0 = 0; //入网成功,LED0亮
}
SmartConfig配置以及OneNET连接的实现:
void ESP8266_Init_SmartConfig(void) { ESP8266_Clear(); /* AT测试 */ printf("0. AT\r\n"); ESP8266_SendCmd("AT\r\n","OK",200); delay_ms(500); /* 重启 */ printf("1. RST\r\n"); ESP8266_SendCmd("AT+RST\r\n","OK",200); 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",200)) delay_ms(500); /* 开启SmartConfig */ printf("4. CWSTARTSMART\r\n"); while(ESP8266_SendCmd("AT+CWSTARTSMART=3\r\n","OK",200)) delay_ms(500); }
void ESP8266_Init_after_SmartConfig(void) { ESP8266_Clear(); /* 关闭SmartConfig */ printf("1. CWSTOPSMART\r\n"); while(ESP8266_SendCmd("AT+CWSTOPSMART\r\n", "OK",200)) delay_ms(500); /* 开启 DHCP */ printf("AT+CWDHCP\r\n"); while(ESP8266_SendCmd("AT+CWDHCP=1,1\r\n", "OK", 200)) //开启DHCP delay_ms(500); /* 建立与OneNet服务器的TCP连接 */ printf("CIPSTART\r\n"); while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT", 200)) delay_ms(500); printf("ESP8266 Init OK\r\n"); }
点击下载完整的Keil工程文件:
完整的Keil工程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。