LoRaWAN 是定义在 LoRa 无线调制技术上的一整套通信协议,类似 TCP/IP 协议。LoRaWAN 整个协议的架构图分为几层:
我把 LoRaWAN 的网络架构分层 3 部分。
这三个部分的划分主要是根据开发时所使用的技术栈来区分的。设备节点的开发主要是以嵌入式开发为主,涉及到嵌入式软硬件的开发;接入网关需要使用 Sx130x 系列的基带芯片,官方提供了在嵌入式 Linux 环境下的开发组件,因此更多的是需要做嵌入式 Linux 的软硬件开发;针对服务器部分的研发,更需要的就是后端技术栈了。下面是我对整个网络架构简单粗暴的划分了。
上面讲了自己对 LoRaWAN 网络架构简单粗暴的分类,接下来就需要说明一下这个架构图中各部分到底都是什么意思了。
理清楚了 LoRaWAN 网络架构的大概情况,并且根据实际开发时涉及到的技术栈,将 LoRaWAN 开发粗暴的分为三部分:
之后,自己对 LoRaWAN 与 LoRa 的区别就算是分清楚了。后面的学习过程只需要根据开发时的具体需求,针对不同的部分看各部分的资料应该就好了。
基本的学习思路有了,后面的 LoRaWAN 学习就有方向了。
LoRaWAN 的设备终端实现,主流的实现有2个:
I-CUBE-LRWAN 是 ST 官方推出的 Cube 实现里面的一个扩展包。针对 STM32L0、STM32L1 和 STM32L4 系列微控制器提供了库和示例应用程序,并且该扩展包支持 Semtech LoRa 无线电扩展板,开发的时候,可以直接参考 ST 提供的官方例程,缩短开发的周期。
LoRaMac-node 是 Semtech 官方在 Github 上提供的一个 LoRaWAN 终端技术栈的实现,支持 LoRaWAN 终端的 A/B/C 三种类型通信。同时,由于 LoRaWAN 的协议在不断的完善和更新,LoRaMac-node 的代码也会针对不同版本的 LoRaWAN 协议栈提供版本支持。
刚上手学习 LoRaWAN 终端开发的话,个人觉得自己先以 I-CUBE-LRWAN 为框架进行学习更好。因为,I-CUBE-LRWAN 是 ST 官方提供的 Cube 软件扩展包,可以在使用 STM32 系列芯片时,直接复用代码来实现自己的功能,方便研发。
等到上手熟悉 I-CUBE-LRWAN 的使用后,可以再深入理解 LoRaWAN 技术栈的细节内容。
由于,I-CUBE-LRWAN 的 LoRaWAN 终端实现也是参考 LoRaMac-node 的实现进行移植的。在了解 I-CUBE-LRWAN 的 LoRaWAN 代码实现之后,再去参考 LoRaMac-node 的代码,能够更细致的了解 LoRaWAN 终端的技术实现细节。
LoRaWAN 的 Gateway 是 LoRaWAN 协议栈中比较复杂的一部分内容,在通信架构中,起到承上启下的作用。既要与终端节点通信,还要与服务端进行通信,实现管理信道、转发数据、设备管理等等功能。根据 LoRaWAN 基带芯片的不同,网关的代码实现也有很多不同。
Semtech 在 Github 的公共仓库中,提供了基于 SX1301多通道调制解调器和SX1257/SX1255射频收发器构建 gateway 程序,以及基于 SX1302/SX1303 的硬件抽象层软件代码。
在设备研发应用是,可以直接使用 Semtech 提供的源代码,构建符合自己功能的 LoRaWAN 接入网关。
LoRaWAN 的服务器实现,比较流行的主要有3个:
ChirpStack 是一款开源的 LoRaWAN 网络服务器,可用于设置 LoRaWAN 的网络。ChirpStack 为网关、设备和租户的管理提供了一个 web 界面,并与主要的云提供商、数据库和通常用于处理设备数据的服务进行数据集成。ChirpStack 提供了一个基于 gRPC 的 API,可用于集成或扩展 ChirpStacck 。
The Things Stack 是一款强大而灵活的 LoRaWAN 网络服务器,可满足要求苛刻的 LoRa 广域网部署的需求,从涵盖基本内容到高级安全配置和设备生命周期管理。
LORIOT 致力于提供最佳的 LoRaWAN 体验,通过提供业界领先、功能丰富且可即时访问的社区网络服务器来实现这一点,这些服务器托管在世界各地。LoRaWAN 网络服务器的地理分布基础设施为在世界任何地方的服务提供低延迟访问。
这 3 个服务器的解决方案,各有各的特点。其中 Chripstack 给我的使用体验感觉更好,后续会以 Chripstack 为例子来说明怎么使用 LoRaWAN 服务器的搭建和使用。
服务器的解决方案,各有各的特点。其中 Chripstack 给我的使用体验感觉更好,后续会以 Chripstack 为例子来说明怎么使用 LoRaWAN 服务器的搭建和使用。