导言:LoRaSun协议的核心思想就是 物尽其用。
一、LoRa基础介绍
在国内,LoRa使用的频段一般是470~510MHz,使用的LoRa芯片一般是SX1278、SX1268和LLCC68三种,其中SX1278属于经典款,2013年就推出了;SX1268是后来根据需求升级的型号,首先发射功率最高可以22dBm,SX1278是20dBm,其次是低功耗更出色,休眠电流由SX1278的2uA降到了SX1268的不到1uA。另外,这里有一些网友的测试视频:新一代LoRa-SX1268与经典LoRa-sx1278对比 - 知乎
LLCC68是SX1268的阉割版,除了不支持SF12的情况,其他基本一致,在价格上很有优势,我们以安信可的几个型号作价格对比,LLCC68比SX1278便宜了将近9块钱。
LoRa模块的生产厂家很多,网上看起来比较专业的模组厂商应该就是安信可和亿百特了,特别是安信可的RA01和RA02,都多少年了,还在供货,这个挺不容易的,这样下游客户用起来就比较放心了。对于大部分应用这来讲,你的出货量没到10K以上感觉没必要自己去设计LoRa模块,因为这里面涉及了天线射频相关的内容,研发成本很高,所以还是直接买成熟的模块集成就好了。
近几年也涌现出了很多带MCU的LoRa模块,比如ASR6601和STM32WLE5系列,理论上节省了体积和成本,实际上我也没用过,不予置评😭。
总的来讲,我还是更倾向于外挂MCU+LoRa模块的方式,比较灵活;另外,在这个内卷的年代,我比较看好LLCC68这个型号,性价比足够高。我的评估板是用安信可的SX1268作为网关天线模块,终端节点SX1278、SX1268和LLCC68都有,都可以自己测试体验。
二、LoRa的资源
在无线组网中,最核心的一个问题就是信道碰撞,在很多传统的433M模块中,基本上只能提前规划好几个频点按时间进行使用,也就是频分多址和时分多址的思想,使用起来不够灵活,邻近频段干扰严重,效果并不理想。这是由物理层决定的,所以LoRa凭借优异的物理层特性,在无线资源上更丰富,除了频段外,还有扩频因子和带宽这两个参数。两个LoRa模块要通讯,这三个参数必须一致,这稍微增加了点开发复杂度,但是反过来想,如果参数不一致是不是就可以避免碰撞了,而且三个参数,组合起来的通道非常之多,就像马路一样,传统无线模块只是个单行道,LoRa是8车道,甚至更多了。
正常LoRa的扩频因子SF范围是7~12,带宽是62.5、125、250和500KHz(对应的配置参数是(6、7、8、9),这么组合起来就有6x4=24种通道了,完全足够用了,再配合频段470~510MHz,组合就更多了,可以说无线资源非常丰富,这就为组网效果提供了一定的保障。
另外,LoRa为了节点不要乱发数据,使用一种机制是发送前监听该信道是否有活动(LBT),这里面用到的技术是信道活动检测(CAD),它可以在极短的时间内检测出这个信道有没有在传输数据,之前的SX1278只能检测前导码,SX1268和LLCC68也能检测数据,而且后者的CAD参数还能单独设置,使用时更加灵活。但是,有一说一,这个功能有点鸡肋,特别是SX1278,检测到的概率并不高。那么,这么好的功能也不能浪费,CAD的特点就是速度极快,一个检测周期在10~60ms之间,看参数配置;如果能有效利用起来,应该可以实现两个普通LoRa模块的自适应速率(ADR)功能 ,而不需要用到SX1301这种高端货,这也是LoRaSun这个项目的思想源头。
三、整体设计
网关是自组网的核心,既然不用类似SX1301的专业网关芯片,自然而然都会想到用多个LoRa模块制作多天线网关,目前市面上也有很多在销售的,例如有人的LG210,如下图:
但是这只能说有组网功能,不能叫自组网,因为需要用户根据现场状态一个个配置终端参数,本质上还是点对点传输。
网关配置界面
自组网至少应该符合以下特征:
1.节点能够自动与网关通讯,出厂后无需参数配置;
2.有低功耗唤醒功能,即低功耗设备在合适的时间窗口能够被唤醒、控制;
3.通讯速率自适应,不能死板板的只用最慢、最远的通讯参数,节点要有主动优化速率的功能,不但提高效率,还更节约能耗;
4.特别地,设备间必要时最好可以直接通讯,即D2D能力。
为了满足自适应的需求,以下是多天线网关的硬件原理图,在第一篇的时候已经有说明过了。每个天线模块都会实时处理各自的任务,比如发送、接收或者CAD扫描,如果有什么结果就会通过串口反馈到主MCU,由主MCU进行逻辑管理,这样整个系统分工明确,便于扩展。
在软件设计上,分为搜网模块、上行模块、下行模块和D2D模块,其中入网过程包含在上行模块里,下图是终端节点的工作运行流程图。
节点工作流程图
下图是网关天线的工作流程图,分为静态和动态两种模式,一般一个网关只选择一种模式运行。
网关静态模式和动态模式流程图
总体上看流程还是比较简单的,但是具体到写代码的细节还是有难度的,这一篇只是简单介绍下整体设计思想,后续篇章会针对每个模块单独详解,包含各部分代码的运行流程。
四、工程概览
整个项目分为三个工程,如下图所示,分别对应网关的主MCU,网关的天线从机和终端节点三部分,为了方便项目的管理以及降低学习门槛,这里三部分的硬件MCU都是选用经典的STM32F103C8T6,所以这三部分代码是放在同一个工作空间内的。
随后进入各个项目文件夹,双击项目文件就可以用Keil打开了,如下图所示:
网关主MCU工程概况如下图所示,除了协议栈的逻辑管理程序以外,更多的是与云平台之间的任务处理,整个工程还是比较简洁的。
下图是天线从机的工程概况,LoRa芯片是在这里驱动的,目前支持SX1278、SX1268和LLCC68三种,其中LLCC68与SX1268共用一套。
下图是节点的工程概况,除了协议栈和LoRa驱动外,还有个OLED屏幕的驱动,为了方便显示收发过程中的关键调试信息。
综合来讲,三个项目的工程结构都差不多,就是各自的功能模块有差异,在这里我都是使用RT-Thread操作系统的,方便程序的模块化,所以在进入主程序后,我都是在user_app.c中进行任务的创建的,很多串口指令都是下图中的 "uart" 任务进行处理的。
另外,还是可以在user_opt.h中做一些本项目的个性化配置,比如串口波特率、软件版本、RTT堆栈空间等等,其中还有一个是否启用RTC,对于主MCU和节点来讲,RTC是要使用的,这样才能比较精确的对时,下行数据时才能唤醒;在使用过程中,如果碰到开机启动时间长(5S),那是因为RTC的晶振不起振,可以用热风枪或者电吹风对着MCU旁边的32K晶振吹个两三秒,这样基本就没问题了,如果没有长时间的对时需求,使用内部晶振也是可以的。
项目的整体分析就是这样了,后续的内容就是对协议栈的各个模块进行细节性分析了。
本人的其它文章导航地址:端点物联网学习资源合集-CSDN博客
关注VX公众号 端点物联,以便即时接收文章更新信息。
学习交流QQ群: 701889554