admin管理员组

文章数量:1530987

你是否还在直接将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工程

本文标签: 智能AIRKISSoneNETwifi