看不见的线怎么选:蓝牙、Wi-Fi、ZigBee、LoRa 与蜂窝网络
上一回把 USB 线剪掉了:CH340 换成 HC-05,小车和手机之间只剩下空气。那一篇的结尾留了一句——它负责把一段串口线变短成空气,其余的都不归它管。
“其余的”就是下面要摊开的东西:无线不止蓝牙一种,而它们之间的差别,比名字上的差别大得多。
先把这几个词摆到各自的层上
要摊开,先得回答一个更容易绕晕的问题:“串口”和“蓝牙”根本不是同一个层面的东西。
串口是接口:两个引脚上的一套电平与时序约定,规定一位多长、一帧几位。它是一条具体的线。
蓝牙是无线协议:规定两台设备怎么在空中找到对方、怎么分组、丢了怎么重发。它是一段看不见的路。
两者能凑到一起,是因为中间站着一个转换模块。HC-05 一头挂蓝牙,一头挂串口——它把空气当成线用。
在单片机这边,“用串口”和“用无线”可以同时成立。大多数无线模块,对单片机来说就是一个串口设备:
| 无线方案 | 模块常见长什么样 | 单片机这头看到的是什么 |
|---|---|---|
| 经典蓝牙(SPP) | HC-05 / HC-06 | 一个串口设备,用 AT 指令配置 |
| BLE | JDY-08、HC-08 一类透传模块 | 一个串口设备,用 AT 指令配置 |
| Wi-Fi | ESP8266、ESP32 | 串口设备(AT 固件),也可能走 SPI |
| ZigBee | XBee、CC2530 一类模块 | 一个串口设备,用 AT 指令配置 |
| LoRa | E220、Ra-01 一类模块 | 串口设备,或者 SPI 上的裸射频 |
| 2.4G 点对点 | nRF24L01 | 不是串口设备:SPI 接口,自带地址、通道和 FIFO |
| 蜂窝网络 | 4G Cat.1、NB-IoT 模块 | 一个串口设备 + 一张 SIM 卡,用 AT 指令配置 |
只有 nRF24L01 那一栏是例外,要单说一句:它不说“串口”,而是让程序通过 SPI 读写它的寄存器,自己定义地址、通道和有效载荷。它有六个接收通道,每个包最多 32 字节载荷,收齐了给一个中断通知你。地址怎么分、丢了怎么补、谁来应答,全归程序自己决定。
(GPS 那种是单向“接收”,不算通信,另算一类;北斗还能发短报文,是另一条路。)
一张大表:它们各自解决什么
| 方案 | 距离量级 | 速率量级 | 功耗 | 拓扑 | 另一端是谁 |
|---|---|---|---|---|---|
| 经典蓝牙 SPP | 十米级 | 受串口波特率限制,115200 下约 11 KB/s,提到 460800 能到四十多 | 中 | 点对点 | 手机、电脑 |
| BLE | 十米级 | 低,几 KB/s 级 | 很低 | 点对点、星型 | 手机 |
| Wi-Fi | 室内几十米 | 高,几百 KB/s 到 MB/s 级 | 高 | 基础设施(路由器) | 路由器、云 |
| ZigBee | 十米到上百米,可组网延伸 | 低 | 低 | 网状,节点能互相转发 | 网关/协调器 |
| LoRa | 公里级,看环境 | 极低,几百 bps 到几 KB/s | 极低 | 星型,一个网关收很多节点 | 网关 |
| 2.4G 点对点 | 十米到上百米(带功放更远) | 低到中,空中速率可到 2Mbps,但一包只 32 字节 | 低 | 点对点、一主多从 | 另一块同款模块 |
| 蜂窝网络 | 有信号就行,几公里到全国 | 按制式:NB-IoT 几十 kbps 级,4G Cat.1 到 Mbps 级 | 高,发射瞬间更高 | 运营商基站 | 云平台 |
表里的数字都是量级,不是承诺。同一种方案换一个模块、换一根天线、隔一面墙,差十倍都不奇怪——上一回那个“手机慢慢远离、看错误帧数什么时候开始涨”的实验,量的就是这个东西。
还有三句要补在表外:
- 距离、速率、功耗三者互相拉扯。 想让距离远,速率就得低、发一次就得等;想要带宽大,电流和发热一起上来。没有哪一栏是全面更好的。
- 频段决定谁跟谁抢。 蓝牙、BLE、Wi-Fi、ZigBee、nRF24L01 都挤在 2.4GHz 那一带,所以它们会互相干扰;LoRa 和一部分遥控模块在 433/470/868/915MHz 这些频段上;蜂窝网络走的是运营商的频段。
- 蜂窝是唯一“不需要你自己架另一端”的方案。 别的基本上都得有个手机、路由器或网关在另一头等着。
每一种为什么存在
经典蓝牙解决的是“手机就在旁边,但我懒得插线”。手机原生支持,SPP 让一堆老设备不用改程序就能无线化——上一回走的就是这条路。代价是距离短、速率被串口波特率卡住,还有平台差异:iOS 不给 SPP。
BLE 是蓝牙的省电版本,为“一颗纽扣电池跑几个月”设计的。它把速率和连接频率都压下来换功耗,适合每隔一会儿报几十个字节的状态,不适合连续传波形和图像。手机同样原生支持。
Wi-Fi 是“要直接上互联网”时的默认答案:带宽大,能跑网页、视频、摄像头,路由器现成。代价是功耗大、配网麻烦(SSID 和密码得想办法告诉它)、离了路由器就没有网。
ZigBee 为“很多个节点自己组网”设计。节点不只是终端,还能替别人转发,覆盖范围随着节点增多而延伸,所以智能家居和工业传感里常见。代价是要有一个协调器/网关,而且各家协议栈并不完全通用。
LoRa 用极低的速率换极远的距离和极低的功耗:一个网关能收几公里外几十上百个节点,每个节点几分钟发一条小数据。它传不了图,传的是“温度 23.5”这种事。它占的是免许可频段,功率和发送时长都要守当地的规矩。
2.4G 点对点不经过任何标准协议栈,直接拿裸射频做遥控。延迟低、模块便宜、代码全在自己手里;代价是地址分配、通道选择、重传和配对都得自己写,而且和 Wi-Fi、蓝牙抢同一段频率。
蜂窝网络不用你架网络,插一张卡就能到云。远程设备——共享单车、农机、水表——大多是它。代价也清楚:流量费、功耗高、依赖运营商信号;老制式在退网,新设计要在 NB-IoT 和 Cat.1 这类里面挑。
选型的四个问题
选无线不需要背参数表,按顺序问四个问题就行:
- 另一端是谁? 手机 → 蓝牙或 BLE;路由器和云 → Wi-Fi 或蜂窝;另一台自己做的设备 → 2.4G 点对点、ZigBee、LoRa。没有另一端,就没有无线方案可选。
- 一次要传多少、多久传一次? 几十个字节、几分钟一次 → BLE、ZigBee、LoRa 都够;连续波形或图像 → 只有 Wi-Fi 和蜂窝撑得住。
- 要多远? 一张桌子 → 蓝牙;一个屋子 → BLE 或 Wi-Fi;一个厂区、一片农田 → LoRa 或 ZigBee 组网;跨城市 → 蜂窝。
- 电从哪来,能撑多久? 纽扣电池还要跑几个月 → BLE、ZigBee、LoRa;车上有 12V 电池和降压模块,可以不在意 → Wi-Fi 也上得了。
同样是“无线”,落在这辆小车上的四种典型需求,答案差得很远:
| 你想做的事 | 顺手的选择 | 为什么 |
|---|---|---|
| 手机遥控一辆小车 | 经典蓝牙或 BLE | 手机原生支持,距离和带宽都够 |
| 让电脑看小车上的画面 | Wi-Fi | 只有它带宽够 |
| 几辆小车之间互通位置 | 2.4G 点对点或 ZigBee | 不经过手机和路由器,自己就能组 |
| 把车放到远处回传数据 | LoRa 或蜂窝 | 一个靠距离,一个靠“不用自己架网” |
换模块,换掉的到底是什么
这一层要记住的是:换模块时,什么东西会变,什么东西不会变。
不会变的:
- 帧协议。
AA 55、长度、校验和、状态机,一个字都不用改——它们描述的是“一串字节里的结构”,跟字节怎么飞过来的没有关系。 - 业务层。前进、停止、差速、PID,不知道命令是从哪来的。
- 解析的入口。把字节一个接一个喂进状态机这件事,无论字节来自中断、DMA 还是无线模块,做法都一样。
会变的:
- 模块管理。 AT 指令集、配对流程、断线重连、配网、SIM 卡和流量——每种方案一套,同一种方案不同固件还可能不一样。
- 供电和功耗。 从“多几毫安”变成“发射瞬间几百毫安甚至更多”,电池和降压模块要重新算一遍。
- 上位机那一头。 VOFA+ 能通过蓝牙生成的 COM 口继续用,因为那头还是个串口;换成 Wi-Fi 之后,对面通常变成一个 TCP 连接,工具得跟着换。
所以“串口”和“蓝牙”必须分开看:串口是接口,这一层基本不变;蓝牙和别的无线方案是链路,这层整体换掉。 混在一起说,就会得出“换个模块得重写整个程序”这种吓人的结论——实际要重写的只是中间那一层。
功耗这笔怎么算
讲缓冲的时候写过“用空间换时间”,无线这里要算的是“用占空比换电池寿命”。
平均电流大约等于待机电流乘上待机时间的占比,加上发射电流乘上发射时间的占比。一个 LoRa 模块待机可能只有几微安,发射时上百毫安,但一天只醒几十次、每次几十毫秒——平均下来小得可以忽略。反过来,一个 Wi-Fi 模块光是保持连接就可能要几十毫安,一直连着,电池是按小时算的。
所以“这个模块功耗多少”问得并不完整。要问的是:它多久醒一次、每次醒多久。 低功耗方案的设计重点从来不是把发射电流压低一点,而是尽量少醒。
一个屋子里十几个模块:频段、名字和波特率
一个人调试的时候,无线链路很干净。一个实验室里十几个同学同时调试的时候,它会突然变脏——偶发丢帧、延迟忽大忽小、连不上,甚至连到别人的车上。这些现象大多不是程序写错了,而是同一件事:空气是公共资源。
2.4GHz 是一块公共场地。 蓝牙、BLE、Wi-Fi、ZigBee、nRF24L01 都在这块场地里,再算上无线键鼠、无线耳机、微波炉。蓝牙的跳频只在同一个连接内部协调:你的手机和你的模块会一起跳,可隔壁那组的手机和模块也在跳,两组的节奏没有谁统一安排。碰撞是必然的,只是多少的问题——表现出来就是延迟抖动、偶发丢帧、连接建立变慢。Wi-Fi 更霸道一些:它占住一段带宽不挪窝,蓝牙的自适应跳频会尽量避开它,但 Wi-Fi 满载时,避让的效果会明显变差。
名字和密码是教室里最实际的两个旋钮。 出厂模块的名字几乎都是同一串字符,密码也几乎都是 1234 或 0000。手机列表里出现十几个同名设备时,你没法确定哪个是自己的;更糟的是,密码一样,别人也能连你的车。给每个模块改一个带编号的名字(CAR-07 这种)、每组用不同的密码,各自只要一条 AT 指令(上一回的指令表里有),能一次性解决“连错”和“被别人连走”。
一个从机同时只能被一个主机连着。 经典蓝牙的串口链路是一对一的。同学连不上你的模块,常见原因不是它坏了,而是它已经被你的手机占着;反过来你连不上,可能是它还在别人的手机里连着。把那一头断开,再连。
波特率不是空中速率,这一点最容易搞混。
- 串口波特率描述的是模块和单片机之间那一段的速度,115200 就是每秒 115200 位;
- 空中速率由协议、距离、干扰和重传共同决定,是另一件事;
- 两者之间隔着一个模块内部缓冲:单片机按 115200 往里灌,模块按自己能达到的节奏往空中发。灌得比发得快,缓冲迟早满,多出来的字节就丢在模块里。 这种丢,单片机的计数看不见——它以为自己已经发出去了。
所以在干扰大、距离远的场合,把波特率降下来反而更稳:9600 给模块留出喘息时间,重传和缓冲都不那么紧张。反过来,在干净环境里把波特率提到 460800 是提速,在嘈杂环境里只是把丢字节换了个地方发生。
能改频点的方案,就把频点分掉。 这是多人同场时最有效的办法:
| 方案 | 能调的旋钮 | 同场地怎么分 |
|---|---|---|
| 经典蓝牙 / BLE | 只能改名、改密码;频点由协议自动跳 | 靠名字和密码区分,错开使用时间 |
| Wi-Fi | 可以指定 1/6/11 这类互不重叠的信道 | 每组一个信道,别都挤在默认那个 |
| nRF24L01 一类 2.4G 模块 | 有一百多个 1MHz 频点,还能配地址 | 每组一个频点加一个地址,互不打扰 |
| LoRa | 可以改频点和扩频参数 | 按当地规矩挑频点,同组错开 |
| ZigBee | 可以选信道和网络号 | 同场地给每组不同网络号 |
经典蓝牙这一栏只能“靠名字和密码区分”,是因为它的跳频由协议规定、不能指定。这不是缺陷,而是它抗干扰付出的代价:你放弃了指定频道的自由,换来的是自动避开坏频道的能力。 只有一个网络时,这是优势;一屋子网络时,它就不够用了。
多人同场调试,按这个顺序做:
- 每个模块改唯一名字(带组号),每组用不同密码;
- 需要绑定的场合,把对方地址记下来绑死,别让它随便连;
- 能分频点、信道或网络号的方案,先分好再开调;
- 避开 Wi-Fi 满载的时段和位置,尤其是有人在推视频流的时候;
- 干扰明显时,先把波特率降到 9600 或 38400 试一次,再怀疑别的;
- 协议层留一手:上一回那套帧有校验和,能发现坏帧;要真正做到“丢了会重来”,还得靠序号加重发(应答帧已经在了,缺的是序号和重发规则);
- 现象用数字记,不靠感觉——错误帧数、超时次数、断开次数,各自算一个数。
三个常见误会
“蓝牙最远十米。” 那是标称值。实际取决于天线摆放、遮挡和 2.4G 有多挤;上一回让手机逐步远离、盯着错误帧数的实验,量的就是这个数。
“频段一样就能互通。” 蓝牙、Wi-Fi、ZigBee、nRF24L01 都在 2.4GHz,可它们说的话完全不同,谁也听不懂谁。同频只意味着互相干扰。
“模块就是协议。” 买到的东西常常是“一颗射频芯片加一块固件”,协议栈由固件实现,AT 指令集由厂家定。上一回那句“AT 指令不能只背一张网上的表”,根子就在这里。
最后橘猫说
“串口”和“蓝牙”不在一个层面上:串口是接口,是 PA9/PA10 上的电平与时序约定;蓝牙是无线协议,是空气里的一段路;两者能凑到一起,是因为中间站着一个转换模块,HC-05 把空气当成了线用。实际接线和编程时,大多数无线模块对单片机来说就是一个串口设备——BLE 透传、Wi-Fi 的 AT 固件、ZigBee、LoRa 都是,唯一的例外是 nRF24L01 那种挂在 SPI 上、自带地址与 32 字节包长、要自己写驱动的裸射频。选型的四个问题按顺序问:另一端是谁、一次传多少多久传一次、要多远、电从哪来能撑多久;落到小车上就是手机遥控用蓝牙、传画面用 Wi-Fi、多车互通用 2.4G 或 ZigBee、远程回传用 LoRa 或蜂窝。换模块时,帧协议、业务层和解析入口一个字都不用改,真正要重写的只有“模块管理”那一层,外加供电和上位机。最后要算的是占空比,不是峰值:低功耗的关键不是发射电流小,而是少醒。还有件事一个人调试时永远遇不到:空气是公共资源——2.4GHz 上挤着蓝牙、Wi-Fi、ZigBee 和一堆无线外设,跳频只在自家网络内协调,所以一屋子模块必然互相碰撞;这时候最管用的旋钮是改名字、改密码、分频点,而波特率要用对——它描述的是模块和单片机之间那一段,不是空中速率,灌得比发得快,字节就丢在模块的缓冲里,单片机的计数器还看不见。
最后蜘蛛说
所以你问我该选哪个?——板子上焊的是网线

蓝牙、Wi-Fi、ZigBee、LoRa、蜂窝网络摆在一起时,该拿什么去比?距离、功耗、速度各自把选择推向哪里,而低功耗的这笔账为什么不该按峰值电流去算?
浙公网安备 33010602011771号