2、LoRaWAN协议栈:架构、设备类型与入网流程
好,咱们进入正题。LoRaWAN协议栈,说白了就是给LoRa这颗“好芯”配上的一套“交通规则”。没有它,节点和网关之间就是鸡同鸭讲。我个人习惯把LoRaWAN看作一个“星型网络”,网关是中间人,节点只管发消息,网关负责转发到服务器。
2.1 LoRaWAN的架构:三层模型
LoRaWAN的架构其实不复杂,就三层:终端节点、网关、网络服务器。嗯,这里要注意,网关只做“搬运工”,不解析数据。我见过不少新手以为网关能处理业务逻辑,其实它就是个“二传手”。
- 终端节点(End Device):就是你的传感器、水表、追踪器。它只管发数据,或者偶尔听一下网关的指令。
- 网关(Gateway):也叫集中器。它把收到的LoRa射频信号转成IP包,发给服务器。一个网关能同时听多个节点。
- 网络服务器(Network Server):这是大脑。它负责去重、解密、确认、下发指令。我在项目中遇到过,服务器端没做好去重,导致同一个数据被处理了三次,白白浪费了电池。
说白了,节点和服务器之间是“逻辑直连”,网关只是物理通道。你想想看,节点发一条消息,可能被多个网关收到,服务器会挑信号最好的那个来回复。
2.2 Class A/B/C设备类型详解
LoRaWAN定义了三种设备类型,核心区别在于“什么时候能收数据”。这直接决定了功耗和实时性。我建议你根据项目需求来选,别一上来就上Class C,电池扛不住。
| 设备类型 | 接收窗口 | 功耗 | 典型场景 |
|---|---|---|---|
| Class A | 上行后打开两个短接收窗口 | 最低 | 传感器、水表、烟感 |
| Class B | 定时打开接收窗口(信标同步) | 中等 | 阀门控制、定时上报 |
| Class C | 几乎一直打开接收窗口 | 最高 | 执行器、需要实时响应的设备 |
Class A:省电之王
这是最常用的类型。节点主动发数据,发完后打开两个接收窗口(RX1和RX2),等服务器回复。窗口一关,节点就睡大觉。我曾经做过一个温湿度传感器,用Class A,两节AA电池撑了两年多。为什么省电?因为节点大部分时间都在休眠。
关键点:Class A的接收窗口是“被动”的。服务器想下发指令,必须等节点先发数据。说白了,服务器不能主动找节点,只能“守株待兔”。
Class B:定时听一听
Class B在Class A的基础上,增加了“定时接收窗口”。网关会定期广播信标(Beacon),节点同步时间后,在指定时间打开接收窗口。这样服务器就能在固定时间下发指令了。
嗯,这里要注意,Class B需要节点定期接收信标,功耗比Class A高一些。我在项目中用过Class B做灌溉阀门控制,每天定时开窗接收指令,效果不错,但电池寿命比Class A短了约30%。
Class C:实时响应
Class C的设备几乎一直开着接收窗口,除了发送数据那几毫秒。服务器随时可以下发指令,实时性最好。但代价是功耗极高,通常需要外接电源。
避坑指南:我曾经在一个项目中,客户要求“实时控制”,我直接选了Class C。结果现场没拉电线,靠电池供电,三天就没电了。后来改成了Class B + 定时轮询,才解决问题。所以,Class C只适合有稳定供电的场景。
2.3 入网流程:OTAA vs ABP
节点要加入LoRaWAN网络,有两种方式:OTAA(空中激活)和ABP(个性化激活)。我个人强烈推荐OTAA,除非你有特殊原因。
OTAA(空中激活)
流程是这样的:节点发送Join Request,服务器回复Join Accept。之后双方协商出会话密钥。每次入网密钥都不同,安全性高。
// OTAA入网流程(简化)
1. 节点发送:Join Request (包含DevEUI, AppEUI, DevNonce)
2. 服务器验证后回复:Join Accept (包含AppNonce, NetID, DevAddr, 等)
3. 双方计算:NwkSKey = AES(AppKey, AppNonce, NetID, DevNonce, ...)
4. 双方计算:AppSKey = AES(AppKey, AppNonce, NetID, DevNonce, ...)
5. 入网成功,开始数据通信
你想想看,每次入网都重新算密钥,就算有人抓包,下次入网密钥就变了。我在项目中遇到过,客户要求设备换电池后自动重新入网,OTAA完美解决。
小技巧:OTAA的DevNonce是随机数,每次入网必须不同。如果重复,服务器会拒绝入网。我习惯用硬件随机数生成器,或者用递增计数器。
ABP(个性化激活)
ABP是直接把会话密钥(NwkSKey和AppSKey)和DevAddr烧录到设备里。设备上电就能发数据,不需要入网流程。速度快,但安全性差。
避坑指南:我曾经在一个项目中用了ABP,结果设备被克隆了。因为密钥是固定的,别人拿到你的设备就能读出密钥,伪造数据。所以,除非是实验室环境或对安全性无要求,否则别用ABP。
| 对比项 | OTAA | ABP |
|---|---|---|
| 安全性 | 高(密钥动态协商) | 低(密钥固定) |
| 入网速度 | 慢(需Join流程) | 快(上电即用) |
| 适用场景 | 大多数生产环境 | 测试、演示、封闭网络 |
| 密钥管理 | 服务器自动管理 | 需手动烧录 |
好了,这一章的内容就这些。LoRaWAN的架构、三种设备类型、两种入网方式,都是后续优化电池寿命的基础。下一章我们会深入聊“如何让节点更省电”,到时候会用到这些知识。