做物联网硬件这些年,被问得最多的两个字就是“LoRa”。有人把它当成Wi-Fi的替代品,有人以为它能传视频,还有人把它和机器学习里的LoRA微调搞混。每次都得从“LoRa不是LoRA”开始解释,再讲它到底解决什么问题。
这篇文章我会把LoRa从物理层调制原理、关键参数、LoRaWAN协议,到模块选型、链路预算、低功耗设计和常见踩坑,一次性讲透。内容偏经验向,不是照抄数据手册,适合刚接触LoRa的嵌入式工程师、物联网方案评估者,以及那种被老板一句“你研究下LoRa”就丢去调研的同学。
1. LoRa 到底是什么:先建立统一的认知框架
1.1 一句话版本:它是无线通信里的“自行车”
LoRa是Long Range的缩写,直译就是“远距离无线电”。它工作在1GHz以下的免许可频段,常见的有433MHz、470MHz、868MHz、915MHz,用很小的发射功率就能把数据传到几公里甚至十几公里外。
它的核心定位和Wi-Fi、蓝牙完全不同。Wi-Fi像小轿车,速度快、舒适,但耗油大、跑不远;蓝牙像滑板车,适合脚边那几米;LoRa则像一辆自行车——速度慢得没法载重货,但几乎不耗油,只要路况允许,骑到几十公里外都没问题。
具体到数据上:LoRa的传输速率通常在300bps到50kbps之间,单次报文一般就几个字节到几十个字节,发射功率常见的是14dBm到20dBm。但它能做到普通FSK调制完全做不到的事,比如接收灵敏度到-137dBm,链路预算做到155dB以上。这些数字后面会展开讲。
一句话总结:LoRa是给“电池供电、数据量小、分布广泛、无人值守”的物联网设备用的,典型场景包括智能水表气表、农业温湿度监测、停车场地磁、园区消防通道占用检测、畜牧定位等等。
1.2 先排个雷:LoRa 和 AI 圈刷屏的 LoRA 是两码事
如果你是在搜索引擎里看到“LoRa”和“lora训练”“lora微调”一起出现,那要小心了。通信领域的LoRa是“Long Range”,而AI圈那个LoRA是“Low-Rank Adaptation”,一种大模型参数高效微调技术。这两个词在中文里碰巧长得一模一样,实则毫无关系。
我在技术社区里见过不少人被这个混淆坑过,有人买了LoRa开发板去找LoRA微调教程,也有人在讨论大模型时突然扯到无线模块。这篇文章里提到的一切,都是指无线通信领域的LoRa。如果你找的是模型微调资料,可以关掉这个页面了,走错了。
2. 核心原理:Chirp 扩频是怎么用“缓慢的频率爬坡”换远距离的
2.1 为什么 LoRa 能把接收灵敏度做到 -137dBm
要理解LoRa为什么传得远,得先从传统无线调制说起。
传统FSK(频移键控)是靠频率的跳变来传输0和1的,比如中心频率偏移一定量就代表1,不变就代表0。这种方式简单可靠,但在弱信号环境下很难从噪声里捞回信号。
LoRa用的是一种叫CSS(Chirp Spread Spectrum,线性调频扩频)的调制方式。它不是在跳频,而是在一个符号周期内让信号频率从低到高(up-chirp)或从高到低(down-chirp)连续线性变化。接收端通过匹配滤波检测这个“频率爬坡”的斜率来解调数据。
关键点在于:chirp信号持续时间长、占用的带宽相对宽,接收端可以积累整个符号周期的能量来做判决。这就是扩频增益——处理增益约等于10log(2^SF)分贝。SF为7时增益约21dB,SF为12时增益约36dB。
也就是说,同样发射功率下,SF12模式比SF7模式在接收端多了约15dB的灵敏度优势。这15dB听起来不大,但无线通信里每增加3dB,传输距离大约能增加40%左右,15dB意味着距离提升好几倍。这就是为什么LoRa能做到-137dBm甚至更低的接收灵敏度——它不是在瞬间判决一个频率点,而是在一个符号周期内“攒”能量。
2.2 抗干扰和抗多径的真正原因
LoRa的抗干扰能力也源自扩频特性。干扰信号通常是窄带的,当它叠加在LoRa宽带的chirp上时,只污染一小部分频段,解扩过程会把噪声平均分散到整个带宽里,干扰对判决结果的影响被大大摊薄。
抗多径方面,chirp信号时间带宽乘积大,即使一部分信号因为反射、遮挡产生多个路径叠加,接收端仍能从主路径的chirp中提取信息。传统FSK遇到多径衰落可能直接解不出符号,LoRa在有反射的环境中表现明显更稳。
还有一个很实用的特性:不同扩频因子的LoRa信号之间是准正交的。意思是说,SF7的节点和SF12的节点即使同时向同一个网关发送,网关也能分别解调出来。LoRaWAN网关的8个解调通道就是利用这个特性,同时处理不同速率的数据流。
2.3 和FSK、NB-IoT横向对比:谁也不是万能药
在项目选型时,LoRa经常被拿来和FSK、NB-IoT做对比。我直接用实际感受说:
FSK是LoRa的上一代方案,短距离、高速率,用于玩具遥控、无线鼠标这类场景没问题,但在工业抄表、农业监测这种需要穿墙、传几公里的环境下,灵敏度不够,链路预算一般也就130dB左右。
NB-IoT是蜂窝物联网技术,走运营商的授权频谱,速率比LoRa高,覆盖靠基站。但它的短板很明显:要插SIM卡、要运营商信号覆盖、要按流量或按年付费。在偏远山区、地下管廊、海外农场这些地方,蜂窝信号可能就是没有。而且NB-IoT模块的成本和功耗普遍比LoRa高一个档次。
LoRa的定位就是“别人覆盖不到的地方,我能靠自己的网关覆盖”。它不需要运营商网络,你自建网,数据走自己的服务器。我把三者常用参数整理成一个表,选型时对照着看更直观:
| 特性 | LoRa | FSK | NB-IoT |
|---|---|---|---|
| 频段 | Sub-1GHz免许可 | 2.4GHz等 | 运营商授权频段 |
| 单次传输速率 | 0.3~50kbps | 几十到几百kbps | 几十kbps~数百kbps |
| 接收灵敏度 | 可达-137dBm | 约-110dBm | 约-120dBm |
| 链路预算 | 155dB+ | 约130dB | 约145dB |
| 是否需要SIM卡 | 不需要 | 不需要 | 需要 |
| 网络依赖 | 自建网关 | 无 | 运营商基站 |
| 典型功耗 | 极低 | 低 | 较高 |
| 典型成本 | 模块十几到几十元 | 便宜 | 模块几十元以上 |
3. 三个必须吃透的参数:SF、BW、CR
3.1 扩频因子SF是“用时间换增益”的算术题
扩频因子SF可以说是LoRa里最核心的参数,取值范围一般是7到12。公式不复杂:符号速率Rs = BW / 2^SF。
以125kHz带宽为例:SF7时,符号速率=125000/128≈976.6sps;SF12时,符号速率=125000/4096≈30.5sps。也就是说,SF12下每个符号的空中时间是SF7下的32倍。这32倍的时间拉长,换来的是约12dB到15dB的灵敏度提升。
我举个实测案例。之前在郊外做土地墒情监测项目,节点位于一处山坡,网关在约2公里外的农房顶。SF7直接丢包率40%以上,RSSI虽然有-115dBm但解调不出来。把SF调到12后,丢包率降到2%以内,RSSI约-122dBm,SNR约-13dB,数据反而稳定了。
代价也很明显:同一条指令,SF7发10字节数据约50ms完成,SF12可能要到300ms以上。空中时间越长,占用的信道资源越多,节点的发射功耗也越高。所以调SF不是在选一个“越大越好”的参数,而是在距离、速率、时延、功耗四者之间找平衡。
3.2 带宽BW:为什么LoRaWAN把125kHz作为默认
带宽BW决定一个LoRa符号扫过的频率范围,常见取值为125kHz、250kHz、500kHz。
带宽越宽,数据速率越高,但接收灵敏度会下降。原因很简单:信号能量分散到更宽的频谱上,单位频带内的信噪比变差。BW从125kHz提到250kHz,数据速率翻倍,但灵敏度大约损失3dB;提到500kHz,再损失3dB。
LoRaWAN协议默认信道带宽是125kHz,上行为主也基本只用125kHz。主要因为下行网关发射功率有限,带宽窄一点,灵敏度高一点,下行覆盖就有了保证。250kHz、500kHz多见于点对点LoRa通信,比如两个LoRa模块直接互传数据,不经过网关。
我实际用过250kHz带宽点对点传图片,大概几百KB的灰度图,传了十几分钟,能用但谈不上效率。如果是对传速率有要求的场景,LoRa根本不该在候选列表里。
3.3 编码率CR:多一点冗余,就多一分到达率
编码率CR是LoRa的纠错机制,可取4/5、4/6、4/7、4/8。它表示在4个有效数据比特后附加1到4个纠错冗余比特。CR=4/5时冗余最少,CR=4/8时冗余最多。
冗余不是浪费。当信号受到突发干扰、多径衰落时,接收端靠这些冗余比特能恢复出原始数据。代价是数据速率按比例下降,空中时间变长。
我一般的配置建议是:城市环境、厂房内部、有大量金属遮挡的最低要求CR=4/5;郊区、或信号已经比较边缘的用4/6;远距离极限测试、追求链路稳定的用4/7。CR=4/8我很少用,因为它带来的抗干扰提升边际效应已经不明显,但速率损失实在太大。
把SF、BW、CR组合起来,有效数据速率计算公式是:Rb = SF × (BW / 2^SF) × CR。一个典型的LoRaWAN配置SF12、BW125kHz、CR4/5,速率大约是293bps;SF7、BW125kHz、CR4/5则约是5.47kbps。看起来差距很大,但你要知道,在无线通信里,速度永远不是白来的。
3.4 参数组合速查表
我整理了一张实际项目里常用到的参数组合表,可以直接做选型参考:
| SF | BW (kHz) | CR | 有效速率 | 灵敏度参考值 | 典型定位 |
|---|---|---|---|---|---|
| 7 | 125 | 4/5 | 约5.47kbps | 约-123dBm | 市区短距、大量节点 |
| 9 | 125 | 4/5 | 约1.76kbps | 约-129dBm | 郊区一般场景 |
| 10 | 125 | 4/5 | 约0.98kbps | 约-132dBm | 远距离传感 |
| 12 | 125 | 4/6 | 约0.24kbps | 约-137dBm | 极限链路、超远距 |
| 12 | 250 | 4/5 | 约0.59kbps | 约-134dBm | 点对点高增益场景 |
4. LoRaWAN协议层:设备是怎么入网和上报数据的
4.1 裸LoRa和LoRaWAN是“物理层”和“交通规则”的区别
很多人把LoRa和LoRaWAN混着说,其实是两个层面的东西。裸LoRa只是物理层调制技术,解决的是“一个比特怎么从A点到B点”。LoRaWAN是运行在LoRa物理层之上的MAC层协议,定义了设备怎么入网、怎么寻址、怎么加密、怎么重传。
你可以把裸LoRa理解为能说话的本事,LoRaWAN则是两个人约定的对话规则:先报名字、再说正事、说完确认、没收到就重说、内容加密防止被偷听。
LoRaWAN的网络拓扑是星型。节点直接和网关通信,网关只做数据转发和射频解调,通过以太网、4G或Wi-Fi把数据送到网络服务器。注意,LoRaWAN不是mesh网络,节点之间不能互相转发。这一点常被人误解,以为LoRaWAN能像ZigBee那样自动组网多跳,实际不是。
星型拓扑的好处是低功耗。节点只需要定向向网关发送数据,不需要监听其他节点,不转发别人的数据包,绝大部分时间可以睡觉。
4.2 设备激活:OTAA和ABP怎么选
LoRaWAN节点入网有OTAA和ABP两种方式。
OTAA(Over-The-Air Activation)是动态入网。节点上电后,用预烧录的DevEUI、AppEUI和AppKey发起Join Request,网络服务器验证后返回Join Accept,动态生成本次会话的DevAddr、NwkSKey和AppSKey。密钥每次入网都可能不同,安全性高,适合量产设备。
ABP(Activation By Personalization)是静态激活。DevAddr、NwkSKey、AppSKey直接预烧录在节点里,上电就能发包,不用走入网流程,省时省电。但有明显缺点:密钥永远不变,一旦泄露整个设备都可以被伪造;且网络服务器重启后很容易漏同步帧计数导致设备被拒收,排错麻烦。
我的建议是:能上OTAA就别用ABP,除非你做的是一次性演示demo或者完全隔离的测试环境。量产项目里OTAA入网只比ABP多发送一个Join Request和接收一个Join Accept,成本低到可以忽略,安全性高一大截。
4.3 三种终端类型Class A/B/C:功耗优先级决定了工作方式
LoRaWAN根据下行接收方式定义了Class A、Class B、Class C三种终端类型。
Class A是基础型,也最省电。节点自己发起上行数据,发送完后打开两个短接收窗口(RX1、RX2),等待服务器下发数据。窗口只在发完数据后短暂开启,其余时间全部睡眠。适用于电池供电的传感器,比如水表、气表、土壤传感器。我绝大多数项目都是Class A。
Class B在Class A基础上,通过网关定期发出的信标(Beacon)做时间同步,节点会在约定的额外时间窗口周期性监听下行数据。适合对下行有实时性需求、但仍是电池供电的设备,比如可远程配置参数的灌溉控制器。
Class C是持续监听型。设备几乎一直处于接收状态,只在发送数据时短暂关闭接收。服务器可以随时下行指令,时延最低,但功耗最高。适合持续供电的设备,比如路灯控制器、智慧垃圾桶、智能电闸。
三类终端功耗与实时性对比:
| 类型 | 下行时延 | 功耗 | 典型设备 |
|---|---|---|---|
| Class A | 高(需等待节点上行) | 最低 | 水表、传感器 |
| Class B | 中(按信标周期监听) | 中等 | 远程可配置设备 |
| Class C | 低(持续监听) | 最高 | 路灯、插座、电闸 |
4.4 一个真实的上行报文里到底有什么
以LoRaWAN 1.0.x协议为例,物理层报文结构是:Preamble + PHDR + PHDR_CRC + PHYPayload。PHYPayload里是MHDR + MACPayload + MIC。
MHDR是1字节的消息头,标识消息类型(比如Join Request、Confirmed Data Up等)。MACPayload包含帧头FHDR(设备短地址DevAddr、帧控制字、帧计数、最多15字节的可选端口FOpts)、FPort(应用端口号)和FRMPayload(真正要传的应用数据)。MIC是4字节的消息完整性校验码,用来防止数据被篡改。
有一次我抓包调试异常上报,设备发送的完整Hex串开头是40开头的(Confirmed Data Up的MHDR),里面能清晰看到DevAddr,之后是帧计数,FPort落在10,载荷就是4字节的温度整数。整个过程用Wireshark加插件或者LoRaWAN调试工具都能解开。
你还需要关心“这个包到底在空中多久”。一个SF12、BW125、CR4/5、应用层10字节的数据包,加上协议头、MIC等开销,PHYPayload大约30字节左右,空中时间大概在600ms以上。如果上报量达到每节点每小时一次、网络里有几百个节点,这个占空比必须提前算清楚,否则信道会严重拥塞。
5. 实操经验:模块选型、链路预算与低功耗设计
5.1 模块选型:SX1276还是SX1262/SX1268
LoRa芯片基本绕不开Semtech的SX系列。老的SX1276是市面上存量最多的,资料多、例程多、便宜,但功耗相对高,射频性能略逊。SX1262和SX1268是新一代,SX1262覆盖868/915MHz,SX1268覆盖470/510MHz,适合国内频段。
我量产项目现在优先选SX1268,理由有三条:一是接收灵敏度比SX1276略好;二是发射功耗优化明显,20dBm发射时电流更低;三是支持前导码检测和超时唤醒,低功耗设计更灵活。
市面上国内主流模块基本都在SX126x基础上做了二次封装,接口一般是SPI。选型时有个很关键的建议:不要只信商品详情页写的“传输距离10公里”,一定去下载芯片原厂数据手册看“接收灵敏度典型值”并核对测试条件,特别是带宽和SF配置。宣传页里的数字通常是SF12+BW125+433MHz视距极值,和你的实际应用差很远。
5.2 链路预算:为什么有人传15公里你只传500米
链路预算决定了系统“理论上能传多远”。公式非常简单: 链路预算 = 发射功率(dBm) + 发射天线增益(dBi) + 接收天线增益(dBi) - 接收灵敏度(dBm)
假设发射功率20dBm,两端天线各2dBi,接收灵敏度-137dBm,那么链路预算=20+2+2+137=161dB。这是理想链路预算,实际还要扣除线缆损耗、天气雨衰等,一般打个85到90折。
自由空间路径损耗公式是:FSPL = 20log10(d) + 20log10(f) + 32.44,其中d单位是公里,f单位是MHz。在470MHz下,10公里的自由空间损耗约为20×1+20×26.7+32.44=105.9dB?不对,我重新算一下:20log10(10)=20,20log10(470)≈53.4,加32.44合计105.8dB左右。这看起来很小,但实际场景里障碍物反射、树木水体吸收会额外增加20到40dB损耗,不是那回事。
我自己常用来估实测覆盖的方法是:拿一块带LoRa模块的节点板和一个USB单通道网关,在目标现场先把SF调到12、BW 125kHz、CR 4/7,用最大合法发射功率发定时包,拿着手机看某款波形测试App里的RSSI和SNR变化。能稳定收到且SNR不低于-12dB的区域,基本就可以作为有效覆盖边界。
“别人传15公里”多说一句,我猜他八成是在海上、湖面或者超高地势视距环境下测的。我在城市里做过多次测试,SF12无遮挡CBD区域能到2到4公里已经非常理想,室内到室外更短。
5.3 网关部署与频点规划
网关是整个LoRaWAN网络里的“收音塔”。入门级单通道网关便宜但吞吐量极低,只适合调试,不建议做生产。量产项目建议用8通道网关,SX1302是当前主流方案,能够同时解调8个频点,还可以开“扫描所有SF”模式。
部署网关时有几条硬经验:
第一,尽量高。天线架高2米5和架高10米,覆盖范围差距非常大。道理和物理课讲的一样,传播距离受地平面阻挡,架高能突破这个限制。有条件就上皮线杆、屋顶、铁塔。
第二,远离金属与大面积水泥体。金属网架、彩钢瓦屋顶、玻璃幕墙会严重吸收反射信号。我踩过一次坑,网关放在彩钢瓦屋顶下,某方向覆盖距离锐减到不足500米。
第三,频点规划不要冲突。LoRaWAN每个国家有默认频段表,比如国内CN470是470-510MHz,分为多个上行频点和下行频点。在同一区域如果有多个网关服务同一个网络,网关之间频点要分配好,相邻网关尽量分开频点和SF分配,减少同频碰撞。
第四,先画覆盖图再布点。施工前至少用一辆车把目标区域跑一遍,在每一点持续发射至少1到2分钟,记录RSSI、SNR、丢包率。不要等几百个节点全装完了才发现某小区地下车库根本没信号。
5.4 低功耗设计:实测电流与唤醒策略
LoRa节点最大卖点是电池供电能跑好几年,但这是有前提的:节点必须尽量睡觉。
一个典型的STM32L0 + SX1268节点,稳定运行时电流约5mA,发射时峰值约40到120mA(视发射功率),但休眠时可以做到2µA以下。做好低功耗设计的重点在三个地方:
第一,MCU进Stop模式,关闭不用的外设时钟,启动外部中断唤醒。不要用延时函数跑着睡,那只是“省电地跑”而不是真休眠。
第二,LoRa模块要进Sleep模式,而不是Standby模式。SX1268的Sleep模式电流能到nA级,Standby还有几百µA到mA级。
第三,检查所有外部上拉电阻、LED指示灯、稳压器静态电流。我就遇到过“休眠电流比手册大100倍”的案例,原因是开发板上电源指示LED一直亮着,拆掉后电流立刻从小几百µA降到几µA。
实测一组数据供参考:节点每小时上报一次,每次上行约0.5秒,发射电流100mA,休眠电流5µA,那么平均电流约等于(100mA×0.5秒重点1000)每小时贡献约14µAh,再加上休眠时间贡献约5µAh,总日均电流远低于1mA,三节五号电池理论上能撑一年以上。当然实际还要考虑电池自放电、低温衰减,建议做样品实测而不是拍脑袋。
5.5 一段可以“抄作业”的点对点通信代码
很多人搜“LoRa通信代码”其实是想快速跑通两个模块互传数据。这里放一段基于SX1268和Python的极简示例,使用lora-python库通过SPI驱动,硬件上树莓派加LoRa HAT就能跑。
# 发送端:SCL=GPIO11, SDA=GPIO10, RST=GPIO22, NSS=GPIO8, DIO0=GPIO7 from lora_python.lora import LoRa, ModemConfig lora = LoRa(serial_port='/dev/spidev0.0', reset_pin=22, nss_pin=8, dio0_pin=7) lora.set_frequency(470.0e6) lora.set_modem_config(ModemConfig(bw=125e3, coding_rate=5, spreading_factor=12)) lora.set_tx_power(20) while True: lora.send_packet(b'{"t": 23.5, "h": 60.2}') time.sleep(60)# 接收端:同样的初始化,然后循环读取 while True: packet = lora.receive_packet(timeout=10) if packet: print(packet.decode('utf-8'))注意:这段代码用JSON字符串点对点透传,没有LoRaWAN协议栈,适合考证链路覆盖或做私有点对点方案,不适合做多节点组网产品。如果要做完整LoRaWAN节点,建议直接用Semtech官方驱动或成熟的LoRaWAN协议栈如Mbed LoRaWAN Stack、Arduino-MCCI LoRaWAN,别从头写协议。
6. 现场踩坑记录:常见问题与排查策略
6.1 RSSI正常但丢包严重,先检查SNR
有次客户报“信号满格但收不到数据”,我去现场看,节点RSSI显示-90dBm,但SNR一直徘徊在-15dB以下。RSSI只看信号强度,SNR反映的是信号质量。如果SNR很低,说明信号本身淹没在底噪里,即便指示强度不低也可能解调不出来。
排查方向通常是:节点或网关附近有宽频干扰源(变频器、电机、大功率开关电源);或者天线馈线损坏,接触不良导致阻抗失配;也可能是周边有同频段的无线设备在持续发射,比如无线抄表集中器、对讲机中继台。用频谱仪扫一下环境底噪是最快的方法。
6.2 休眠电流比手册大一个数量级
这个坑太经典了。之前做户外温湿度传感器,标称2.5µA休眠电流,实测100多µA。排查路径是:拆掉主板外设逐项排除,最后发现是LoRa模块的DIO1引脚悬空,浮空输入导致漏电。解决办法是在关键GPIO上加下拉电阻或STM32内部下拉。
另外一个高频问题是开发板的稳压器。很多开发工具板带LDO和LED,静态电流本身就几百µA,不适合直接做低功耗样机。自己画板子或购买专门的低功耗节点板才能拿到真实数据。
6.3 ADR到底开还是不开
ADR(自适应数据速率)是LoRaWAN网络根据链路质量自动调节节点速率和发射功率的机制。它能显著提高整体网络容量,但我在实际项目里吃过亏:一个上行成功率达到98%的节点,网络服务器把它的SF从10自动调到了7,结果覆盖边缘的节点开始周期性掉线。
我的原则是:如果节点位置固定、链路稳定,优先手动把SF定在一个偏保守的值(比如SF10或SF11),关掉ADR;如果节点是移动的、链路起伏大,再考虑开ADR。开了ADR之后一定要做好监控,发现节点连续丢包趋势要能及时回退,否则运维压力全在你身上。
6.4 常见问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 节点完全收不到网关ACK | 网关频点/密钥配置不匹配 | 核对Join频点、AppKey、DevEUI |
| RSSI正常但丢包 | SNR过低、干扰源、天线馈线问题 | 扫频谱、检查天线、降低底噪 |
| 部分区域覆盖盲区 | 网关架设太低、被金属遮挡 | 升高天线、换高增益天线或补网关 |
| 休眠电流异常 | LED、上拉电阻、模块未Sleep | 逐项拆除外设排查 |
| 空中时间过长导致信道拥塞 | SF太高、报文太长 | 调低SF、压缩载荷、错峰上报 |
| 同频干扰严重 | 多个网络在同一频点 | 重新规划频点和SF分配 |
| 电池低温掉电快 | 锂电低温特性差 | 换耐低温电池或做保温 |
6.5 最后,关于“距离不够远”的补充排查思路
如果实测距离和目标差太远,别急着换设备。先按顺序自查:天线是不是全向天线、天线是否垂直放置、馈线损耗是否过大、发射功率是否真的设置成功(用频谱仪实测)、网关接收灵敏度是否被带宽配置拉低、环境中是否有山地或密集高层遮挡。
还有一个经常被忽略的:节点天线的地平面。很多外壳把天线塞在金属板旁边,效率掉得一塌糊涂。天线周围至少要保持一个波长以上的净空,这个经常比软件参数更能决定成败。
我个人在做完那么多LoRa项目后最大的体会是:LoRa并不是无线通信里的全能选手,它擅长的是把“每天传几次,一次传几十字节”这种看起来毫不起眼的需求做到极致的简单和可靠。选型之前先想清楚你的数据量、上报频率和部署环境,再决定要不要用LoRa,而不是看它能传多远就冲。如果在RF测试条件有限、又想快速验证覆盖的情况下,我的建议是先拿一套SF12配置,把天线尽量架高至少2米,在目标区域跑一遍链路预算,用这个数据再去定网关数量和节点参数,远远好过拍脑袋直接量产。