前言
之前,我们使用江苏学蠡信息科技有限公司的无线传感器网络实验平台进行了NB-IOT的实验学习,因为该实验平台不仅有NB-IOT,还有LoRa以及ZigBee等无线通信方式的实验模块,因此,这篇我们将继续以江苏学蠡信息科技有限公司的无线传感器网络实验平台来进行LoRaWAN实验的学习。
一、Lora简介
LoRa,是Semtech公司于2013年8月推出的一种新型的基于 1GHz 以下的超长距低功耗数据
传输技术(Long Range,简称 LoRa)的芯片。其接受灵敏度达到了惊人的-148dbm,与业
界其他先进水平的 sub-GHz 芯片相比,最高的接收灵敏度改善了 20db 以上,这确保了网络
连接可靠性。
LoRa和NB-IOT一样都属于LPWAN(低功耗广域网)拥有低功耗、远距离以及低成本等特点,与NB-IOT不同的是NB-IOT所工作的频谱属于授权频谱(即运营商网络),所以必须由国内三大运营商提供服务,而LoRa只能在某些指定的免费频段工作。
从自由度来说,NB-IOT虽然使用的是三大运营商提供的频段,但是在某些偏远地区还存在未覆盖的情况,而LoRa可以在任何地方进行部署,任何企业甚至是个人都能够成为“运营商”。
从安全方面来看,NB-IOT使用的是运营商提供的服务,那所有的数据势必都要先经过运营商进行处理,对于涉及到保密的公司来说是不希望自己公司的数据让他人经手哪怕是运营商,所以很多企业会从数据安全方面考虑,采用LoRa进行自组网,部署自己私有的LoRa网络。
从成本方面来说,既然NB-IOT使用的是运营商提供的服务,那势必是要收费的。而LoRa工作在免费频段,不需要申请就可以进行网络的建设,因此不需要额外支付通信费用,从成本角度考虑LoRa也具有一定的优势。
LoRa使用线性调频扩频调制技术,即保持了像 FSK(频移键控)调制相同的低功耗特性,又明显地增加了通信距离,同时提高了网络效率并消除了干扰,即不同扩频序列的终端即使使用相同的频率同时发送也不会相互干扰,因此在此基础上研发的集中器/网关(Concentrator/Gateway)能够并行接收并处理多个节点的数据,大大扩展了系统容量。LoRa®是物理层或无线调制用于建立长距离通信链路。许多传统的无线系统使用频移键控(FSK)调制作为物理层,因为它是一种实现低功耗的非常有效的调制。LoRa®是基于线性调频扩频调制,它保持了像 FSK 调制相同的低功耗特性,但明显地增加了通信距离。线性扩频已在军事和空间通信领域使用了数十年,由于其可以实现长通信距离和干扰的鲁棒性,但是 LoRa®是第一个用于商业用途的低成本实现。
- LoRaWan
LoRaWAN™定义了网络的通讯协议和系统架构,而 LoRa®物理层能够使长距离通讯链路成为可能。协议和网络架构对节点的电池寿命、网络容量、服务质量、安全性、网络的各种应用服务质量等影响最大。
LoRa 网络主要在全球免费频段运行(即非授权频段),包括 433、868、915 MHz 等。LoRa网络主要由终端(内置 LoRa 模块)、网关(或称基站)、服务器和云四部分组成,应用数据可双向传输。- LoRa网关/基站
网关是节点与 IP 网络之间的桥梁(通过 2G/3G/4G 或者 Ethernet)。每个网关每天可以处理500 万次各节点之间的通信(假设每次发送 10Bytes,网络占用率 10%)。如果把网关安装在现有移动通信基站的位置,发射功率 20dBm(100mW),那么在建筑密集的城市环境可以覆盖 2 公里左右,而在密度较低的郊区,覆盖范围可达 10 公里。 - LoRa节点
高达 157db 的链路预算使其通信距离可达 15 公里(与环境有关)。其接收电流仅 10mA,睡眠电流 200nA,这大大延迟了电池的使用寿命。 - 网络服务器NS
LoRaWAN Server 是 LoRaWAN 网络中连接网关和云平台的协议处理器,提供终端节点接入鉴权、网关接入控制、LoRaWAN 协议解析、数据传输、数据加解密、数据格式转换等功能。
- LoRa网关/基站
二、硬件环境
和NB-IOT实验一样,都是采用江苏学蠡信息科技有限公司的无线传感器网络实验平台进行实验操作。在熟悉了NB-IOT的实验后,使用LoRa模块进行实验就更加得心应手了,只要插上LoRa无线模块以及所需要的传感器模块即可实现LoRa组网
1. LoRa无线模块
LoRa无线模块的射频芯片采用的是 Semtech 公司的 LoRa 芯片 SX1278,主控芯片采用
STM32L151,是一款低功耗、低成本、小体积的 LoRaWAN 模块。
LoRa无线模块实物图如下:
模块的引脚图如下所示:
引脚定义:
序号 | 名称 | 类型 | 说明 | 对应单片机引脚 |
---|---|---|---|---|
1 | VDD | - | 模块电源3.3V | - |
10 | GND | - | 模块地 | - |
5 | RST | I | 模块复位引脚,低电平有效 | - |
2 | TX1 | I/O | UART1_TX | PA9 |
3 | RX1 | I/O | UART1_RX | PA10 |
4 | PA11 | I/O | GPIO_PA11 | PA11 |
6 | PA12 | I/O | GPIO_PA12 | PA12 |
7 | SWDIO | I/O | SWD 模式的 DIO 引脚 | PA13 |
8 | SWCLK | I/O | SWD 模式的 CLK 引脚 | PA14 |
9 | PA7 | I/O | GPIO_PA7 | PA7 |
11 | PA8 | I/O | GPIO_PA8 | PA8 |
12 | PA6 | I/O | GPIO_PA6 | PA6 |
13 | PA5 | I/O | GPIO_PA5 | PA5 |
14 | PA4 | I/O | GPIO_PA4 | PA4 |
15 | PA1 | I/O | GPIO_PA1 | PA1 |
16 | PA0 | I/O | GPIO_PA0 | PA0 |
17 | TX2 | I/O | UART2_TX | PA2 |
18 | RX2 | I/O | UART2_RX | PA3 |
19 | PB0 | I/O | GPIO_PB0 | PB0 |
20 | PB1 | I/O | GPIO_PB1 | PB1 |
2.Lorawan 网关/基站
Lorawan 网关/基站采用核心板 + 底板结构结构设计 ,其中包括核心板和 SX1301 网关模块核心板,开发板的布局和走线经过精心设计,接口具有防护功能,可稳定运行,板载接口丰富,功能强大,可二次开发的私有 lorawanNS 并提供 websocket 和 mqtt 接口。
实物图如下:
3. 液晶扩展板
在该传感器网络实验平台中的液晶扩展板设计有无线模块接口、传感器模块接口,采用直插式的方式可以方便的进行模块的插拔,便于不同实验的切换和操作。
- 硬件参数
- 支持锂电池供电(含充电电路)
- 96*16 OLED 液晶屏
- 1 个多功能方向按键
- 一个 miniUSB 串口,可通过 USB 线缆供电和进行串口调试
- 标准 20 针无线模块接口以及标准的传感器模块接口
- 一个 SWD 接口可连接仿真器进行在线调试
4. 所需要的传感器或执行器模块
4.1 高精度温湿度传感器模块
高精度温湿度传感器模块采用的温湿度传感器是Sensirion 温湿度传感器家族中的SHT20,其采用基于领先世界的CMOSens ® 数字传感技术,具有极高的可靠性和卓越的长期稳定性。全量程标定,两线数字接口,可与单片机直接相连,大大缩短研发时间、简化外围电路并降低费用。此外,体积微小、响应迅速、低能耗、可浸没、抗干扰能力强、温湿一体,兼有露点测量,性价比高,使该产品能够适于多种场合的应用。
- SHT20接口定义
4.2 温度/光敏/蜂鸣器传感器模块
-
温度传感器
在温度/光敏/蜂鸣器传感器模块中,温度传感器采用的是TC77温度传感器。
TC77 是特别适用于低成本和小尺寸应用场合的串行通信数字温度传感器。内部温度检测元
件输出的温度被转换成数据,并以 13 位二进制补码的数据字方式随时提供。TC77 通过与 SPI 和 MICROWIRE 兼容的接口来完成通信。温度数据有 12 位,其符号位为正,其最低有效位(Least Significant Bit, LSb) 代表的温度为 0.0625°C,即温度分辨率 。 TC77在 +25°C 至 +65°C 温度范围内提供±1.0°C(最大值)的精度。在工作时,TC77 仅消耗 250 μA (典型值)的电流。
TC77 的配置寄存器可用来启动低功耗关断模式,其电流消耗仅 0.1 μA (典型值)。小尺寸、低成本且易于使用使得 TC77 成为在不同系统中实现温度管理的理想选择。 -
光敏电阻
在温度/光敏/蜂鸣器传感器模块中,对于光敏元器件的选择,采用的就是最普通的光敏电阻,它对光的变化非常敏感。光敏二极管也叫光电二极管。光敏二极管与半导体二极管在结构上是类似的,其管芯是一个具有光敏特征的PN 结,具有单向导电性,因此工作时需加上反向电压。无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。当光线照射 PN 结时,可以使 PN 结中产生电子空穴对,使少数载流子的密度增加。这些载流子在反向电压下漂移,使反向电流增加。因此可以利用光照强弱来改变电路中的电流。 -
蜂鸣器
在温度/光敏/蜂鸣器传感器模块中,采用的是一款有源蜂鸣器,有源蜂鸣器自带了震荡电
路,一通电就会发声,可以简化周围电路的设计。
4.3 可燃气体传感器模块
在可燃气体传感器模块中,选用的是MQ-5气体传感器用作可燃气体检测。MQ-5气体传感器所用的气敏材料是清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。
MQ-5 气体传感器对丁烷、丙烷、甲烷灵敏度高,对甲烷和丙烷可较好的兼顾,这种传感器可检测多种可燃性气体,特别是液化气(丙烷),是一款适合多种应用的低成本传感器。
4.4 可调LED灯光模块
发光二极管(Light Emitting Diode,LED)发明于 20 世纪 60 年代,它是利用半导体材料中的电子和空穴相互结合并释放出能量,使得能量带(Energy Gat,) 位阶改变,以发光显示其所释放出的能量。LED 具有体积小、寿命长、驱动电压低、耗电量低、反应速率快、耐震性佳等优点,被广泛应用于信号指示、数码显示等领域。随着技术的不断进步,超高亮 LED的研制得到了成功,尤其是白光 LED 的研制成功,使得它越来越多地用在彩灯装饰、甚至照明领域。
4.5 两路继电器模块
继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
4.6 LED点阵屏模块
点阵 LED 显示屏作为一种现代电子媒体,具有灵活的显示面积(可任意分割和拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。
一个 8*8 的点阵就是由 64 个 LED 小灯组成,下图是它的内部结构原理图。
5. 仿真器/编程器
ST-Link 是用于 STM8 和 STM32 微控制器的在线仿真器和编程器,也是大家口中的下载器。
ST-Link 具有 SWIM、JTAG / SWD 等通信接口,用于与 STM8 或 STM32 微控制器进行通信
(各版本有差异)。
- 三种接口说明:
- SWIM: Single Wire Interface Module,单线接口模块。
- JTAG: Joint Test Action Group,联合测试工作组,是一种国际标准测试协议。
- SWD: Serial Wire Debugging,串行调试接口。
我们使用 ST-Link 的 SWD 接口,按如下方式连接各种 LoRa 节点。
三、软件环境
参考NB-IOT实验练习1中的软件环境说明安装对应软件即可
四、LoRa通信实验
1. LoRa网关以及私有云NS配置
1.1 硬件部分
LoRaWAN网关硬件采用的是LPGWMD002,是一款 10 通道 (8 x Multi-SF + 1 x Standard LoRa + 1 x FSK) LoRa/LoRaWAN网关和集中器模块。模块上提供了 miniPCIE 接口,用户可以利用此接口将嵌入式系统主板与 LPGWMD002 相连接,快速开发出自定义网关。
硬件连接原理图:
1.2 实验步骤
-
将LoRa WAN网关接入5V电源,并连接天线以及一个网线接入有可使用电脑的局域网中。
-
通过IP Scanner软件或是登录路由器/交换机页面查看LoRa WAN网关的IP地址,这里我们使用的是IP Scanner软件进行扫描,扫描出来正常有两种情况,一种可以在Name列中直接找到“LPKT002-PVNS”的设备,还有一种是只显示IP地址并不会显示“LPKT002-PVNS”,此时就要关注Manufacturer属性列了,如果在你的局域网中并没有其他树莓派设备,那在Manufacturer列中找到“Raspberry Pi”字样并且Status中电脑为蓝色图标的就是对应的LoRa WAN网关的IP地址。
-
通过网络使用 SSH 登录 LPKT002
取得 IP 后,通过网络使用 SSH 软件登录到 LPKT002,默认用户名密码为pi/linkpi
图中IP地址与实际扫描所得IP为准
在输入完成IP地址后点击“Open”,会弹出一个弹出点击“是”,等待一会儿就会弹出对话框要求输入账号密码。
接下来通过命令:sudo systemctl status lrgateway验证 lrgateway 服务,如果系统服务正常则会出现如下界面:
注意:如果需要重新输入命令需要键入“Ctrl + C”
接下来输入以下命令开启私有 NS 服务和设置开机启动以及验证是否开启:sudo systemctl start LoRaWAN-server
sudo systemctl enable LoRaWAN-server
sudo systemctl status LoRaWAN-server
如果运转正常则显示下面的界面:
-
登录私有云NS
打开浏览器中输入刚才查询到的 IP 加上端口 8080,例如 http://192.168.1.4:8080/回车,输入私有云 NS 用户名:admin,密码:admin 点击登录(页面如未显示可刷新网页重试)。
登陆成功后显示如下界面表示网关正常工作:
至此配置NS以及登录操作就可完成
2. 使用 AT 指令 Lora 通信实验
-
LoRa终端有两种入网方式,分别为OTAA以及ABP。
- OTAA:全称是 Over The Air Activation,中文意思就是空中激活方式
OTAA 的终端入网流程相对比较复杂,但从安全性上来说 OTAA终端的安全性相比于 ABP 终端要高一些。OTAA终端配置需要三个参数分别是:DevEUI、AppEUI 和 AppKeyOTAA ,在获得这些参数后终端需要向服务器发送 JoinRequest 请求,也就是入网请求,服务器处理完入网请求会向终端发送 JoinAccept,也就是入网应答,终端成功接收到服务器下发的 JoinAccept 之后,OTAA 终端这时才是入网成功了,此时 OTAA 终端就可以从 JoinAccept 中计算出DevAddr、NwkSkey 和 AppSkey 这三个加密参数了。有了这三个加密参数,终端就可以正常工作了。 - ABP:全称就是Activation By Personalization,中文意思是个性化激活
ABP方式就较为简单了,对于 ABP 终端来说我们是直接三个加密参数 DevAddr、NwkSkey 和 AppSkey 配置给了 ABP终端,ABP 终端可以直接使用这三个加密参数来工作。当 ABP 终端成功发送了第一条数据之后,我们就认为 ABP 终端入网成功了。
- OTAA:全称是 Over The Air Activation,中文意思就是空中激活方式
-
工作方式
节点的工作方式总共分为三种
第一种叫 Class A,A 的全称是 All,意思是所有 LoRaWAN节点都必须支持该工作方式。
第二种叫 Class B,B 的全称是 Beacon,Class B 工作方式的节点,可以周期性的接收 NS 发送的数据。
第三种叫 Class C,C 的全称是 Continuously,ClassC 工作方式的节点几乎是持续不断的打开接收窗口。
对于 LoRaWAN 节点来说,所有的节点都必须支持 Class A 工作方式,Class B 和 Class C 的工作方式是可选的,节点可支持可不支持。- CLASS A:
Class A是最省电的,原因就在于它的工作模式。Class A 的终端在每次上行后都会紧跟两个短暂的下行接收窗口,以此实现双向传输。但是,如果终端不上报数据,服务器就无法主动进行下行传输。这种Class A 操作是最省电的,要求应用在终端上行传输后的很短时间内进行服务器的下行传输。服务器在其他任何时间进行的下行传输都得等终端的下一次上行。 - CLASS B:
Class B模式的终端会有更多的接收时隙。除了Class A 的随机接收窗口,Class B 设备还会在指定时间打开别的接收窗口。为了让终端可以在指定时间打开接收窗口,终端需要从网关接收时间同步的信标 Beacon。这使得服务器可以知道终端正在监听。 - CLASS C:
Class C 的终端基本是一直打开着接收窗口,只在发送时短暂关闭。Class C 的终端会比 Class A 和 Class B更加耗电,但同时从服务器下发给终端的时延也是最短的。
- CLASS A:
2.1 ABP+CLASS A 模式入网及通信
- AT命令配置
打开串口调试工具,配置好对应的波特率后按一下实验板的复位键,串口工具上显示如下界面:
以上参数解释如下:
接下来通过AT命令设置ABP + CLASS A模式,AT命令如下:
AT+EDAMODE=ABP
AT+CLASSMODE=CLASS-A
AT+REBOOT
输入完成后显示如下界面:
- 添加节点
在上一章节“LoRa网关以及私有云NS配置”我们成功配置并登录了NS,接下来就在NS中进行节点的添加,点击界面“Activated (Nodes)”—“Create”。
按照上方配置完成AT界面后返回的参数填入
- 通信测试
在串口调试工具上通过 LORA 节点发送数据,输入下面发送上行数据命令:
AT+SEND=0,“HEX”,65,“789654”
以上数据表示在 65 端口上发送了 16 进制数据 789654
此时串口调试助手显示如下:
NS上显示如下界面:
接下来进行Websocket 接口查看实时数据和进行下行通信
使用浏览器输入:http://192.168.1.4:8080/admin/ws.html(注:此处 IP 地址以实际获取到的网关 IP 为准)回车,显示如下:
此处设置根据上文设置 DevAddr:66666666 进行连接,输入“/ws/uplink/66666666”,点击连接建立 Websocket 连接,连接成功显示如下:
数据格式可以选择原始 Raw 或 Json 格式进行查看。但是要注意 Connectors中对应的wstest(我这里是叫这个,按照实际使用为准)中的General->Format 要更改为对应的 Raw 或 JSON,如下图所示:
- 上行数据查看,此处 websocket 可以实时更新接收到的数据。
- JSON格式:
- Raw格式:
- JSON格式:
- 使用 web 发送下行数据
- rawdata:
将Controller中的Format设置为Raw Data
设置 connector 数据格式为“rawdata”,在 web 输入框输入要发送的数据,通过节点再次发送数据,即可将下行数据取回,这符合 lorawan ClassA 模式的规定。
至此,ABP+CLASS A模式入网通信实验结束
- rawdata:
2.2 ABP+CLASS C 模式入网及通信
- AT命令配置
与2.1章节AT命令配置类似,只需要更改一下配置命令即可:
AT+EDAMODE=ABP
AT+CLASSMODE=CLASS-C
AT+REBOOT
输入以上命令后串口调试助手显示如下:
- 添加节点
为了方便,我们将刚刚的节点直接删除,进行重新配置,配置流程与2.1中的添加节点一致
- 通信测试
- 上行测试
在串口调试工具上通过 LORA 节点发送数据,输入下面发送上行数据命令:
AT+SEND=0,“HEX”,65,“963214”
结果如下:
- 通过 Websocket 接口查看实时数据和进行下行通信
与2.1一致,通过浏览器输入http://192.168.1.4:8080/admin/ws.html(注:此处 IP 地址以实际获
取到的网关 IP 为准)回车,进入Websocket界面,设置根据上文设置 DevAddr:66666666 进行连接,输入“/ws/uplink/66666666”,点击连接建立 Websocket 连接,连接成功显示如下:
这里就只展示使用JSON数据格式的上下行通信查看。- 使用 LORA 节点发送上行数据
- 在 JSON 格式下可以测试 CLASS C 模式的下行通信
设置为JSON格式的时候,输入:{“data”:“3456”, “port”:2, “time”:“immediately”}
点击“SEND”按钮发送即可看到节点串口输出的实时接收到的数据。
- 使用 LORA 节点发送上行数据
2.3 OTAA+CLASS C 模式入网及通信
- AT命令配置
输入以下AT命令:
AT+EDAMODE=OTAA
AT+CLASSMODE=CLASS-C
AT+REBOOT
显示结果如下:
- 添加节点
此处与2.1和2.2有所不同了,添加节点的位置还是在那边,只是需要填入的参数与上面两个小节不太一样。具体输入参数如下:
设置 LORA 节点为 OTAA 模式之后执行 AT+REBOOT,等待几秒钟设备即可入网,如下:
设备 OTAA 入网后 server 会将它统一归类到Activated(Nodes)中管理:
- 通信测试
在Websocket中进行上下行测试和上述几乎一致,只是在/ws/uplink/后输入的变为DevAddr即可,上下行通信测试如下:
发送下行数据命令:{“data”:“3456”, “port”:2, “time”:“immediately”}