4、LoRaWAN协议栈入门:层次结构与设备类型
各位同学,咱们今天聊聊LoRaWAN协议栈。说实话,很多初学者一上来就被OSI七层模型吓住了,觉得这东西太抽象。其实没那么复杂。LoRaWAN的协议栈,说白了就三层:物理层、MAC层、应用层。我当年刚接触时,也是从这三层开始啃的。
4.1 物理层:最底层的“搬运工”
物理层负责什么?就是干最脏最累的活——把数据变成无线电波发出去,再把收到的无线电波变回数据。LoRa的物理层用的是Chirp Spread Spectrum(CSS)技术,这东西抗干扰能力特别强。
我记得有一次在工业现场做测试,旁边就是变频器和大功率电机,普通无线模块根本没法用。但LoRa模块愣是扛住了,数据包一个都没丢。嗯,这就是CSS技术的厉害之处。
物理层的关键参数有这么几个:
- 频段:中国用的是470-510MHz,欧洲868MHz,美国915MHz。千万别搞混,我在项目里见过有人把欧洲模块拿到国内用,结果死活连不上。
- 扩频因子(SF):SF7到SF12。SF越大,传输距离越远,但速率越慢。我个人的习惯是,室内用SF9,室外空旷用SF7,远距离用SF12。
- 带宽(BW):常见125kHz、250kHz、500kHz。带宽越大,速率越快,但灵敏度会下降。
- 编码率(CR):4/5到4/8。编码率越低,纠错能力越强,但有效数据越少。
重要提示:物理层的参数配置直接影响通信质量。你想想看,如果SF和BW没搭配好,可能连数据都发不出去。我建议新手先从SF9、BW125kHz、CR4/5这个组合开始试,稳定了再调。
4.2 MAC层:通信的“交通警察”
MAC层是LoRaWAN的核心。它负责管理设备怎么接入网络、什么时候发数据、发完怎么确认。说白了,就是给物理层定规矩。
MAC层主要干这几件事:
- 信道接入:设备不能想发就发,得听网关的指挥。LoRaWAN用的是ALOHA协议,设备随机选时间发,撞了就重试。
- 数据确认:发完数据后,网关会回一个ACK。如果没收到ACK,设备就得重发。我在项目中遇到过,有些设备离网关太远,ACK老是收不到,后来调整了SF才解决。
- 自适应数据速率(ADR):这个功能很实用。网关会根据信号质量,自动调整设备的SF和发射功率。说白了,就是让设备用最省电的方式把数据发出去。
- 安全加密:MAC层负责对数据进行AES加密。每个设备都有两个密钥:NwkSKey和AppSKey。前者用于网络层加密,后者用于应用层加密。
个人经验:我曾经调试过一个项目,设备老是连不上网。查了半天,发现是MAC层的重传次数设得太少了。默认是3次,我改成了5次,问题就解决了。所以,遇到连接不稳定的情况,先看看重传参数。
4.3 应用层:和业务打交道的“翻译官”
应用层是离用户最近的一层。它负责把MAC层传上来的数据,转换成业务能理解的东西。比如温度传感器传上来的是字节流,应用层把它解析成“25.3℃”。
LoRaWAN的应用层数据格式很简单,就是纯字节流。你可以自己定义协议,也可以用现成的,比如Cayenne LPP。我个人比较喜欢Cayenne LPP,因为它把常见传感器类型都定义好了,省得自己造轮子。
举个例子,一个温度数据用Cayenne LPP编码是这样的:
// 数据格式:通道号(1字节) + 数据类型(1字节) + 数据值(2字节)
// 温度类型码:0x67
// 温度值:25.3℃ = 253(放大10倍)
发送数据:0x01 0x67 0x00 0xFD
// 0x01:通道1
// 0x67:温度类型
// 0x00 0xFD:253 = 25.3℃
你想想看,如果每个传感器都自己定义格式,那网关那边得写多少解析代码?用标准格式,大家都省心。
4.4 设备类型:Class A/B/C的区别
LoRaWAN定义了三种设备类型,主要区别在于什么时候能接收下行数据。我当年第一次看这个分类时,觉得挺绕的。其实你记住一句话就行:Class A最省电,Class C最实时,Class B是折中方案。
| 特性 | Class A | Class B | Class C |
|---|---|---|---|
| 下行接收时机 | 上行后短暂打开 | 固定时间间隔 | 持续打开 |
| 功耗 | 最低(电池可用数年) | 中等(电池可用数月) | 最高(需持续供电) |
| 实时性 | 差(需等待上行) | 中等(有固定时隙) | 好(随时可接收) |
| 典型应用 | 传感器、水表 | 智能路灯 | 执行器、控制器 |
4.4.1 Class A:省电之王
Class A是LoRaWAN的默认模式,也是用得最多的。它的工作流程是这样的:设备主动发一个上行数据,然后打开两个接收窗口(RX1和RX2),等网关回复。如果没收到,就继续休眠。
为什么会这样设计?说白了,就是为了省电。设备大部分时间都在睡觉,只有发数据时才醒一下。我做过一个水表项目,用Class A模式,两节AA电池用了两年多。
避坑指南:我曾经犯过一个错误,以为Class A设备随时都能收到下行数据。结果发现,如果设备不发上行,网关根本没法给它发数据。所以,如果你需要远程控制设备,Class A可能不太合适。
4.4.2 Class B:定时接收
Class B在Class A的基础上,增加了定时接收窗口。网关会定期发送信标(Beacon),设备根据信标同步时间,然后在固定时隙打开接收窗口。
嗯,这里要注意。Class B虽然能定时接收,但功耗比Class A高不少。因为设备得定期醒来,听信标。我建议,只有在需要定时获取下行数据,但又不能一直供电的场景下,才用Class B。
4.4.3 Class C:实时在线
Class C的设备几乎一直在接收状态,只有发数据时才短暂关闭。所以它的实时性最好,但功耗也最高。
你想想看,什么场景需要Class C?比如智能插座、阀门控制器这类设备,你得随时能控制它。我做过一个农业灌溉项目,用的就是Class C,因为得随时远程开关水泵。
不过,Class C也有个坑:如果设备太多,网关的压力会很大。因为每个设备都在监听,网关得处理大量的下行请求。所以,Class C一般只用在需要实时控制的设备上,数量不会太多。
总结一下:选设备类型时,先问自己三个问题——设备需要实时控制吗?电池能用多久?网络规模有多大?想清楚了,再选Class A、B还是C。
好了,LoRaWAN的层次结构和设备类型就讲到这里。下一章,咱们聊聊怎么搭建一个实际的LoRaWAN网络,包括网关配置、设备入网这些实操内容。到时候我会拿我踩过的坑给大家当反面教材,哈哈。