STM32 ESP8266 微信Airkiss智能配网连接WiFi并接入OneNET

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

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32ESP8266可以通过串口通信进行连接并与OneNet云平台进行通信。 首先,确保你已经在STM32ESP8266上分别烧录好了相应的固件,并设置好了他们的串口通信参数,例如波特率和数据位数。然后,准备一个可用的OneNet云平台账户,并创建一个设备以接收来自STM32ESP8266的数据。 要在STM32ESP8266之间建立串口通信,你必须将他们的TX(发送)和RX(接收)引脚连接起来。可以通过在STM32ESP8266之间连接一个USB转串口模块,并通过相应的杜邦线将它们的引脚连接起来。 接下来,你需要在STM32的代码中编写一段程序以将数据发送到ESP8266,并通过串口将其传递给OneNet云平台的服务器。你可以使用相关的STM32库函数或使用串口发送函数发送数据。确保将数据格式化为OneNet云平台要求的格式,并加入相应的身份验证信息或API密钥。 在ESP8266的代码中,你需要使用ESP8266库函数建立一个WiFi连接,并通过串口接收STM32传递过来的数据。然后,使用HTTP请求将数据发送到OneNet云平台的服务器。同样,确保数据格式正确并加入正确的身份验证信息或API密钥。 最后,你可以在OneNet云平台的控制台上查看接收到的数据,配置要展示的数据和图表,并设置相应的触发器和警报。你也可以通过OneNet的API获取数据,进行数据分析或进一步处理。 总之,通过串口通信,你可以在STM32ESP8266之间建立连接,并将数据传递给OneNet云平台,实现数据的监测和远程控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星水天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值