前言:如何实现一个主lora与多个从lora之间高效的数据传输。我这里的主lora主要负责集中采集多个从lora的数据。典型的应用就是主lora采集附近多个lora传感器的数据。本文中用到的lora为sx1268,最多按照5个从设备进行设计。
第一篇,简单思路
**通信架构选择:**采用「星型拓扑」,5 个传感器(sx1268)作为从机,主机(sx1268)作为LoRa 网关。
关键优化策略(优先级:快→稳→安全):
- 频率与带宽:选 433MHz,带宽设 500kHz/1MHz(带宽越大,传输速率越高,牺牲部分距离)。
- 调制方式:用「FSK 调制」(速率 10-50kbps),比 LoRa 调制(1.2-50kbps)响应更快,适合短距离高频传输。
- 数据帧设计:每个传感器数据帧精简为「地址码(1 字节)+ 数据(4-8 字节)+ 校验码(1 字节)」,总长度≤12 字节,减少传输时间。
- 时分多址(TDMA):给 5 个传感器分配固定时间片(如每个传感器占用 20ms,周期 100ms),避免信道冲突,确保每秒至少 10 次全量数据更新。
实操步骤
- 给每个传感器分配唯一地址码(0x01-0x05),网关按地址码识别数据来源。
- 传感器端:数据采集→打包帧→按分配的时间片发送,发送完成后进入低功耗等待下一轮。
- 网关端:持续监听信道→接收帧→校验→按地址码分类存储 / 转发,全程中断响应,避免轮询延迟。
第二篇,TDMA时分多址的方案
1. 初始同步:网关广播授时
网关作为时间基准,上电后立即广播同步帧(SYNC 帧),包含网关当前系统时间、时隙分配表(如传感器 1:0-20ms、传感器 2:20-40ms... 传感器 5:80-100ms)、通信周期(如 100ms)。
传感器上电后先进入 "监听模式",接收 SYNC 帧后解析时隙规则,用本地 MCU 定时器(如 STM32 的 TIM 定时器,1ms 精度)同步到网关时间轴,明确自身发送窗口 ------ 比如传感器 1 仅在每个 100ms 周期的 0-20ms 内发送数据,其余时间休眠或监听。
2.周期性广播同步:
网关每 1-2 分钟广播一次精简版 SYNC 帧(仅含时间偏移量),传感器唤醒接收后,修正本地定时器误差(如网关时间显示当前周期起始点为 10000ms,传感器本地显示 9998ms,则补偿 + 2ms);
3.动态误差判断:
传感器记录每次接收同步帧的误差值,若误差 <1ms,自动延长同步周期(如从 2 分钟→5 分钟),平衡同步精度与功耗;若误差> 5ms,立即触发强制同步;
4.时隙预留保护带:
每个传感器时隙末尾预留 1-2ms 空白期(如传感器 1:0-18ms 发送,18-20ms 为保护带),抵消微小漂移导致的时隙重叠;
5.异常重传机制:
若传感器检测到自身时隙被占用(通过 LoRa 模块的 CAD 信道检测功能),则在本周期的 "备用时隙"(如 100-110ms)补发,不影响其他传感器。
第三篇,组网逻辑
核心新增逻辑为:序列码自动组网 + 动态地址分配。也就是每个传感器都具备唯一的序列码。通过序列码在组网时获取对应的地址号(0x01 - 0x05)。
- 组网触发机制:网关主动发起「组网指令」,传感器收到后进入「配置模式」,上报自身唯一序列码;
- 动态地址分配:网关收集 5 个传感器的序列码,自动分配固定地址(0x01-0x05),并存储序列码 - 地址映射表(掉电不丢失);
- 热插拔兼容:传感器故障更换后,网关重新发起组网,新传感器自动上报序列码,网关自动分配空闲地址。
- 时隙动态计算 :网关组网完成后,根据实际接入的传感器数量(N,1≤N≤5),自动分配时隙:
通信周期固定为 100ms(保证传输频率);
每个传感器时隙时长 = (100ms / N) - 2ms 保护带。(确保总时长≤100ms);
例:3 个传感器→时隙时长 =(100/3) - 2 ≈31ms,4 个→(100/4) - 2 =23ms,5 个→(100/5) - 2=18ms。 - 时隙表动态生成:网关分配地址后,生成动态时隙表(含每个地址对应的时隙起始时间、时长),通过同步帧下发给传感器。
- 传感器自适应:传感器接收动态时隙表后,自动适配自身时隙。
经过这番逻辑,我们就可以做到:
- 兼容性:支持 1-5 个传感器自动适配,新增 / 更换传感器后,网关重新组网即可生成新的时隙表;
- 频率保障:通信周期固定为 100ms,无论传感器数量多少,每秒均可完成 10 次全量数据传输;
- 冲突避免:动态计算时隙时长时预留保护带,且时隙按地址顺序分配,彻底避免通信冲突;
- 掉电保存:网关的序列码 - 地址映射表、传感器的分配地址均存储在 Flash /EEPROM中,掉电后重新上电无需再次组网(除非发送组网指令)。
第四篇,掉电重连机制
如果传感器或者网关中途掉电,又重新上电了,就可启动掉电重连机制。
- 网关掉电重连:上电后从 Flash/EEPROM读取历史映射表和时隙配置,直接广播同步帧(含动态时隙表),无需重新组网;若传感器未响应,可通过串口指令触发补网。
- 传感器掉电重连:上电后从本地 Flash /EEPROM读取已分配的地址,进入 "监听模式" 接收网关同步帧,解析时隙后直接加入网络,无需网关重新发起组网。
- 补网机制:网关每 30 秒扫描未响应的传感器地址,若检测到新传感器(或失联传感器重新上线),自动更新时隙表并广播同步。
第五篇,周期的灵活配置
前面我们将全量数据的刷新周期设定为了 100ms(10hz),实际中考虑低功耗的应用,我们也可以对周期进行一些配置,比如支持100ms - 5000ms的自定义。
- 周期配置方式:网关通过串口指令设置通信周期(如发送 "CYCLE=200" 设置为 200ms),并存储到 Flash/EEPROM;
- 动态适配:网关修改周期后,自动重新计算时隙时长,广播同步帧告知所有传感器;
- 传感器自适应:接收同步帧中的新周期,更新本地周期参数。