WiFi 基础知识:2.4G vs 5G 频段、SSID 与 BSSID、加密方式与信道
做 WiFi 配网开发,第一件事就是搞懂你手里的设备到底在跟什么打交道。很多人一上来就写代码,结果连信号都连不上,查了半天发现是频段不匹配。今天我把这些基础概念掰开揉碎了讲,都是我在项目里踩过的坑。
2.4GHz 与 5GHz 频段:选哪个?
说白了,这两个频段就是 WiFi 工作的两条「高速公路」。2.4G 跑得慢但穿墙好,5G 跑得快但怕障碍物。我刚开始做智能家居时,所有设备都扔在 2.4G 上,结果一开微波炉,设备全掉线……后来才意识到,2.4G 频段太拥挤了。
| 特性 | 2.4GHz | 5GHz |
|---|---|---|
| 覆盖范围 | 远(穿墙能力强) | 近(穿墙能力弱) |
| 传输速率 | 理论最高 600 Mbps | 理论最高 6.9 Gbps |
| 干扰源 | 微波炉、蓝牙、Zigbee | 较少,但受墙壁影响大 |
| 信道数量 | 13 个(中国) | 更多,且不重叠信道多 |
| 适用场景 | 物联网设备、远距离连接 | 高清视频、低延迟游戏 |
重要提醒:绝大多数 IoT 模组(ESP8266、ESP32 等)只支持 2.4GHz。如果你配网时搜不到设备,先检查路由器是不是开了「双频合一」——很多设备连不上就是因为手机连了 5G,而设备在 2.4G 上。
SSID 与 BSSID:名字与身份证
SSID 就是你家 WiFi 的名字,比如「TP-LINK_1234」。BSSID 是路由器的 MAC 地址,相当于身份证号。你想想看,一个 SSID 可能对应多个 BSSID(比如 Mesh 网络),但一个 BSSID 只对应一个设备。
我在项目中遇到过一个问题:用户家里装了三个 AP,SSID 都一样,但设备老是连到信号最差的那个。后来我让设备在配网时同时记录 BSSID,优先连接信号最强的那个,问题就解决了。
小技巧:调试时可以用 iw dev wlan0 scan 命令查看周围的 BSSID 和信号强度。我习惯先扫一遍,确认目标 AP 的 BSSID 再写代码,避免连错。
加密方式:WPA2 vs WPA3
加密就是给你的 WiFi 数据加把锁。WPA2 是现在的标配,WPA3 是新一代标准,更安全但兼容性差一些。我建议:
- WPA2-PSK(AES): 兼容性最好,IoT 设备首选。我 90% 的项目都用这个。
- WPA3-SAE: 更安全,但老设备可能连不上。如果你用的是 ESP32-C3 或更新的芯片,可以试试。
- WPA/WPA2 混合模式: 别用。我曾经被这个坑过——设备连上了但时不时断流,查了半天发现路由器开了混合模式,设备协商成了不稳定的 TKIP 加密。
避坑指南:我曾经在量产前才发现,某个模组的 WiFi 固件不支持 WPA3。结果所有设备都得返厂升级固件。所以,配网代码里一定要做加密方式检测,不支持的直接提示用户改路由器设置。
信道与信号强度:看不见的战场
信道就是 WiFi 工作的「车道」。2.4G 频段有 13 个信道,但只有 1、6、11 是不重叠的。如果你家邻居的路由器都在信道 6 上,你的设备就会跟它们抢车道,信号再强也白搭。
信号强度用 dBm 表示,数值越大信号越好。一般 -30 dBm 是贴着路由器,-80 dBm 基本就断流了。我习惯在配网时把信号强度显示出来,让用户自己选信号最好的 AP。
// 示例:ESP32 扫描 WiFi 并打印信号强度
#include <WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
int n = WiFi.scanNetworks();
Serial.println("扫描完成");
for (int i = 0; i < n; i++) {
Serial.print("SSID: ");
Serial.print(WiFi.SSID(i));
Serial.print(" | 信号强度: ");
Serial.print(WiFi.RSSI(i));
Serial.println(" dBm");
}
}
经验之谈:配网时别只看信号强度。我遇到过信号 -50 dBm 但丢包率 30% 的情况——因为那个信道太拥挤了。建议在代码里同时扫描信道占用率,选最空闲的那个。
知识体系总览
下面这张图把 WiFi 基础知识的核心关系画出来了。你可以把它当作配网开发的「地图」——每次遇到问题,先看看是哪个环节出了岔子。
嗯,到这里 WiFi 的基础知识就讲完了。这些概念看起来简单,但配网开发中 80% 的问题都出在这里。记住:先搞清楚你的设备工作在哪个频段,再确认加密方式是否支持,最后用代码把信号强度和信道信息展示给用户。这样,配网成功率能提升一大截。