物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004

自从物联网 问世以来,如何使得物 能够联网 有了很多的方式,目前运用非常广的WIFI,今天就总结下自这个方面,也对于有需要的盆友 也希望有抛砖引玉之效果。

物联网: 智能硬件+APP+云

APP 需要配置wifi用户名 密码进入智能硬件,目前各个WIFI芯片厂家基本采用以下几种方式

1)TI 的smartconfig

2)AP模式: APP 配置 手机连接到 智能硬件(WIFI芯片 的AP),构建成一个局域网,当然该局域网是不能上网的,但是局域网内的各个设备的通信是OK

此时 该局域网内一般有三个设备(WIFI芯片工作在AP模式 或者是AP+STATION模式) 手机 智能硬件STATION模式---智能硬件的AP

先来说smartconfig吧 也就是所谓的一键配置,速度比AP模式快,为什么呢?请看下面分解。

所谓的smartconfig就是

手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,

智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密 出WIFI 用户名 密码,

然后智能硬件 配置受到的WIFI 用户名 密码到指定的WIFI AP 上。

AP模式比较不好的就是配置时间比smartconfig要长,手机连接的WIFI接入点会变化,如果配置不成功,手机就无法上网,需要在手动配置WIFI,手机才能上网。

ESP8266 芯片:SDK提供两种连接方式,

1)smartconfig 采用UDP广播模式(UDP接收IP地址是255.255.255.255)

esp8266先scan 下AP ,得到AP的相关信息,如工作的channel ,然后配置wifi芯片工作在刚才scan到的channel上去接收UDP包,如果没有接收到,继续配置ESP8266工作在另外的channel上,如此循环,直到收到UDP包为止,为什么要提前进行SCAN 下WIFI AP呢?就是为了提高配置效率。假设当前网络中只有两个AP,一个AP工作在CHANEL1,另外个 ap工作在channel13,我们现在需要配置智能硬件连接到AP2 ,就是channel13上,如果不提前scan就需要从1--13扫描浪费时间。就是需要从channel1-chane2 ---...channnel13一直扫描了,如果扫描了AP,芯片马上从AP CHANNNEL1 到channel13加快获取到UDP包;

2) AP接入

QCA4004芯片:kuaifi 连接也就是smartconfig 采用UDP组播模式( IP地址是组播即可,如239.0.0.254)

UDP广播模式跟组播的差异就不用说了,这是基本的TCP/IP东西,如果从安全角度看 UDP组播会安全点,当然目前 这方面还不需要考虑。

4004 跟ESP8266不同,它不行前期AP扫描,直接从1-2--。。13 循环配置区接收UDP包,并且UDP包采用组播

写了两个例子,加深理解

1) android 的app 用于配置4004 也就是UDP组播例子

2)UBUNTU LINUX下UDP 组播例子

UDP 组播例子源代码 可以百度下,非常多,我也是在那个上面修改的,理解了原理 最关键。


程序运行后 用wireshark 抓包分析下

见附件图片!!


Linux/athtestcmd.o: In function `setRateMask': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1185: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `addParm': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1194: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `addArrayParm': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1203: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `setPowerPerRateIndex': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:3011: undefined reference to `addParameterToCommand' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:3017: undefined reference to `addParameterToCommand' Linux/athtestcmd.o:/home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:3031: more undefined references to `addParameterToCommand' follow Linux/athtestcmd.o: In function `main': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1248: undefined reference to `addTLV2p0BinCmdParser' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1249: undefined reference to `addTLV2p0Encoder' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1250: undefined reference to `registerTPCCALRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1251: undefined reference to `registerTPCCALDATAHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1252: undefined reference to `registerREGREADRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1253: undefined reference to `registerREGWRITERSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1254: undefined reference to `registerBASICRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1255: undefined reference to `registerTXSTATUSRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1256: undefined reference to `registerRXSTATUSRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1257: undefined reference to `registerRXRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1258: undefined reference to `registerMEMREADRSPHandler' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1259: undefined reference to `registerMEMWRITERSPHandler'Linux/athtestcmd.o: In function `main': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2696: undefined reference to `tlv2AddParms' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2701: undefined reference to `tlv2AddParms' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2706: undefined reference to `tlv2AddParms' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2711: undefined reference to `tlv2AddParms' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2730: undefined reference to `createCommand' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2734: undefined reference to `addParameterToCommand' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2746: undefined reference to `createCommand' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2750: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `addParm': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1194: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `main': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2816: undefined reference to `tlv2AddParms' Linux/athtestcmd.o: In function `addParm': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1194: undefined reference to `addParameterToCommand' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:1194: undefined reference to `addParameterToCommand' Linux/athtestcmd.o: In function `main': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2909: undefined reference to `commandComplete' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/athtestcmd.c:2915: undefined reference to `tlv2CompleteCmdRsp' Linux/processRsp.o: In function `parseResponse': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:264: undefined reference to `getParams' Linux/processRsp.o: In function `parseTLVSubmitReport': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:289: undefined reference to `getParams' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:297: undefined reference to `getParams' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:309: undefined reference to `getParams' /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:317: undefined reference to `getParams' Linux/processRsp.o:/home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:325: more undefined references to `getParams' follow Linux/processRsp.o: In function `cmdReplyFunc_v2': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:639: undefined reference to `cmdStreamParsingAndProcessing' Linux/processRsp.o: In function `cmdReplyFunc': /home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv/processRsp.c:657: undefined reference to `initResponse' collect2: error: ld returned 1 exit status make[4]: *** [makefile.linux:97: Linux/athtestcmd] Error 1 make[4]: Leaving directory '/home/tplink/PLATFORM/sdk/qca/qca-wifi/halphy_tools/host/testcmd_tlv' make[3]: *** [Makefile:244: tools_build] Error 2 make[3]: Leaving directory '/home/tplink/PLATFORM/sdk/qca/qca-wifi' make[2]: *** [Makefile:259: qca-wifi_build] Error 2 make[2]: Leaving directory '/home/tplink/PLATFORM/sdk/build_dir/SPF_11.1_CS_vine5' make[1]: *** [qca/Makefile.wireless:220: qsdk_build] Error 2 make[1]: Leaving directory '/home/tplink/PLATFORM/build' make: *** [Makefile.eap:15: eap_develop] Error 2 编译报错
最新发布
11-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值