当下,很多嵌入式设备都需要通过配网来与网络连接,从而实现远程控制、数据传输等功能。
下面,我们就来深入了解一下嵌入式设备配网的相关知识。
一、热门配网方案解析
配网方式有多种,常见的有:
1、smartconfig
smartconfig配网的原理是利用手机等终端设备将网络信息(SSID 和密码等信息)通过广播的方式发送出去,嵌入式设备通过监听周围的无线信号,解析出网络信息,从而实现配网。
smartconfig配网设备创建热点,设备直接从周围的无线环境中获取网络信息,操作更加简便。
- 优点:操作简单,用户体验好;适用于各种复杂的网络环境。
- 缺点:对设备的无线接收能力要求较高,可能存在信息解析失败的情况。
- 适用场景:广泛应用于各类智能设备,如智能摄像头、智能音箱等。
2、SoftAP
AP(Access Point)模式配网,也称为热点模式配网。其原理是嵌入式设备自身创建一个无线热点,用户通过手机或其他终端设备连接到这个热点,然后在终端设备上输入目标网络(如家庭 WiFi)的信息,设备接收到这些信息后,就会尝试连接到目标网络。
- 优点:简单直接,不需要额外的网络环境支持。
- 缺点:每次配网都需要设备进入 AP 模式,操作相对繁琐;设备创建的热点覆盖范围有限。
- 适用场景:适用于小型、简单的嵌入式设备,如智能插座、智能灯泡等。
3、Combo配网模式
Combo 配网模式融合了多种配网方式的优势,其中 WiFi、蓝牙配网方式凭借其独特的组合,为用户带来了高效且稳定的配网体验。其核心在于设备同时搭载 WiFi 及蓝牙模块,APP 借助蓝牙将设备所需连接的路由器 SSID 及密码发送给设备。
- 优点:蓝牙技术在近距离通信上具有稳定性高、功耗低的特点,能有效避免无线信号干扰,确保网络信息准确传输;而 WiFi 则负责设备后续的高速网络连接,保障数据传输效率。两者结合,不仅提升了配网成功率,还降低了用户手动输入信息的错误率,简化了操作步骤。
- 缺点:设备需集成两种通信模块,增加了硬件成本和设备功耗,同时也对软件的兼容性和稳定性提出了更高要求。
- 适用场景:适用于对配网稳定性和用户体验要求较高的中高端嵌入式设备,智能家庭中枢、智能穿戴设备等。
4、其它
NFC 配网:利用 NFC(Near Field Communication)技术,通过近距离接触来传输网络信息。用户只需将支持 NFC 的手机靠近嵌入式设备,手机就会将网络信息传输给设备,实现快速配网。例如,一些智能门锁就支持 NFC 配网,用户在安装门锁时,通过手机的 NFC 功能即可轻松完成配网。
声波识别配网:将网络信息编码成特定频率的声波,通过手机等设备播放出来,嵌入式设备通过麦克风接收声波并解析出网络信息。这种方式在一些对无线信号敏感的环境中具有一定的优势,如医院、工厂等。
二、WiFi相关知识
WiFi 的起源可以追溯到上世纪 90 年代,它是基于 IEEE 802.11 标准的无线局域网技术。
1、802.11 协议标准
802.11 协议族包含了多个成员,如 802.11a、802.11b、802.11g、802.11n、802.11ac、802.11ax(WiFi 6)等。
不同后缀的标准在工作频段和传输速率上存在差异。例如,802.11a 工作在 5G 频段,传输速率最高可达 54Mbps;802.11b 工作在 2.4G 频段,传输速率最高可达 11Mbps。
802.11 协议族部分成员关系:
2、WiFi 相关术语
WiFi 相关术语很多,相互关联构成完整体系。
- LAN(Local Area Network):局域网,是在有限范围内(如一个办公室、一栋楼)建立的计算机网络,用于实现设备之间的通信和资源共享。
- WAN(Wide Area Network):广域网,覆盖范围较大,通常用于连接不同的局域网,实现更大范围的网络通信。
- Band(频段):指 WiFi 工作的频率范围,常见的有 2.4G 频段和 5G 频段。
- Channel(信道):在频段内划分的不同频率范围,用于无线信号的传输。
- Channel Width(信道宽度):指信道占用的频率带宽,不同的 802.11 标准支持不同的信道宽度,如 20MHz、40MHz、80MHz 等。
- 无线 AP(Access Point):无线接入点,是一种无线网络设备,用于将无线客户端连接到有线网络,起到桥梁的作用。
- Station(STA):无线客户端,如手机、笔记本电脑等设备,通过无线方式连接到无线 AP。
- SSID(Service Set Identifier):服务集标识符,即无线网络的名称,用户通过搜索 SSID 来找到并连接到相应的无线网络。
- BSSID(Basic Service Set Identifier):基本服务集标识符,是无线 AP 的 MAC 地址,用于唯一标识一个无线 AP。
- BSS(Basic Service Set):基本服务集,由一个无线 AP 和与其连接的所有无线客户端组成的网络。
- MAC(Media Access Control):媒体访问控制,是网络设备的物理地址,用于在数据链路层进行设备识别。
3、WiFi 信道与频段
三、配网实践
SmartLink是一个在Linux下实现的smartconfig。手机发送UDP广播报文,待配网设备扫描所有的可用无线信道,找到发送smartConfig的报文,并锁定在这一信道上开始接受数据。
仓库链接:
https://github.com/jolin90/smartconfig
1、相关知识补充
(1)网卡工作模式
- 广播模式:物理地址(MAC)是0Xffffff的帧为广播帧,工作在广播模式的网卡接收广播帧。
- 多播模式:如果将网卡设置为多播模式,它可以接收所有的多播传送帧,而不论他是不是组内成员。
- 直接模式:只接收目的地址是自己MAC地址的帧。
- 混杂模式:工作在混杂模式下的网卡接收所有流经网卡的帧。
查看、设置、取消混杂模式命令如:
ifconfig wlan0 #查看wlan0是否为混杂模式
ifconfig wlan0 promisc #设置wlan0为混杂模式
ifconfig wlan0 -promisc #取消wlan0混杂模式
(2)通信方式
通信方式分类:
- 单播:单台主机与单台主机之间的通信;
- 广播:单台主机与网络中所有主机的通信;
- 组播:单台主机与选定的一组主机的通信;
IP 网络的组播一般通过组播 IP 地址来实现,组播 IP 地址就是 D 类 IP 地址,即 224.0.0.0 至 239.255.255.255 之间的IP地址。
2、SmartLink使用
下载得到:
我们使用arm板子来做实验。首先,需要交叉编译,执行命令:
make CC=arm-linux-gnueabihf-gcc
把编译生成的smartlink可执行程序传到板子里。运行时需要跟上接口的名称。如:
./smartlink wlan0
然后执行如下命令重新编译:
make cleanmake
生成的mcast_app可执行程序在pc上运行,模拟手机APP发送。运行时需要传入WiFi名称及密码。如:
./mcast_app Tenda_552F18 0987654321
测试时需要先运行mcast_app,再运行smartlink。smartlink收到WiFi名称及密码时会打印出来。
运行结果如:
这里,使用mcast_app来模拟手机APP。smartlink也提供了一个简易的安卓手机APP,也可以使用APP进行测试:
3、SmartLink组播包协议分析
上面演示了SmartLink的使用,下面简单介绍一些SmartLink的组播包协议。
APP发送特定协议的组播包数据给设备,设备收到后进行解析获取路由器SSID及密码。其协议如:
每个数据包6个字节,
- 第1~3字节:组播包地址,为固定值0x01 0x00 0x5e。
- 第4字节:数据包序号。
- 第5字节:指定数据。
- 第6个字节:指定数据。
每次传输若干字节。举例说明:
SSID为"TP-LINK_hys" ,PSW为"12345678",发送组播地址如下:
0x01 0x00 0x5e 0x00 0x48 0x35
0x01 0x00 0x5e 0x01 0x68 0x2b
0x01 0x00 0x5e 0x02 0x5c 0x31
0x01 0x00 0x5e 0x03 0x0b 0x08
0x01 0x00 0x5e 0x04 'T' '1'
0x01 0x00 0x5e 0x05 'P' '2'
0x01 0x00 0x5e 0x06 '-' '3'
0x01 0x00 0x5e 0x07 'L' '4'
0x01 0x00 0x5e 0x08 'I' '5'
0x01 0x00 0x5e 0x09 'N' '6'
0x01 0x00 0x5e 0x0a 'K' '7'
0x01 0x00 0x5e 0x0b '_' '8'
0x01 0x00 0x5e 0x0c 'h' 0x00
0x01 0x00 0x5e 0x0d 'y' 0x00
0x01 0x00 0x5e 0x0e 's' 0x00
0x01 0x00 0x5e 0x40 0x1c 0x03
其中:
(1)第1~3包数据,为特征码包,后三个字节由组播IP映射为为组播MAC。取组播IP的后23位作为MAC,映射图如:
图片来源:jasonj33的博客
组播地址相关介绍可阅读博文:
https://blog.csdn.net/wjz110201/article/details/114628203
这里,手机APP设置的组播IP固定如:
#define IPADDR_KEY0 "224.0.72.53" /*key0:01:00:5e:00:48:35 */
#define IPADDR_KEY1 "224.1.104.43" /*key1:01:00:5e:01:68:2b */
#define IPADDR_KEY2 "224.2.92.49" /*key2:01:00:5e:02:5c:31 */
组播IP映射为组播MAXC,得到:
(2)第4包数据放的是SSID及PSW的长度。
(3)第5~15包数据放的则是SSID及PSW。
(4)第16包数据为校验码,采用连续异或校验的方式:
Crc=Crc^0x01^(byte)0x5e^0x40