ESP使用UDP多播组播实现SmartConfig一键配网

起因

之前有尝试过乐鑫官方提供的smartconfig,效果并不是很理想,后来也使用巴法云的一键配网功能,想重新学习原理并实现这个功能,但发现网上关于UDP组播的方式文章很好,很多都是使用广播方式发送WIFI信息,因此就重新自己做了程序并记录一下。
目前实现的效果为:使ESP8266进入混杂模式,然后使用UDP程序发送组播信息,得到并解析出路由器的SSID和PWD信息!后续就能使用这个账号密码来连接WIFI了

最后实现的是组播方式发送信息,且每一个数据包带上校验和。第一个数据包为数据总长度,第二个为SSID长度,后边为SSID和PWD数据。

网上有很多文章已经很完整解释了一键配网的基本原理,这里就简单记录用到的内容。

常用的配网方式

1、AP配网:ESP等WIFI芯片开启AP模式,然后手机连接上这个AP并通过TCP等发送路由器SSID和PWD信息到芯片,WIFI芯片接收到后切换到STA模式并连接到对应WIFI,这个方式的缺点是步骤麻烦,不过也相对稳定!可以通过强制门户功能使手机在连接上AP之后直接打开配网网页!

2、一键配网:用户直接通过已经连接路由器的手机或者其他工具发送UDP广播或多播信息,处于混杂模式(WiFi Promiscuous)的WIFI芯片会接收并解析相应信息后得到了联网SSID和PWD信息,然后进行联网操作。

3、蓝牙配网等:通过蓝牙或者其他方式将配网信息发送到WIFI芯片并进行联网。

流程实现

1、 先复制乐鑫SDK下的 examples/wifi/sniffer 混杂实验到测试目录,并编译。
2、 通过网络工具的UDP功能向 239.0.0.1:18226 发送任意数据,这里就发送一个字符,此时路由器会发送组播信息。
3、 使用Wireshark等工具查看当前IP所发送的UDP数据包,发现有个 0x01 0x00 0x05 ... 的数据包,这就是组播数据包。
4、 对ESP接收到的数据进行解析,截取 0x01 0x00 0x05 ... 开头的6组数据,这个其实是 这个 239.0.0.1 对应的MAC地址。
5、 后续只要对 UDP地址进行调整即可得到相应的信息。
 

编译修改ESP的sniffer工程

正常ESP环境搭建好的话编译是没有问题的。
需要修改的是实现方式。

注意:开始使用了默认方式老是接收不到有效UDP信息,后来先尝试全开然后发现 CONFIG_FILTER_MASK_DATA 这个模式下才能接收到。

数据格式为:0x01-0x00-0x5e-index-char-checksum

其中: 0x01-0x00-0x5e:组播固定MAC;index:数据编号;char:有效字符;checksum:校验和

SSID和PWD字符串转换工具

写了个程序将SSID和PWD转换成IP并通过UDP组播发送出去。

即只需要根据SSID和PWD字符串中的每个字符来更改IP地址的后3位就能得到不一样的MAC后三位数据,也就是最终对应的char。

ESP接收解析

ESP在没接收到一组信息时会一直变换信道,分别从1-12不断变化,直到有一组数据正确后就会停留在当前信道20秒,若20秒内一直没有等到数据则需要重新调整信道来接收数据。

根据相应信息编码就可得到联网所需的SSID和PWD信息,进一步设置STA即可完成联网!

实现效果

下图为信道刷新
当一直接收不到信息时,将会每秒调整信道,用以查到信道位置。

下图是ESP打印出接收到的有效SSID和PWD信息

发送的信息为 MySSID 和 My877 ,ESP所接收到的也是一样,同时打印出当前为12信道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值