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网络,包括网关配置、设备入网这些实操内容。到时候我会拿我踩过的坑给大家当反面教材,哈哈。