LoRa组网实战:正点原子模块多节点通信与时分复用协议设计
发布时间:2026/9/15 17:02:52 锦皓数字建站

最近后台收到不少留言都在问 LoRa 组网怎么做尤其是手里拿着正点原子模块的朋友基本都是同一个困惑模块能点对点收发数据了但一接多个节点就乱套要么丢包要么互相干扰。正好我这两年用正点原子的 LoRa 模块做了几个实际项目从农业大棚的环境监测到工地扬尘噪声采集里面踩过的坑不算少趁这次把组网步骤和背后原理一次性梳理清楚希望能帮大家少走弯路。先扫个盲。近两年圈里搜“LoRA”关键词出来一堆 AI 大模型微调的内容那个是 Low-Rank Adaptation跟咱们射频领域说的 LoRaLong Range远距离无线电完全是两码事。这篇博文只谈后者也就是基于 Semtech SX1278/SX1268 这类芯片的 LoRa 无线通信方案具体到正点原子的 ATK-LORA 系列模块怎么从零开始把多个节点组网跑起来。本文面向的是三类人做物联网毕设的学生、工厂现场需要无线数据采集的工程师、以及纯粹想搞明白 LoRa 通信原理的硬件爱好者。你不需要有很深的射频基础但最好已经让 LoRa 模块完成过最基础的点对点收发。如果这一步还没搞定建议先按本文第 3 节把单链路调通再往上叠加组网逻辑。1. 先搞懂 LoRa 到底强在哪再决定怎么组网1.1 LoRa 的技术本质与适用边界LoRa 能火这么多年核心就一个词灵敏度。它用的是线性调频扩频技术Chirp Spread SpectrumCSS把信号扩展到一个比较宽的频带上传输接收端通过解扩处理把淹没在噪声里的信号捞出来。SX1278 的接收灵敏度能做到 -137dBm 左右配上 20dBm100mW发射功率链路预算轻松超过 140dB这在 470MHz 这种 Sub-GHz 频段下非常可观。但这不代表 LoRa 是万能的。它的代价是速率极低扩频因子和带宽摆在那里空气速率通常只有 0.3kbps 到 37.5kbps。很多人第一次实测都会愣住一个 20 字节的数据包空中传输时间可能要几百毫秒。这意味着它注定承载不了图片、音频或者高频采样数据它适合的场景是“少量数据、低频上报、远距离传输”——比如温湿度每分钟报一次、电表电量每小时报一次这种节奏正好。组网之前把这件事想清楚很重要。我们一般说“LoRa 组网”不是像 WiFi 那样人人拿着手机刷视频而是让几十个传感器节点按一定节奏把数据汇集到网关。理解了速率天花板你就会明白为什么组网协议要精心设计时隙而不能像以太网那样随意发包。1.2 正点原子模块的产品定位与选型参考正点原子目前在售的 LoRa 模块主要分两类。一类是 ATK-LORA-01 这种串口透传模块板载 SX1278 芯片用户不用关心里面调制解调怎么实现的直接用串口发数据就行模块自动打包通过射频发出去。另一类是纯 SX1278 最小系统板引脚全部引出需要用 STM32 等主控去操作寄存器、配置 FIFO、处理中断灵活度更高但难度也上来了。我建议大多数选 ATK-LORA-01 这类透传模块来做组网。原因很简单组网最难的部分在于“多节点协调”的时间调度和协议设计而不是底层的射频寄存器操作。把复杂性控制在应用层出问题好排查也方便后期换主控平台。当然如果你做的是产品级开发需要极限压缩功耗或者定制调制参数那得上底层方案。正点原子模块还有一个少有人提的优势配套资料非常全有上位机配置软件、有 STM32 例程模块出厂默认参数也能直接跑通。相比那些裸芯片模块调试门槛低了一大截对初学者和现场工程师都友好得多。2. 组网前的硬件准备与模块参数配置2.1 要准备哪些硬件安装时有哪些讲究我以最常见的配置举例正点原子 ATK-LORA-01 模块两块一块做网关一块做节点后面扩展时再加、USB 转 TTL 串口小板两个、5V 电源或锂电池、SMA 天线两根以及至少一块 STM32 或 ESP32 主控板做后续协议测试。先把最容易出问题的地方说前面天线。LoRa 是半双工射频设备天线必须接好才能正常工作。SMA 接口的针脚很容易在反复插拔中被顶弯我见过好几块“发射距离只有几十米”的模块拆开检查就是天线座中心针歪了。另外天线要远离金属外壳和主控板大面积的铺铜区域最好竖直伸出机壳外部否则天线近场被干扰灵敏度会掉好几个 dB距离直接砍半。电源也很关键。模块标称工作电压 3.3V~5V但很多人忽略了一个问题发射瞬间电流可以达到 100mA 以上如果供电线路有较大内阻电压会瞬间跌落导致射频输出功率不稳定甚至模块复位。我自己的习惯是模块供电单独走线并且在模块 VCC 和 GND 之间并一个 100uF 电解电容加一个 0.1uF 陶瓷电容实测能明显减少异常发射和复位问题。2.2 用上位机把通信参数调成一致ATK-LORA-01 模块出厂默认参数通常可以直接通信但要做组网建议还是先通过正点原子提供的上位机软件把所有参数统一配置一遍。把模块通过 USB-TTL 转接板连到电脑打开配置软件选择对应串口号和波特率模块默认一般是 9600 或 115200以你手上的说明书为准先读取模块当前参数再按下面这张表逐项核对。参数项常见取值组网建议影响说明无线频率433MHz / 470MHz / 868MHz / 915MHz国内选 470MHz频段越低穿透性越好470MHz 属于民用免授权频段不同地区法规有差异先确认当地允许范围通信信道0~31网关和所有节点必须一致信道相当于“无线频道”同一区域内多组网络用不同信道可减少串扰扩频因子 SF7~12优先选 7 或 8SF 越小速率越快、占用信道时间越短但接收灵敏度略降近距离场景用 7 最合理信号带宽 BW125kHz / 250kHz / 500kHz125kHz带宽越小灵敏度越高但速率更慢。Sub-GHz 频段下 125kHz 是常用选择编码率 CR4/5 ~ 4/84/5 或 4/6冗余越大抗干扰越强但传输效率降低一般场景 4/5 足够发射功率-1 ~ 20dBm20dBm发射功率越大距离越远但功耗也越高电池供电的节点要平衡待机时间模块地址0x0000~0xFFFF不同节点分配不同地址地址用于接收端过滤广播或定向数据从上位机软件配置串口波特率1200~115200根据主控性能选择仅影响模块与 MCU 之间的通信速度不影响空中速率这套参数一旦设置好协议栈不会去动它所以组网时我们更关心的是在固定的物理层速率下一个数据包占用多长的空中时间这直接决定了轮询一个节点要预留多少时隙。举个例子。如果设置 SF7、BW125kHz、CR4/5单字节的有效负载大约对应 1ms 量级的空中传输时间一个 20 字节的数据帧加上前导码大约需要 50~100ms。这个估算值不需要很精确只要数量级对得上就能指导我们设计下一节的轮询周期。如果你想精确计算可以用 Semtech 官方的 LoRa Calculator 工具或者搜索“LoRa air time calculator”在线算输入参数后它会给出单包空中时间做工程评估足够用。参数配置还有一个容易忽略的点接收方的硬件地址要和发送方的目标地址匹配。ATK-LORA-01 模块可以设置自己的模块地址和允许接收的目标地址如果用广播模式目标地址设为 0xFFFF则所有模块都能收到。组网时一定要把这个机制规划清楚否则会出现“明明代码没问题但节点收不到网关指令”的情况。3. 点对点链路跑通组网的地基3.1 用串口透传先把两个模块打通信不管最终组网方案多复杂第一步永远是先把两个模块的点对点链路跑通。把两块 ATK-LORA-01 都按前一节的参数配置好相同的频率、信道、SF、BW用 USB-TTL 转接板分别接到电脑的两个串口打开串口助手在 A 模块的串口输入“hello”看 B 模块那边能不能收到。这一步看起来简单但很多人卡住的原因往往很基础波特率没有两边都设对或者模块的“模块地址”和“目标地址”没有配对。ATK-LORA-01 这类模块发送方发出的数据帧中会携带目标地址接收方在收到帧后会判断目标地址是否等于本地地址或广播地址不一致时直接丢弃。所以点对点测试时要么把两边目标地址都设为广播 0xFFFF要么把各自己的地址设为对方的目标地址这两件事必须对齐。如果两个模块都没有收到数据优先用万用表检查 USB-TTL 转接板的 TX/RX 是否交叉正确——模块 TX 接转接板 RX模块 RX 接转接板 TX同时 GND 必须共地。串口模块常见的一个问题是只用三根线TX、RX、GND供电尤其是便宜的 CH340 转接板3.3V 输出能力有限带不动模块在发射时的瞬时电流就会出现“一发射就复位”的怪现象。解决办法是外接独立 3.3V 电源给模块供电转接板只接数据线。3.2 用 MicroPython 做快速通信验证确认串口助手能通之后建议立刻换成主控板来做二次验证。我常用 ESP32 刷 MicroPython 来做快速原型验证代码量小改起来也方便。下面这段代码是最简单的点对点收发模块以透传模式挂在 UART1 上from machine import UART, Pin import time # UART1: TX17, RX16, 与LoRa模块交叉连接 lora UART(1, baudrate9600, txPin(17), rxPin(16)) lora.init(bits8, parityNone, stop1) # 每隔2秒发送一次数据 counter 0 while True: msg node1_%d % counter lora.write(msg) print(TX:, msg) counter 1 time.sleep(2)接收端代码类似只是换成在循环里读 UARTfrom machine import UART, Pin lora UART(1, baudrate9600, txPin(17), rxPin(16)) lora.init(bits8, parityNone, stop1) while True: if lora.any(): data lora.read() print(RX:, data)这段代码跑通之后你就有了一个可编程的 LoRa 透传通道。后面所有组网逻辑本质上都是在透传通道之上加帧格式定义、地址分配和时序控制。在这里我特别强调一下透传模块帮你搞定了物理层和链路层组网协议全靠自己写。很多人误以为正点原子模块自带“组网”功能买回来就能多节点自动组网实际不是这样。透传模块只负责把串口数据搬到空中谁是网关、谁先发、冲突了怎么办这些全部要自己写代码。3.3 距离与灵敏度测试的经验值点对点跑通之后建议在真实环境下测一次距离建立对 LoRa 覆盖范围的直观感受。空旷环境中470MHz、发射功率 20dBm、SF7 的情况下正点原子模块配普通鞭状天线稳定通信距离一般在 1~2 公里如果选用高增益天线并且接收端放置位置高一些还能更远。但换到城市环境或者工厂厂房内部墙体、金属设备对信号的衰减非常明显实际可靠距离可能只有 200~500 米。这个数据不是劝退而是提醒你做节点位置规划时不要按“标称最大距离”去设计。组网方案里一定要预留信号余量比如网关放在屋顶最高点、天线保持垂直、尽量避开金属货架遮挡。实测最简单的方法是拿着一个模块慢慢往外走在电脑串口助手观察接收信号强度部分模块支持输出 RSSI 信息把 RSSI接收信号强度指示低于 -120dBm 的位置定为边界节点部署尽量在这个边界以内并留出至少 10dB 的余量以防天气和电磁环境影响。4. 多节点组网方案从点对点到星型网络4.1 为什么首选星型结构LoRa 节点的组网拓扑常见的有三种点对点、星型、Mesh。点对点不用多解释就是两个节点互发星型是若干个终端节点围绕一个中心网关所有数据都走网关转发Mesh 则是节点之间互为中继自动寻找最优路径。从我实际项目经验来看正点原子这类透传模块自己写 Mesh 协议非常不划算。Mesh 需要每个节点维护路由表、定期交换邻居信息、处理多跳转发与环路问题这些逻辑在低速 LoRa 链路上实现起来不仅开发周期长而且每多一跳数据延迟和丢包率都会显著上升。LoRa 本身速率就慢多跳 Mesh 在工程上很容易变成“能通但没法用”的演示品。星型结构才是 LoRa 组网里最容易落地、也最适合多数物联网采集场景的方案。网关负责下发指令和接收数据终端节点不需要互相通信只要保证“自己和网关之间链路稳定”即可。这样每个节点只需要知道自己和网关的地址协议设计大幅简化可靠性和可维护性都更高。网关放到信号覆盖中心节点往外铺覆盖半径就等于网关到最远节点的距离规划起来思路非常清晰。4.2 节点地址规划与帧格式定义星型组网的第一步是给每个节点分配唯一的模块地址和节点 ID。这里要解释一下模块地址是射频层用来过滤的节点 ID 是应用层用来区分数据来源的两者可以一致也可以分开管理。实际项目中我习惯用一个字节的节点 ID取值 1~2500 保留给网关本身255 用作广播地址这样应用层处理起来非常简单。帧格式是整个组网协议的核心建议从一开始就定义清楚不要想一出加一出。下面是我在项目里用的一种精简帧格式总共 8 到 13 字节足够覆盖大多数采集场景帧头(1B) | 目的地址(1B) | 源地址(1B) | 帧类型(1B) | 数据长度(1B) | 数据(NB) | CRC(2B) 0xAA 0x01~0xFA 0x00~0xFA 0x01采集 0x00~0xFF 负载数据 CRC16 0x02上报 0x03ACK帧头固定为 0xAA用来做数据对齐和数据流起始识别。目的地址是接收方节点 ID源地址是发送方自己的节点 ID。帧类型用于区分控制帧、数据帧和应答帧CRC 用于校验数据完整性。这个格式看起来简单但足够支撑一主多从的轮询上报场景。为什么要自己定义这套帧格式因为透传模块的串口只负责把字节流原样搬到空中接收方无法判断这一串字节哪一段是一条完整的报文。尤其当多个节点连续上报时字节流是拼在一起的没有帧头、长度和校验应用层根本没法切分和确认数据。这是很多人做多节点时觉得“数据全乱”的根本原因——不是无线链路坏了而是没有做应用层的组帧和解析。4.3 时分复用轮询机制最简单且可靠的组网方式在 LoRa 这种半双工、共享信道的链路上最怕的就是多个节点同时发射。LoRa 接收机同一时刻只能解调一个信号两个节点同一信道同时发射就会互相碰撞导致两边都收不到。解决办法目前工程上最常用的就是 TDMA时分多址思路即把时间切成固定的小时隙每个节点只在属于自己的时隙里发送数据没有轮到的节点保持静默。和 WiFi 那种“先听后发、冲突退避”的 CSMA/CA 机制相比TDMA 在 LoRa 链路上的优势非常明显。LoRa 速率低一个包要占几十毫秒甚至几百毫秒如果用 CSMA 反复监听信道不仅浪费本来就很低的吞吐量节点长时间开启接收模式的功耗也完全不可控。TDMA 则天然避免了这个问题代价是需要一个统一定时基准好在我们有网关可以让网关周期性地广播同步帧所有节点跟着这个节奏走。一个最简单的轮询周期可以这样设计网关每秒发送一次同步信标Beacon信标里包含下一个上报时隙的起始时间和分配表终端节点收到信标后各自校准本地时钟在指定时间窗口发送数据。假设有 1 个网关和 20 个节点同步信标耗时 100ms20 个节点的上报时隙每个预留 100ms一个完整周期就是 2100ms也就是说所有节点每 2.1 秒最多上报一次。如果业务允许每分钟只上报一次那网关可以每分钟发一个信标20 个节点分 2 秒内错峰上报剩余时间节点全部进入休眠功耗可以压得非常低。这里我强烈推荐用“网关定时广播 节点休眠 按需上报”的混合模式而不是让所有节点高频主动上报。LoRa 节点主动发送的场景越少信道冲突概率就越低系统整体可靠性越高。实际很多数据采集现场比如农业大棚或环境监测站数据变化是缓慢的一分钟采一次温湿度完全够用没必要设计成毫秒级实时上报。4.4 数据确认与重传机制不要做“发了就不管”的裸奔LoRa 链路物理层再可靠也不可能保证 100% 不丢包。尤其是在恶劣电磁环境或距离临界区误码和丢包是常态。组网协议里必须设计 ACK应答和重传机制否则网关收到的数据就是不完整的用户根本不知道哪些节点数据丢了。最简单的做法是节点上报数据后网关在收到并校验通过后立刻回一个 ACK 帧。节点如果在约定时间比如 500ms内没收到 ACK就判定本次发送失败重传一次最多重传 3 次。重传时为了避免连续冲突可以加一个随机的退避时间比如 100ms 到 300ms 随机值降低多个失败节点同时重传的概率。ACK 和重传会增加链路开销但在采集类场景中这点开销完全承担得起。以每分钟上报一次、每次 20 字节来算就算每个包重传 3 次也才占空比千分之一左右对信道和功耗影响微乎其微。而换来的是数据完整率从 90% 提升到 99% 以上这个收益非常大。我在写上报帧时还会给每条数据加一个序号节点本地循环递增这样网关侧可以检测到丢包和乱序也方便日志定位问题。4.5 组网容量估算算清楚你最多能挂多少节点很多人在设计初期会问一个网关能带多少个 LoRa 节点答案取决于数据量、上报频率和每包长度而不是模块厂商标称的“最多支持多少”。给一个可用的估算公式网络容量 单位时间内可用空中时间 / 单个节点完成一次完整上报所需的空中时间。假设每包上报数据 20 字节加上帧头和 CRC空中实际载荷约 30 字节。SF7、BW125kHz 时单包空中时间约 60ms加上 ACK 的空中时间约 60ms节点完成一次成功上报含一次 ACK大约耗时 120ms。如果系统设计为每 10 秒轮询一轮单个周期可用时间为 10 秒。减去同步信标的 100ms还剩 9900ms除以 120ms理论容量大约是 82 个节点。但如果上报频率变成每 1 秒一次可用空中时间只剩 900ms 左右理论容量立刻降到 7 个节点这就是 LoRa 不适合高频采集的原因。我实际部署时还会在理论值上打折只按理论容量的 50%~60% 规划节点数量。因为现场环境复杂重传、干扰、时间同步误差都会占掉额外时间。宁可余量留大一点也不要在上线后出现信道拥堵毕竟现场改方案比实验室改方案痛苦得多。5. 进阶技巧RS485 总线与 LoRa 的融合组网5.1 为什么现场经常把 RS485 和 LoRa 放一起做工业物联网的人肯定对 RS485 不陌生它是传统工控最常见的总线协议一主多从、差分信号、抗干扰强、布线简单缺点是通信距离和布线范围受限。而 LoRa 的优势恰恰是“无线的远距离”所以很多现场会考虑“RS485 负责局部有线连接LoRa 负责远程无线汇聚”的组合方式。最典型的场景是这样的一个厂区内有多个设备点位每个点位本身有若干 RS485 传感器比如温湿度、压力、流量如果全部拉线到中控室线缆成本和施工成本非常高。这时候可以在每个点位放一个支持 RS485 接口的 LoRa 模块把点位上的多路 RS485 传感器数据先聚合成一条报文再通过 LoRa 无线发送到网关。网关侧再用 USB 转 RS485 接入现场工控机实现一个完整的“有线采集 无线汇聚”链路。正点原子也有带 RS485 接口版本的 LoRa 模块接线比普通串口版本更直接A/B 两线对应 RS485 的 A/B电源单独接其他部分逻辑和普通透传模块相同。这种模块在组网时最大的好处是不需要额外做电平转换可以直接挂在已有的 RS485 总线上改造现有系统非常方便。需要提醒的是RS485 是半双工总线和 LoRa 的半双工特性正好匹配但配置时要注意 A/B 线的极性不能接反并且终端电阻的匹配别忘否则总线上信号反射会导致通信不稳定。5.2 一个“RS485 LoRa”混合组网的参考架构假设你要采集 3 个水泵房的运行状态每个水泵房有 3 个 RS485 传感器每个机房部署一个带 RS485 的 LoRa 节点三个节点通过无线连接到中控室的 LoRa 网关。网关再接一台工控机工控机上跑人机界面或者数据库存储。架构上的关键点是每个 LoRa 节点内部要做“RS485 主站轮询”和“LoRa 从站上报”两个角色。时刻表可以是每 30 秒LoRa 节点通过 RS485 总线依次读取 3 个传感器的数据读取完成并校验后将 3 组数据打包成一条 LoRa 上报帧通过无线发给网关网关收到后通过 RS485 或以太网把数据转给工控机工控机通过人机界面展示数据。这个架构在实际部署时有几个好处。第一改造工作量小原有 RS485 传感器全部保留不用换表第二现场布线只需要在机房内短距离走线跨机房的长距离线缆被无线替代整体施工成本大幅下降第三网关侧是标准 RS485 或以太网接口工控机接入非常方便不需要购置额外的专用通信设备。如果你正在做类似的工业数据采集项目这个组合方案可以作为参考思路。5.3 边界提醒什么场景不建议用 LoRaLoRa 在很多场景下很好用但它不是万能的。需要高清视频传输、实时语音对讲、大数据量文件上传的场景直接排除 LoRa老老实实上 4G/5G 或者有线网络。还有人想用它做设备远程固件升级小固件勉强可以超过 100KB 的固件在 LoRa 链路上传不仅极慢而且中途断连重传的复杂度很高成功率也不好保证。另外LoRa 是半双工的也就是说同一时刻要么发要么收无法同时收发。如果你的业务需要节点之间实时互相通信比如设备间的实时联锁控制LoRa 的时延可能会让你很难受。我在一个项目里试过用 LoRa 做两台设备之间的紧急停止信号传输单包传输时间大约 60ms这个延迟对很多工业安全场景来说是不可接受的最后还是换成了硬接线。6. 常见问题排查与避坑指南6.1 两个模块怎么都连不上排查顺序很重要别一上来就怀疑模块坏了。先确认供电和接线用万用表量模块 VCC 引脚电压发射状态电压波动不能太大。再确认 USB-TTL 转接板的 TX/RX 是否交叉连接以及是否共地。接着检查串口助手波特率和数据格式是否匹配ATK-LORA-01 默认 9600/8/N/1 的情况最常见但如果你之前配置过 115200后面忘了改就怎么都读不到数据。最后检查射频参数是否一致频率、信道、SF、BW 任何一个不同都不能通。这几个环节逐项排除后绝大多数连不上问题都能解决。还有一个非常容易被忽视的坑串口助手发送时是否带了回车换行。透传模块会把串口收到的所有字节都发射出去发送端如果勾选了“发送新行”数据帧里会多出 0x0D 0x0A 两个字节。接收端如果按固定字节数解析报文就会出现帧错位。我建议在测试串口助手时统一关掉“新行”选项或者让协议帧自己带长度字段来切分不要依赖行结束符。6.2 距离近、信号差先别急着怀疑模块问题LoRa 模块标称距离远但实测距离往往远小于标称值主要原因通常出在天线和环境上。第一天线必须选对频段470MHz 的模块配 2.4G 天线或者 433M 天线效果都会大打折扣。第二天线安装位置要尽可能高并且远离金属物体。把模块贴着地面放信号衰减非常大把天线放在地面以上 2 米效果立刻改善。第三检查天线接头是否拧紧SMA 座有没有损坏。还有一个常被忽略的点天线近场的净空区。天线周围 1/4 波长范围内尽量不要有导体470MHz 的 1/4 波长大概 16 厘米也就是说天线周围至少 15 厘米内不要有大面积金属板、导线的密集铺设。很多人把 LoRa 模块装进金属机箱天线缩在机箱内或者紧贴着金属导轨距离断崖式下降其实就是天线近场被金属严重吸收造成的。6.3 多节点同时上电后数据乱跳、互相覆盖这是我最常被问到的问题几乎每个刚做多节点的人都会遇到。现象是多个节点只要同时发送网关收到的数据就错乱把 A 节点的数据解析成了 B 节点或者数据彻底丢失。原因很简单LoRa 信道同时只能承载一个信号多个节点同时发射就产生碰撞。解决办法就是回到第 4 节讲的时分复用轮询方案。由网关统一指挥每个节点派定固定的发送时隙节点只在属于自己的时隙内发送。不要指望“数据量小、偶尔撞一下没什么”在无人值守的现场采集系统里一次数据丢失意味着这次采集周期产生了空洞日积月累数据完整性没法保证。哪怕是临时搭个几天的测试系统我也建议至少做个简单的“错峰发送”机制比如每个节点随机延迟几十到几百毫秒后再发虽然不能彻底避免冲突至少能显著降低碰撞概率。6.4 穿墙后完全不通是不是该换更大功率穿墙衰减是 Sub-GHz 频段的天然物理特性混凝土墙对 470MHz 信号的衰减通常在 10~20dB 甚至更高金属墙体会更严重。还有很多人不理解的是不建议盲目加大发射功率。发射功率从 17dBm 提升到 20dBm链路预算只增加 3dB在穿了两堵墙以后改善非常有限但功耗和电磁兼容问题却会随之而来。更有效的方法永远是把网关的位置往高处放或者移动到更靠近节点的区域。我见过一个厂房项目原本网关放在一楼角落信号死活传不到二楼后来把网关挪到厂房中间支架上天线升到厂房顶部信号立刻就好起来了。另外也可以把节点天线引出来用延长线把天线位置抬高。天线的位置和高度的改善往往比增加发射功率效果更明显。6.5 为什么 LoRa 不能被当成“免费的 4G”用最后说一个思想层面的坑。很多初接触 LoRa 的人会把它当成“免费无限流量卡”觉得什么数据都能往上放。实际用下来才发现LoRa 的带宽和时延决定了它是一个“为低频少量数据而生”的技术。把 LoRa 模块接上传感器数据每秒钟上报一次系统很快就发现信道根本承载不了或者想通过 LoRa 传一张摄像头抓拍的图片几 KB 的图片在 LoRa 上要传好几分钟完全没有实用性。设计 LoRa 系统时要把“数据从产生到上报的端到端时延”和“单节点的最大数据速率”当成关键约束提前算好。实在要传大数据LoRa 更合理的角色是“通知类”信道——比如有报警事件时节点发一个标志位给网关网关再通过其他宽带通道去获取详细数据。这样一来 LoRa 的长距离覆盖优势被保留数据量瓶颈也被绕开了。7. 实操记录一个 16 节点大棚环境监测系统的组网复盘参数规划阶段我按前面的方法做了一个实际项目大棚环境监测1 个网关16 个节点每个节点有一路温湿度传感器、一路土壤湿度传感器。业务要求每分钟上报一次每包数据约 30 字节。我选了 SF7、BW125kHz、CR4/5、发射功率 20dBm节点模块地址按 1~16 分配网关地址设为 0所有模块通信信道一致。轮询方案采用“网关每 30 秒广播一次信标 16 个节点依次上报”每个节点上报时隙 120ms重传机制为最多 2 次重传退避 100~300ms。这样设计的好处是节点平时不需要持续监听信道只有在收到网关信标后才醒来准备上报网关始终掌握所有节点的最近状态也便于在线判断节点是否掉线。整个系统实测下来单轮轮询周期约 2.2 秒实际占空比很低为后续扩展预留了充足容量。测试时最典型的故障出现在第 7 号节点网关经常收不到它的数据但该节点离开大棚后单独测试又是正常的。排查之后发现问题出在该节点模块天线被旁边一根金属水管挡住了。把节点位置移动了半米天线远离金属水管后信号立即恢复稳定。这个案例再次说明现场信号盲区往往是环境遮挡造成的调整天线位置比修改代码更能解决问题。8. 几个独家经验仅代表个人取舍做了两个完整的 LoRa 组网项目后有几个经验是文档里不会写的在这里补充给大家。第一如果项目规模在 20 个节点以内、上报频率不高不要引入复杂的协议框架自己写一个简单的“网关广播 节点错峰上报”就够了。功能满足、代码可控、排障容易比套一个复杂协议带来的收益高得多。第二现场调试时一定要在网关侧把每一帧的原始数据都打日志。不要只打印解析后的温湿度结果因为一旦数据异常你能通过原始帧回溯是链路丢包、帧解析错误还是传感器本身的问题。带了原始日志的 LoRa 系统上线后排查效率会高很多。第三LoRa 模块的固件版本可能影响行为和参数范围。买模块时尽量在同一家、同一批次购买并且用同一个版本的上位机配置软件。不同批次模块如果物理层参数微调不一致偶尔会出现“两批模块互相不通”的诡异问题提前做好版本一致性管理能少踩很多坑。第四也是我自己栽过跟头的地方给电池供电的节点设发射功率时要克制。之前有个项目为了追求距离把功率调到满格 20dBm电池容量又没算够结果节点电池两三天就没电了。后来把发射功率降到 17dBm距离差不了多少续航直接翻了一倍。功率、距离、功耗三者之间的平衡必须在项目设计初期就放在同一张表里演算而不是现场遇到了再临时调。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。