物联网设备快速入网的方式

        现在物联网处于一个快速发展的时期,而设备入网的方式影响着产品的用户体验。

市场面上现有的入网方式有:

1.wifi模块开启ap模式,然后通过网页登陆wifi模块的后台,通过网页配置路由器的账号密码接入网络,随后设备切换成station模式去连接服务器;


2.wifi模块里面集成了airkiss协议,通过手机的微信把路由器的账号密码传给wifi模块。

Air Kiss技术原理简介

802.11IEEE制定的无线局域网协议,802.11802.2的逻辑链路控制封装来携带IP封包,因此能够以802.2 SNAP格式接收无线网络数据。如果开启wifi芯片的混杂模式监听空间中的无线信号,并以802.2 SNAP格式从数据链路层截取数据,就会得到如下图所示的数据包:

物联网设备快速入网的方式

DA字段表示目标mac地址,SA字段表示源mac地址,Length字段表示后面数据的长度,LLC字段表示LLC头,SNAP字段包括3bytes的厂商代码和2bytes的协议类型标识,DATA字段为负载,对于加密信道来说是密文的,FCS字段表示帧检验序列。

从无线信号监听方的角度来说,不管无线信道有没有加密,DASALengthLLCSNAPFCS字段总是暴露的,因此信号监听方便有了从这6个字段获取信息的可能。但从发送方的角度来说,由于操作系统的限制(比如ISO或者Android)DASALLCSNAPFCS五个字段的控制需要很高的控制权限,发送方一般是很难拿到的。因此只剩下Length这一字段,发送方可以通过改变其所需要发送数据包的长度进行很方便的控制。所以,只要制定出一套利用长度编码的通信协议,就可利用802.2 SNAP 数据包中的Length字段进行信息传递。

在实际应用中,我们采用UDP广播包作为信息的载体。信息发送方向空间中发送一系列的UDP广播包,其中每一包的长度(Length字段)都按照Air Kiss通信协议进行编码,信息接收方利用混杂模式监听空间中的无线信号,并从数据链路层截取802.2 SNAP格式数据包,便可得到已编码的Length字段,随后接收方便可根据Air Kiss通信协议解析出需要的信息。整个过程如下图所示:

 物联网设备快速入网的方式

3.wifi模块集成smartlink协议,通过手机app把路由器账号密码传给wifi模块。

基本思想就是利用广播包,我们知道以太网在最底层是以太网数据包,无线则更是广播包,天线发送数据包到空中,接收端接收到数据包,然后处理,供各层使用。
  在应用层,UDP协议可以发送广播包,所以,APP或者PC程序,发送一个UDP数据包,在包中放置SSID跟密码,然后插座接受到该包之后,解析包,获得SSID跟密码,就可以配置自己,链接路由器了。
  花了五个小时分析了汉枫的模块SmartLink的实现细节;
协议用了UDP广播数据包,手机向本地广播地址,端口49999,发送特定编码的数据包;
  显然,模块可以嗅探到该数据包,无线数据包中已经包含了SSID,以及加密方式,所以,模块仅仅需要从数据包中推算出密码,就可以成功连接本地AP了。
  汉枫用了一个很傻的效率较低的协议;
  将每一个密码字符编码为UDP包负载的字节数,一个回车,一个换行以及密码字节数;一个会话发送四次,再发送仅包含smartconfig的字符串的UDP包,如果模块配置成功,则回复包含mac地址的UDP包,手机从而知道了mac地址跟IP地址。
  看似复杂,但仍然很容易猜测到,所以说很傻;其实单数据包编码所有密码发送,效率最高,smartlink速度最快。。此次协议分析,也让我得到了一个很可怕的结论,如果明文发送密码,那即使别人不知道WIFI密码,也可以嗅探到明文数据包,很为手机软件的安全性担心。。


4.wifi模块集成esp touch协议(smart config技术),通过手机app把路由器账号密码传给wifi模块。

物联网设备快速入网的方式 

ESP-TOUCH是Espressif公司自主研究的一键智能配网工具,帮助用户将使用ESP8266的硬件产品连接Wi-Fi网络。用户只需在手机上配合硬件产品进行简单的操作即可实现智能配网连接Wi-Fi路由。

目前app是开源的,AndroidiOS代码均可在github上下载到,设备端RTOS版本SDK和NON_OS版本SDK使用同样的ESP-TOUCH。下载地址如下:

安卓

https://github.com/EspressifApp/ESP-TOUCHForAndroid

最新版本:0.3.4.5

ios

https://github.com/EspressifApp/ESP-TOUCHForIOS

最新版本:0.3.5.1

正式版app也可以各大应用市场下载到。同时ESP-TOUCH用户指南手册可在Espressif官网下载到,目前最新版本为30b-esp-touch_user_guide_cn_v1.1_20160412.pdf目前官方对ESP-TOUCH持续优化中,应用时请使用最新版本的代码。

ESP-TOUCH的设备端解码Espressif没有开源,提供的是一个smartconfig.a文件,但提供了sniffer接口供需要自己开发的键配网协议的用户使用。sniffer接口使用指南也可在Espressif官网下载到,详见esp8266-technical_reference_cn.pdf的第14章《sniffer应用设计说明》以及20a-esp8266_rtos_sdk_programming_guide_cn.pdf的第4部分《sniffer结构体说明》。


由于设备一开始并未连接Wi-Fi网络,ESP-TOUCH无法直接向设备发送数据,ESP-TOUCH只能通过向手机当前接入的AP发送一系列UDP,其中每一包的长度(Length字段)都按照ESP-TOUCH的通讯协议编码,SSID和密码就包含在Length字段中

 物联网设备快速入网的方式

MTU长度限制,一个udp数据包Length最大只能传输10bit数据(最大1500byte),udp数据包长度和丢包率/乱序率成正比,即数据包长度越长,丢包率/乱序率越高,所有一般将最大数据包长度限制在9bit以内

此时设备应工作在在混杂模式下,才能接收到ESP-TOUCH发送的数据包.在混杂模式下,设备将收到当前环境下所有环境下所有Wi-Fi设备(AP/STATION)数据,需要通过一定的算法,才能正确的识别到ESP-TOUCH的数据包.


5.wifi模块集成airlink协议,通过手机app把路由器账号密码传给wifi模块。

GoKit二代同样可以直接使用机智云提供的现成APP进行配置板卡无线连接(APP可以通过机智云官网下载),具体的流程与一代一样(GoKit一代),不过,尽管如此,GoKit二代的资料还是属于在慢慢完善中,笔者在第一次配置二代的Wifi模块的AirLink网络模式时也遇到了点问题,跟一代的操作还是有些区别的。

GoKit一代是通过按一下KEY2按键进入AirLink网络配置模式,而二代则要通过按住KEY2按键,直到RGB LED点亮绿色才能进行下一步操作,如下图所示。

物联网设备快速入网的方式

剩下的配置就和一代完全一样,通过APP提示一步一步操作即可。有兴趣的可以参考GoKit一代的评测文章,配置完就可以通过手机APP来实现对板卡的控制,如启动电机,调节电机转速,点亮RGB LED等。

物联网设备快速入网的方式

物联网设备快速入网的方式



参考资料:

1.ESP-TOUCH编码规则及解码

2.【安卓学习之第三方库】wifi模块 之 SmartLink

3.Air Kiss(飞吻)技术实现方案