一种基于物联网Wi-Fi模块的配网方法
技术领域
本发明属于物联网领域,特别是涉及一种基于物联网Wi-Fi模块的配网方法。
背景技术
目前,各家智能家居产品大都采用物联网Wi-Fi模块无线连接路由器,相对于有线的路由器连接,其配网成功率低、配网时间长。问题原因主要有:路由器兼容性、物联网Wi-Fi模块热点稳定性、socket通信异常、、切换手机热点用户体验差等等原因。如果无法正常配网,则不能使用其功能,极大地影响了用户的体验效果。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是:优先采用物联网Wi-Fi模块的有线网模块与路由器连接,保证物联网Wi-Fi模块与路由器之间连接的稳定性和配网速度快的问题,当有线网模块与路由器断开,再启动无线Wi-Fi模块。
为实现上述目的,本发明提供一种基于物联网Wi-Fi模块的配网方法,其特征是在于:物联网Wi-Fi模块与有线网模块通过通信线连接,所述有线网模块与路由器有线连接;
物联网Wi-Fi模块检测有线网模块是否与路由器有线连接,当与路由器有线连接,启动有线网模块功能;当与路由器断开,则启动无线Wi-Fi模块
所述启动有线网模块包括如下步骤:
移动终端与有线网模块建立链接;
所述移动终端获取并保存路由器的信息,对获取的路由器信息进行数据组合,并将组合信息发送给有线网模块;
所述有线网模块接收移动终端发出的组合信息。
所述移动终端与有线网模块建立链接按如下步骤进行:
A1.有线网模块启动热点功能,建立socket server;
A2.移动终端连接有线网模块的热点,向有线网模块的端口发起链接请求;
A3.有线网模块端接收并接受移动终端的链接请求。
所述移动终端对获取的路由器信息进行第一次数据组合,格式及顺序为:BSSID的长度、BSSID数据、密码的长度、密码数据。将此数据组合在一起形成数据Rdata,长度为Rlen。
打包数据时,生成1到7的随机整数做为加密值,对Rdata数据循环左移加密值位形成数据RdataA,长度是Rlen。
进行第二次数据组合,格式和顺序如下:数据串总长度Alen、WiFi模块ID的数据长度、需要配置的通信模块的ID、加密值、RdataA、数据校验值;将此数据组合在一起形成数据串Adata,其总长度是Alen;对Adata数据中去掉最后1个字节的数据进行校验,得出的值计入数据校验值。
组合数据发送方式为:离散模式基于UDP协议进行数据传输,基于组播地址和组播长度传递数据。
本发明的有益效果是:优先采用物联网Wi-Fi模块通过有线网模块与路由器连接的方式,保证物联网Wi-Fi模块与路由器之间连接的稳定性和配网速度快;当有线网模块与路由器断开时,再启动无线Wi-Fi模块执行配网功能。以上方案,无论是通过物联网Wi-Fi模块的有线网模块或是无线Wi-Fi模块,都可以实现对家电的控制功能。有效地解决了:物联网Wi-Fi模块只能与路由器无线连接,而移动终端和Wi-Fi模块配网的由于兼容性问题、Wi-Fi模块热点稳定性、socket通信异常等原因,导致配网时间长或是配网不成功给用户体验带来的问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是本发明一实施例有线以太网模块配网方法流程图;
图2是本发明一实施例网络拓扑示意图;
图3是本发明一实施例物联网Wi-Fi模块和有线以太网模块网络切换流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步说明:
一种基于物联网Wi-Fi模块的配网方法,其特征是在于:物联网Wi-Fi模块与有线网模块通过通信线连接,所述有线网模块与路由器有线连接;
物联网Wi-Fi模块检测有线网模块是否与路由器有线连接,当与路由器有线连接,启动有线网模块功能;当与路由器断开,则启动无线Wi-Fi模块
所述启动有线网模块包括如下步骤:
移动终端与有线网模块建立链接;
所述移动终端获取并保存路由器的信息,对获取的路由器信息进行数据组合,并将组合信息发送给有线网模块;
所述有线网模块接收移动终端发出的组合信息。
所述移动终端与有线网模块建立链接按如下步骤进行:
A1.有线网模块启动热点功能,建立socket server;
A2.移动终端连接有线网模块的热点,向有线网模块的端口发起链接请求;
A3.有线网模块端接收并接受移动终端的链接请求。
所述移动终端对获取的路由器信息进行第一次数据组合,格式及顺序为:BSSID的长度、BSSID数据、密码的长度、密码数据。将此数据组合在一起形成数据Rdata,长度为Rlen。
打包数据时,生成1到7的随机整数做为加密值,对Rdata数据循环左移加密值位形成数据RdataA,长度是Rlen。
进行第二次数据组合,格式和顺序如下:数据串总长度Alen、WiFi模块ID的数据长度、需要配置的通信模块的ID、加密值、RdataA、数据校验值;将此数据组合在一起形成数据串Adata,其总长度是Alen;对Adata数据中去掉最后1个字节的数据进行校验,得出的值计入数据校验值。
组合数据发送方式为:离散模式基于UDP协议进行数据传输,基于组播地址和组播长度传递数据。
所述路由器的信息主要为:路由器的SSID和password,SSID是Service SetIdentifier的缩写,中文意思是:服务集标识,password的中文意思是:密码;所述socketserver为端口服务器,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket;所述BSSID,也称为BSS,BSS是Basic Service Set的缩写,每个BSS都会被赋予一个BSSID。所述移动终端可以配合APP获取、保存路由器的信息,也可通过APP发出路由器组合信息,当然也可以用其他类似途径获得和发出路由器的信息,此为属于现有技术,在此不做赘述。
如图1-2所示,本实施例具体步骤如下:
1.物联网Wi-Fi模块与有线以太网模块以通信总线双向连接,有线以太网模块与路由器有线连接;
2.物联网Wi-Fi模块检测有线网模块是否与路由器有线连接,当与路由器有线连接,启动有线以太网模块功能,执行下一步;当与路由器断开,则退出有线配网过程,启动无线Wi-Fi模块执行配网。
3.有线以太网模块建立一个固定端口的TCP socket server,并执行bind和linsten,即监听client发过来的链接请求;
4.打开手机APP,建立client的TCP socket,并向固定端口发起TCP连接请求,所述固定端口和有线以太网模块的固定端口相同;
5.有线以太网模块端接收并接受TCP连接请求,这样,有线以太网模块与手机建立了TCP的连接;
6.手机APP通过android或ios接口获取到所连接的路由器的SSID,并且提示用户输入正确的密码,并对路由器的SSID和password按照规则进行加密和信息组合;
7.手机APP把信息组合通过TCP socket发送给有线以太网模块端;
8.有线以太网模块端接收到手机APP的信息组合,并按照信息组合规则进行解析,从而得到路由器的路由器的SSID和password;
9.有线以太网模块连接路由器,并把Wi-Fi MAC地址上报到云端,从而“物联网Wi-Fi模块的有线以太网模块——云——手机APP”建立绑定关系。
所述bind的中文意思是:绑定;所述linsten中文意思是:监听;所述client中文意思是:客户端。
通过上述步骤,无论是通过物联网Wi-Fi模块的有线网模块或是无线Wi-Fi模块,都可以实现对家电的控制功能。有线方式配网的优点是:稳定性强,没有手机与物联网Wi-Fi模块配网的兼容性问题,且配网速度快。采用此方案,模块成功拿到路由器的SSID和password成功率是100%,物联网Wi-Fi模块连接路由器的成功率大于98%,而物联网Wi-Fi模块配网方式的成功率为90%。
如图3所示,本实施例的有线以太网模块与无线Wi-Fi模块切换流程图如下:
1.物联网Wi-Fi模块上电;
2.物联网Wi-Fi模块判断有线以太网模块是否已配网,判断方法可以是从内存中读取路由器的SSID和password。当内存中没有路由器的SSID和password信息,说明没有配过网,则执行配网过程;如果有路由器的SSID和password信息,说明已配网,则执行下一步;
3.判断有线以太网模块是否与路由器连接。当有线以太网模块与路由器连接,则启动有线以太网功能,并连接云端;当有线以太网模块与路由器断开,则启动无线Wi-Fi模块功能,并连接云端。
所述信息组合方式为:第一次数据组合,格式及顺序为:BSSID的长度、BSSID数据、密码的长度、密码数据,BSSID的长度为1字节,BSSID数据长度为BSSID len字节,密码的长度为1字节,密码数据长度为Password长度字节。将此数据组合在一起形成数据Rdata,长度为Rlen。在打包数据时生成1到7的随机整数做为加密值KeyType,对Rdata数据循环左移KeyType位形成数据RdataA,长度是Rlen。第二次数据组合,格式和顺序如下:数据总长度Alen、WiFi模块ID的数据长度、需要配置的通信模块的ID、加密值、RdataA、数据校验值CH,数据总长度Alen长度为1字节,WiFi模块ID的数据长度为1字节,需要配置的通信模块的ID长度为DevID len字节,加密值长度为1字节,RdataA长度为Rlen字节,数据校验值CH长度为1字节。将此数据组合在一起形成所有数据Adata,总长度Alen的值为1+1+Dev ID len+1+Rlen+1;对Adata数据中去掉最后1个字节的数据进行校验,得出的值计入数据校验值CH,所述校验值CH长度为1字节;Adata就是需要传输的整体数据,长度为Alen,Alen最大长度为255;生成数据校验值CH的数据校验方法是对数据采用异或运算计算出来的,示意代码如下:for(int i=0;i<len;i++)ch^=data[i];CH初始值为0。组合数据发送方式为:离散模式基于UDP协议进行数据传输,基于组播地址和组播长度传递数据,组播端口号为:5040。对Adata数据从前到后每12bit一组形成一个包发送,每个包都有一个序号,序号从0开始,顺序为0、1、2、3、4…最后一个包的序号为:(Alen*2+2)/3-1。序号用两个数代替N1和N2,为N1*7+N2,N2为0到6的数。为了标记第一包,第一包的N2为7。每一个包都包含一个完整字节数据Ai和4个bit数据Bi,当最后一个包数据不足12bit时,不足的全是0。对每个包的数据进行校验生成一个字节的校验码CH。校验规则为数据Ai和数据Bi异或运算。假设一个包序号为N1i、N2i,校验码为Ci,数据Ai为:8bit)、数据Bi为:4bit。组播地址以229开头,为229.x1.x2.x3,数据长度为Len,是针对一个组播地址发送数据的长度,利用x1、x2、x3、Len来传递一包的数据。x1的最高两位设为0,最高两位为:第8位和第7位,第6位记录数据Ai的最高位,第5位记录校验码Ci的第5位;x2的数据为数据Ai的第7位;x3的第4位记录数据Bi的数据,第5位、第6位和第7位记录序号N2i的值;长度Len为N1+1。通信模块比较时只需比较校验码的后5位。下面是分包示例:原始数据0x120x34 0x56 0x78 0x9A分成4包数据,分别为0x12 0x03、0x56 0x04、0x78 0x09、0x00 0x0A,序号N1和序号N2分别对应0 7、0 1、0 2、03。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。