Blinker中的ESPTOUCH(SmartConfig)一键配网的实现

几天前写过一篇关于对Blinker的一键配网的不解。今天终于搞明白了它的机制,赶紧写下来,和大家分享一下。
由于原来我是在Blynk平台上做8266的开发的。对于8266上的SmartConfig的流程和实现比较了解,这也因此会抱着原来的思维方式去理解Blinker的一键配网。老的思维太根深地固了,所以阻碍了对新事务的正确理解。。言规正传,下面把Blinker的一键配网的实现和逻辑讲一下。
首先,所有的一键配网方式都 差不多,本质是一样的,只不过是名字不太一样,所以把人搞得云里雾里,以为是多么先进的方法。
本质上讲,智能硬件同时处于AP+STA模式下,并同时,监听网络中的所有报文;手机 APP 将 SSID 和密码编码到 UDP 报文中,通过广播包或组播报发送,智能硬件接收到 UDP 报文后解码,得到正确的 SSID 和密码,然后主动连接指定 SSID 的路由完成连接。
连接步骤:
1、智能硬件设备初始化并进入 AP 模式
2、手机扫描 WIFI 列表:扫描到智能硬件设备后(SSID)连接该智能硬件设备,通过 UDP 发送 经过 AES 加密过的 ssid/password/token
3、智能硬件设备通过 UDP 包获取配置信息,切换网络模式连接 WIFI 后配网完成

这两段是网络上找的,了解个大概就行了。因为现在厂家把这些底层的能力都已封装好了,本质按上述的原理,因封装的原因而使实现上千差万别。下面就把Blinker的官方例程拿 出来解释:

//ESPTOUCH_WIFI
#define BLINKER_WIFI
#define BLINKER_ESP_SMARTCONFIG
#include <Blinker.h>
#include <EEPROM.h>
char auth[] = "91c6abeebf00";
void dataRead(const String & data){
    
    
......
}

void setup(){
    
      
。。。。。
  Blinker.begin(auth);
  。。。。
}
void loop(){
    
    
  Blinker.run();

}

上面这段省略了多余的代码,主要是看相关的重点。第一个重点就是上面的宏
#define BLINKER_ESP_SMARTCONFIG它使得整句看不到类似8266的标准备语句smartconfig.begin()等就在不声不响中进入了一键配网的模式。这就是最大的不同。所以熟悉了老方式的我,一开头始终不能理解的原因。
第二个重点就是上面的Blinker.begin(auth),这个语句省略了后面的SSID和PASSWORD。
以上这两点使得设备进入一种更智能的工作方式。
1、当首次启动,8266会直接进入一键配网的模式,这时你按官网的链接里说的方式进行一键配网。具体就是手机先登到你希望8266连上的目标WIFI,这里假设是 A_WIFI ,然后打开开发者工具弹开快速配置界面,然后输入该网络的密码,点完确定后就等待自动搞定。一般网络信号好时,5秒内就能连上。这时你会发现你的8266已经可以联网了,开始工作了。
2、当再次reset或重新上电后,8266会自动按原来你配网时告诉它的SSID和PASSWORD去联网。这一切都是自动的。这里就不需要像有些做法,需要人为的把SSID和PASSWORD存入EEPROM里去。
3、当某次8266重启,或你想连接到其它WIFI上时,那么必须在8266上电找不到原来的这个A_WIFI网络,20秒后,8266才又重新进入了一键配网的等待模式,你就可以重新第1步的做法去一键 配网了。

好了,说到这里,我认为我已把Blinker上的一键配网讲清楚了。上面这些内容对于熟悉Blinker的人可能感觉 很简单 ,但是对于有过Blynk开发经历的人可能会比较费解,因为Blinker的封装做得太深,太过智能了。很多有老经验的人接受起来会比较费劲,不过再费劲也不是那么难理解的,只要点破了,就简单 了。

猜你喜欢

转载自blog.csdn.net/weixin_45499326/article/details/109606080