物联网wifi模块一键配置

为什么会有一键配置?
     对于IOT wifi 模块,基于成本和性能考虑,并没有类似手机一样有触摸屏交互接口,用户可以在手机看到ap 列表,点击输入密码,就可以连上网络,那怎么办? 一种办法就是AP配置,即wifi 处于AP 模式, 手机连接wifi 模块,通过TCP/UDP 通信将 将要连接路由器的SSID 和 密码发给wifi 模块,然后wifi 模块切换模式连接该路由器,与AP 模式对应的就是一键配置,一键配置是wifi 模块在混杂模式下(可以抓取空中所有的802.11帧), APP 通过UDP 广播或者组播通过一定的编码规则将SSID 和密码发给wifi模块,模块解析出来,然后连接路由器

首先 wifi 模块处于混杂模式,一种就是在13个信道,等时切换,如200ms 切换一下,轮询13个信道(一种是1,6,11 加大权重,大多数路由器会在1,6,11 不重叠信道,还有一种方式,先扫描所有路由器,看看那些信道有路由器,就在那些信道切换,具体切换信道时间,与wifi模块抓包性能有关),当wifi 在某一信道收到手机发的包(组播或广播),就锁定该信道,在该信道收包,解析出完整的数据

对于手机发出的组播,广播包,由于路由器的加密方式未知,所以对于802.11 数据帧的数据区数据,我们是无法得到具体数据的内容的,所以需要靠其他办法来发送数据,拿不到内容,但是是可以知道数据的长度(UDP 发出后,因加密方式的不同,报文长度就会有对应的偏移)

1) 组播发包:  组播地址范围为224.0.0.0 ~ 239.255.255.255   映射到MAC地址为:01:00:5e:xx:xx:xx (低23bit 直接映射),抓到802.11包后MAC 是可以拿到的,那么IP 也是可以知道的,这样的话,我们可以通过IP 地址将SSID  和 passwd 发送过去,通过解析mac 拿到SSID 和 PASSWD, 由于数据一次只能发送23bit,所以我们需要保证数据有序,23bit 里面需要包含index ,所以可以这样设计:01:00:5e:index(7bit),data[index]:data[index+1]
数组如何设计呢? 如:data[0] 为长度, data[1] 为校验,data[2]-data[n] 为具体数据,  APP 按顺序发包,wifi 可以无序收包解析,拿到SSID 和PASSWD

2)广播或单播发包: 可以利用的数据只有 数据的长度,如何利用长度将SSID 和PASSWD 发送给wifi模块呢?一次只能拿到一个长度(10bit),我们是一个序列,即每一个数据都应该都有一个固定的位置,怎么做呢,10bit, ASCII 7bit ,剩余3bit 并无法表示index,那么将byte 数组 bit 序列化,每次少发几bit的数据,  留足够的bit 为作为index,这样就可以拿到有序的数据了,具体实现就是算法的问题,不再细说

3) 对于以上两种配置方式,主要是用802.11 的数据帧,那么能否使用管理帧呢? 管理帧是不加密的,优势明显,明显是可以的,只是安卓手机限制太多,可以让路由器支持该模式,这里不细说(管理帧,可以好好利用,可以做很多工作)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值