目录
一、背景分析
1.1 行业数据
Semtech公司在2013年推出的一款远距离、低功耗的无线收发器SX1278,拉开了低功耗广域网(LPWAN)领域激战的序幕,彼时,还处于移动互联网(手机)的风口,物联网并不算火热;直到2017年,NB-Iot大规模推广,彻底引爆了物联网市场。像烟感、地磁、共享单车、水表、气表、电表等各类应用和概念层出不穷,其中很大一部分产品都会有LoRa和NB-Iot两种通讯模式,有一股楚汉争霸的态势,大家都在争论两者谁会胜出。没想到,半路杀出个程咬金,2020年左右,各大厂商相继发布了cat1芯片和相关模组,得到了市场的强烈认可,短短几年,在广域网领域获取了较大的市场份额,以下是行行查里弄来的数据,可供参考。
1.2 市场现状
从图表可以看出,三者的每年出货量都在1亿往上,广域物联网领域基本上可以认为是三足鼎立了。当然,这里的数据很难去验证了,但是从直观的感受来讲,市场上的热度是cat1>LoRa>NB-Iot的,本人有三者相关的技术群,从人数和平时各群讨论热度来看是这种关系的;另外,本人之前写了一些博客,从阅读量来看也差不多。
另外,最近有一些消息也顺便提一下,一个是思科逐步退出LoRaWAN市场,一个是AT&T宣布逐步关停NB-Iot网络。
1.3 关于cat1的思考
说了这么多,其实主要想引出的一个问题就是cat1为什么能够在短短几年内异军突起?以往在对比广域物联网技术的时候,大部分还是按下图的模板,去比较终端的特性,这无可厚非,都在宣传自己的特长,甚至有时候参数掐点写,比如功耗你说4uA,我说3uA;距离你说10公里,我说15公里······这么比,最终结果就是误导了消费者和开发者,真正落地的时候各种问题,试错成本很高,体验很差。
回到cat1本身,它的高速率增长核心来讲就两个原因:一是 相对于cat4降速减配后价格下来了,原来cat4模组价格基本在150元以上,cat1刚出来价格40多,随着出货量的增加,现在已经来到了20元左右的价格(还有8块钱的就不说了😭),性价比已经不错了;二是 可以复用现有的运营商基站,这一点才是真正的关键,特别是国内,4G基站在城区基本上已经没什么盲区了,地下室、高速公路上也基本有信号,甚至很多郊区、森林公园也都还有,这就为cat1的应用提供了最基础的保障。反观同根同源的NB-Iot,由于基站需要重新搭建或者升级,导致覆盖率一直上不去,站在运营商的角度,投入高,收益未知,毕竟是新东西,只能挤牙膏似的慢慢来;站在使用者角度,覆盖率上不去,体验不好,等运营商基站建了差不多了再上NB,最终结果就是恶性循环了。
所以,在广域物联网领域,从技术上讲,“看不见” 的基站才是成败的关键,只有盲区少了、信号好了才能提升用户体验、降低维护成本,实现多赢局面;至于终端的技术特性,如果不是差一个以上的量级,其实都是可以接受的。例如,cat1刚开始低功耗不行,虽然基站没问题,但是低功耗应用基本不会考虑;然而,现在已经有厂家搞出了休眠2uA的cat1模组,意味着cat1在低功耗领域也要来分一杯羹了。
对于cat1和NB来讲,基站是运营商在管理,跟开发者和用户没啥关系,最多也只能投诉,能不能帮你解决看人家心情;对于开发者来讲,也只有LoRa的基站可以把玩把玩了。
1.4 LoRaWAN分析
说到LoRa,LoRaWAN是一个绕不过去的话题,它是一个公开的、由LoRaWAN联盟主导的开放式协议栈,开源免费;听起来很不错,不过在使用过程中也会有很多问题:
首先是成本过高,软件虽然免费,但是网关要自己买,以前一个SX1301模组都要近千元,成品户外网关三到五千,多部署几个网关的话成本就很重了,现在倒是降下来了,SX1302三百多就有了。
其次,部署起来也麻烦,要自己测信号,选位置,如果成本敏感,要选择一个最优位置并不容易,时间成本很高,另外还有供电问题,好位置不一定有电源。
再者是功耗比较高,LoRaWAN网关内部除了SX1302模组外,正常还有嵌入式的linux系统板、4G、GPS,有的还有交换机,整体下来功耗有个十几瓦,如果没有电源,想用太阳能等方法几乎不太可能,最终也只能强行拉线,这个也是隐形成本,可能一开始并没有考虑进去的。
最后一点是开发难度有点大,这里并不是说技术上有多难,而是LoRaWAN整体技术栈覆盖广、细节多,对于很多工程师来讲,本来就只会点单片机相关的技能,现在还要学嵌入式linux、服务端部署、网络通讯、还有一些网站的知识,真会搞死人,令开发者望而却步;以至于网关需要交给专业的第三方公司,购买成品网关,提供一整套服务给你,说白了不就是运营商吗?
这应该也是LoRaWAN起初的定位--运营商角色,这一定位在国外问题不大,地广人稀,4G信号不好,但是在国内就很难实现这一愿景了,能用4G解决的一般不会考虑其它技术,而目前很多大规模的应用都能用4G解决,比如智能手表、共享设备、定位追踪等,剩下的比较大的4G暂时搞不动的市场就是表计了,这玩意儿对低功耗、体积和成本确实有极致的要求,暂时都是LoRa或者NB,随着cat1功耗进一步优化,有可能这部分市场也要被吞食。再者说,“运营商”这三个字是需要有信用和能力背书的,一般公司无法扮演这个角色的。
总体来讲就是LoRaWAN使用起来挺麻烦的,信号补盲成本高,部署过程中涉及人员过多,沟通成本高,适合收益较高、规模较大的网络。
1.5 小结
结合目前的WIFI模块、4G模块、NB模块和LoRa模块的行情,明显地WIFI和4G的热度是高很多的,除了市场这一决定因素外,还有两个重要原因:一是 技术门槛低,不论WiFi还是4G,应用开发者一般都不需要去阅读协议文档和芯片资料,只需要看看AT手册即可,时间上可能一两天就入门了;二是 部署起来很省心,像WiFi一般用在智能家居场景,无线路由器基本上属于日常刚需,用户自身都已经解决信号覆盖问题了,而4G上文提到过了,运营商基本上也都覆盖完整了,对于部署过程,用户一般按照操作手册配置配置即可,省时省力,体验良好。在实际项目中,时间就是金钱,如果部署过程花太多时间和人力,搞不好整个项目是要亏钱的。
客观地讲,LoRa物理层技术是非常不错的,我在2016年左右接触到了LoRa,当时做拉距测试时确实被惊艳到了,信号竟然穿透十几层的楼,这在大部分应用场景下都足够使用了;至于宣传说的十几公里,那都是在条件非常理想的情况下,而且速率极低,看看就好了,实际使用还是要自己测试评估的,我的观点是 与其去纠结那几公里表面距离,还不如多部署几个网关,整体效率会大大提升,终端也可以更节能,维护成本直线下降。
在后续的几年内,我也陆陆续续做了几个LoRa相关的项目,大多是电力安防、智慧消防和能耗监测相关的,终端并不多(从几十个到几百个都有),项目金额也不大,所以在方案上并没有选择LoRaWAN,都是自己搞个简单的组网协议,将就着用,没有低功耗的场景就用轮询,有低功耗要求的就随机延时发送,数量不多,勉强能用。在项目过程中,一直寄希望于有成熟、可用、开放的LoRa自组网协议,但是一直都没找到,后来利用业余时间构思了一套流程,具体方法写成了专利的形式,具体可以下载来看:一种基于LoRa无线模块CAD模式的嗅探方法及系统 [发明].pdf
但这只是个方法而已,只有骨架,没有血肉,于是在最近一段时间又突然想起来有这么个事,就把这个方法实现了,也就是标题的LoRaSun自组网协议栈,整个项目完全开源,项目地址 https://github.com/WalleFarm/LoRaSun 。当然,项目处于起始阶段,还有很多没有完善的地方,望见谅;同时也希望通过不断地反馈去完善,直到可以实际应用。GitHub加速器
二、LoRaSun简介
2.1 系统结构
如果把LoRaWAN网关类比于运营商的4G基站,那么把LoRaSun网关类比于家用WiFi路由器就比较合适了,目的就是低成本、小规模的组网应用。下面就是整个结构原理图,并不复杂,就是网关+节点,其中的特点是网关的每根天线都是由一个跟节点一样的LoRa模块驱动的,在测试板上我都是用sx1268模组;更重要的一点是,每个LoRa模块都有一个独立的MCU驱动,本质上就是从机的角色,通过串口与主MCU通讯,这样做的原因有二:一是 LoRa的CAD检测对实时性要求比较高,如果天线LoRa模块多了之后,只有一个主MCU的情况下实时性无法保证,另外,主从模式下,主MCU可以专注于节点管理、交互、后台连接等任务;二是便于扩展,这种主从模式下,要增加天线、扩展容量只需要串口总线上增加相应的天线模块即可,不用担心主MCU的引脚不够用,因为一个LoRa模块至少需要RST、MISO、MOSI、CLK、NSS五根信号线。
LoRaSun协议栈是建立在上图所示硬件框架之上的,网关使用的是与节点类似的普通LoRa模块,成本低、上手快、调试简单。所以LoRaSun协议栈有三部分的代码,网关主MCU、天线从MCU和节点,代码结构很清晰简洁。
当然了,硬件驱动是少不了的,协议栈目前支持SX1278、SX1268和LLCC68三种型号的LoRa模块,其中LLCC68是SX1268的阉割版,价格便宜,不支持SF=12的情况,代码是共用的;这三种型号的模块只要参数合理是可以相互通讯的,评估板网关天线固定使用SX1268模块,相当于全功能,节点可以随意,评估节点三种型号都有,可以自行购买测试效果。
LoRa的开发难度相对一般外设来讲还是比较高的,具体可以看我之前的一篇文章,物联网实战--驱动篇之(三)LoRa(sx1278)-CSDN博客
我这里已经封装好了,开发者无需关心硬件驱动层了,甚至都不需要看芯片手册了。节点端只要根据接口函数配置下设备SN和密钥之类的信息就可以了,剩下的就是数据收发了;网关端就是配置服务器信息即可实现数据上云的功能了。在demo里,节点上传的数据有三种转发形式,一是最简单的串口打印输出,串口调试工具直接查看;二是电信AEP平台,物模型什么的在后续文章中会相继给出;三是我自己开发的物联网套件 端点物联,可以手机端查看数据,因为是完全开放的,所以很多测试都是用这个工具完成的,用第三方平台没法完成。端点物联也是个开源项目,项目地址:GitHub - WalleFarm/M2M-IOT: 端点物联
串口输出
AEP平台
端点物联
2.2网络拓补
网络整体上还是保留着星型网络的结构,因为这种结构是最简单、最稳定、最高效的,得益于LoRa的特性,覆盖范围一般都够用。但是不管穿透力多强,总是有盲区的,NB-Iot发展不理想的一个重要原因就是盲区太多了,实际部署很费人;而cat1得益于4G基站的覆盖率发展迅猛,那么4G基站又是如何补盲的呢?可以看下这篇文章,路边到底有多少树是基站伪装的 ,简单讲就是哪里不行补哪里,因为经济效益总是有的,在补盲的时候,4G一般用的是小基站,单价可能就六七万。
LoRaSun网络也是借鉴了这种思路,以静态模式为主网关组网,动态模式为协网关补盲--即静态为主、动态为辅;这里的静态模式大概意思就是每根天线各自固定监听一个信道,多根天线就可以监听多个信道了,每根天线的速率都不一样,这样就可以适应不同距离的节点了;动态模式利用CAD原理监听,可以在短时间内确认合适的信道,网关天线至少可以只有一根,这种模式下适合制作低成本网关进行信号补盲,一个LoRa+一个4G,再配合周边器件,成本可以控制在百元左右,另外,由于器件少、功耗低,可以使用太阳能+锂电池作为供电手段,在部署上更为灵活简便。具体的后面对协议栈进行深入解读时再说明。
2.3 协议特点
1.协议栈轻量化:单纯节点协议占用ROM≈13KB,RAM≈2KB,这在大部分廉价芯片上都能跑得起来。
2.加密模式多样化:提供明文、TEA和AES三种加密模式,明文主要是为了方便学习调试;TEA占用空间更小、效率更高,以8字节为一个单元,冗余数据更少;AES安全性较高。
3.应用密钥随机化:每个节点入网后都会分配到一组随机数,节点会根据约定的算法生成应用密钥,应用数据传输都使用这一密钥,安全性更高。
4.门槛低:有了协议栈,开发者就可以很轻松地实现LoRa的组网功能,无需过多关心LoRa本身的特性和细节,降低开发门槛。
5.动态速率:在动态模式下,速率是实时自适应的,在单次通讯中就以最优的速率进行通讯,无需网关或服务端跟踪测算;这在多变的环境中很有用处。
6.低功耗唤醒:节点在入网时都会上报一个唤醒周期,例如10,那就是10秒进行一次CAD监听,其余时间休眠,网关会根据这个周期对终端节点进行准确地唤醒,然后进行下行数据传输。
7.D2D传输:也就是设备间传输,数据无需经过网关;由于网关本身也是用普通LoRa模块组合的,所以协议栈天然地具备D2D能力,此时发送方就是充当临时网关的角色,按照流程将对方设备唤醒,然后进行数据传输,这在联动控制时比较有用。
8.无限中继:由于前端网关与节点之间已经组成了一个完整的通讯单元,所以网关数据转发形式可以多样化,比如RS485、WIFI、4G、局域网等等,甚至可以通过另一个LoRa将数据利用定向天线传输到远方的目的地,在网关端进行数据中继,从而不影响节点与网关之间的交互效率,这很适合没有4G信号的场景,比如森林防火,远程灌溉等等。
9.传输可靠:无论上行还是下行,每个数据包都是有确认机制的,如果发送方没有收到接收方返回的确认信号则认为单次发送失败,会进行再次发送,超过限定次数后会通知应用层失败信息,最大限度保证数据的可靠性;另外,数据都有CRC校验,不完整或者错误的数据会被丢弃。
10.连续传输:这部分内容后续会实现,由于LoRa的缓冲区只有255字节,没法传输大量数据(比如10KB),为了解决这个问题,协议栈会支持大数据量发送功能,敬请期待。该功能适合传输低分辨率的图片,适合旧表计远程抄表升级改造 等应用场景。
三、测试效果
3.1 视频演示
LoRaSun演示视频
以上是LoRaSun整体的使用效果,只是简单测试,基本流程是开机--搜网--入网--数据交互,非常简单。在LoRaWAN中,大家最关心的一个参数就是网关容量,意思是这个网关可以容纳多少个节点,有的说几千个,有的说几万个,实际上这是没有标准答案的,因为LoRa的传输速率跨度太大,同样的数据(100字节)从几十ms到将近10秒,根本没办法统一度量,跟你实际使用的场景、数据量和上报周期有很大关系。
100字节发送时长
3.2 网关容量
但这又是一个很重要的参数,实际部署时你要大概评估需要几个网关,或者说开发者要知道大概多久上报一次数据比较合适,这个不可能现场再去改动的,基于此,我想到了一个概念,那就是每分钟并发数(Concurrent rate per minute, CPM)。大概测试流程是这样:
· 1. 设备入网后,在每分钟的起始时刻产生一个0~45之间的随机数,也就是延时发送秒数,该设备等到延时时间到后启动第一次发送,如果发送成功那就结束本回合任务;如果发送失败,随机延时0~10秒,第二次发送;如果再次失败,那就再随机延时0~10秒再次发送,三次都失败则认定为这个数据包发送失败。
2. 经过长时间(2小时以上)测试,会得到一组数据,一次成功率、二次成功率和三次成功率,如果设备数量少,比如就5个,那三次成功率基本上接近100%,但是随着设备数量的增加,碰撞的概率会大大增加,相应的各次成功率会下降,在阶段增加设备的过程中,开发者可以通过观察成功率,结合自身对成功率的要求,就可以大概得到该网关的CPM值了,有了这个数值后,就可以较为精确计算网关容量了,开发者在开发应用程序的时候也可以大概知道产品的上报周期了。
举个例子,比如评估板的4天线网关CPM值大概是12左右,对于部署总数量根据项目是大概知道的,比如500个终端节点,那么上报周期大概就是500/12=42左右,也就是节点上报周期最好大于42分钟,最后再结合产品自身的应用需求,评估这个上报周期是否合适,如果太久了,那就增加网关,平摊设备数量,直到满足要求为止。由于LoRa很多产品都是低功耗的,比如烟感,上报周期正常24小时是没问题的,那么在CPM值等于12的情况下,这个4天线网关大概可以容纳24*60*12=17280个烟感节点,这时候决定容量的已经不是信道碰撞了,而是网关内部空间是否足够管理这些设备的信息,比如SN、密钥等等。
3.3 CPM测试
使用每分钟并发数(CPM)这个概念的好处是可以通过比例缩放的形式较为准确计算网关容量,因为数据是通过模拟实际环境产生的,以分钟为单元主要由测试效率、成本和LoRa本身的特性决定的,这样用户只需要十几个到几十个设备就可以大概知道网关容量了,其实LoRaWAN网关也是可以通过相同的方法评估容量的。下面是我测试评估板4天线网关的一些数据截图,基本上三次成功率在95%(也就是第三列百分比小于5%)以上是可以接受的,CPM值大概是13左右,数据长度是24字节。后续再加入相关调度算法,应该可以再提升提升。
一开始测试数量是7个,三次成功率已经接近100%了。
四、测试套件
测试套件可以在这里购买 https://item.taobao.com/item.htm?ft=t&id=854645211086
至少包含一个4天线网关和多个节点,节点数量可以由自己决定,并且提供SX1278、SX1268和LLCC68三种型号的节点,以下是一些设备产品图片。
终端节点特写
网关+节点
节点说明图
网关说明图
测试套件在这里只作简单介绍,后面的章节会详细讲解使用流程。
五、写在最后
5.1 协议缺陷
LoRaSun协议栈完全开源免费,但目前还不成熟,仅用于学习。其中,动态模式的实现较为巧妙,适合学习;只是CAD检测虽然效率高,但也存在两个缺点:
一是距离缩水,预估缩水30~50%的通讯距离,这一方面还没有进行系统性测试,后续会进行测试并把测试结果发布在公众号里;
二是容易误检测,网关天线之间距离较近,收发过程会影响周边天线的CAD检测结果,在SX1268和LLCC68中,CAD参数可以设置,通过测试调整CAD检测参数应该可以规避这个问题,这一块会在后续的更新中体现,由于SX1278的CAD参数固定,所以它在动态模式下效果不太理想。
5.2 GitHub加速器
如果GitHub打不开,可以下载一个加速器Watt Toolkit
GitHub加速器界面
5.3 资料说明
这个项目的资料比较多,为了统一管理,都放在的QQ群文件里了,GitHub的相关地址如下:
* LoRaSun开源地址: https://github.com/WalleFarm/LoRaSun
* M2M-IOT开源地址: https://github.com/WalleFarm/M2M-IOT
* 协议栈原理专利:CN110572843A (一种基于LoRa无线模块CAD模式的嗅探方法及系统)
* 测试套件采购地址:https://duandianwulian.taobao.com/
本人的其它文章导航地址:端点物联网学习资源合集-CSDN博客
同时,LoRaSun也是一个系列的文章,欢迎关注本专栏:
https://blog.csdn.net/ypp240124016/category_12834955.html
5.4 命名来历
将协议栈命名为LoRaSun主要有两个原因:一是 星型网络特征类似于行星绕太阳转动,而且名字听起来与LoRaWAN相似,比较顺口;二是 希望网关通过优化后可以使用太阳能的方式进行供电,那么这将会在实际部署中产生极大的便利,使之成为LoRa方案的加分项。
5.5 重要声明
关于测试套件需要声明一下,最好先阅读本专栏的第一、二篇文章后再决定是否需要购买,因为硬件虽然简单,但是从软件角度来讲并不简单,需要有一定知识储备才能阅读,至少要有C语言和stm32相关基础。
当然了,如果你有毅力坚持学习,你将会从本项目中学习到很多基础教程中学不到的知识,比如命名规范、项目工程结构、RTOS编程、回调使用、事件通知、状态机、无线通信、网络基础、组网技巧、LoRa深度原理、物联网平台以及多设备系统性调试方法等等,很多内容甚至无法用文字表达清楚,后续会增加视频课程进行完整讲述,可以关注公众号获取通知。
5.6 关于测试套件
在调试初期,本人找了一圈也没有合适的LoRa开发板,一个是价格贵,一个是需求无法满足,后来勉强购买了安信可的测试套件,在调完核心的CAD检测原理后,后续要求已经无法满足,所以才开始了自己设计测试板的道路。虽然整体简单,但是一路也是磕磕碰碰,为了方便学习者直接体验组网效果,后来就想把它挂到淘宝上,由于本人对这方面的运营没什么经验,如有不周到的地方望见谅。 测试套件采购地址:https://duandianwulian.taobao.com/
关注VX公众号 端点物联,以便即时接收文章更新信息。
学习交流QQ群: 701889554