-
1 知识介绍
-
2 PPT
-
3 教学视频
-
4 讨论
-
5 名家名言
案例介绍
有方圆5平方公里的植物园,以前是粗放式管理:植物的生长和管理全靠工作人员的经验人工检查。由于工作人员频繁检查控制,耗时耗力;植物生长环境要求精细,人工经验难以保障最佳环境;发生突发情况,不能及时处理,导致造成损失。管委会想对园区的环境(温湿度、光照强度)进行智能化监测。
要求:
保护环境,少施工;
低成本,节约经费;
先期实现点对点通信,能够在上位机查看数据,后期升级为云平台系统。
案例分析
由于植物园区的面积在5平方公里,园区尺寸较大,如果使用有线通信不可避免有大量的走线和布线施工,会影响园区环境,增大建设和施工成本。在技术上为保护园区环境,该系统选择无线通信方式较为合适。
目前较为流行的无线通信技术有蓝牙、Wi-Fi、ZigBee、NB-IoT、LoRa等,不同的通讯技术有着不同的特点,也有各自适合的应用场景。各个无线通信技术优缺点如下
序号 | 标准名称 | 标准简介 | 优点 | 缺点 |
|---|---|---|---|---|
1 | WiFi(IEEE 802.11) | 目前最流行的无线技术之一,无限技术中传输速率比较高的,工作在2.4G和5G频段。 | 1、高速:传输速率比较快,一般能达到几十,几百兆,更甚至达到1Gbps。 | 1、覆盖范围限制:WiFi技术的信号覆盖范围有限,而且受到建筑物等物理障碍的影响更加明显,导致信号覆盖不稳定。 |
2 | 蓝牙(IEEE 802.15.1) | 目前最流行的无线技术之一,是一种短距离无线通信技术,工作频段在2.4GHz。目前最新的是蓝牙协议5.3。 | 1、低功耗:蓝牙技术的功耗很低,因此适合于使用电池供电的设备,如蓝牙耳机、智能手表等。 | 1、传输速度慢:蓝牙技术的传输速度相对较慢,最高速度只能达到几十Mbps,无法满足大数据传输的需求。 |
3 | Zigbee(IEEE 802.15.4) | 是一种短距离,低功耗无线通信技术。其最大传输速率在250Kbps,一般工作在2.4G频段。现如今多应用在工业领域 | 1、容量大:Zigbee可以采用星状,片状和网状的网络结构,最多可以形成65,535个节点的大型网络。 | 1、传输距离短:Zigbee的传输距离受到环境和信道质量的影响,通常在室内环境下的传输距离为10-100米左右,而在室外环境下的传输距离则可能更短。这限制了Zigbee在某些需要大范围覆盖的应用场景中的使用。 |
4 | LoRa | 是一种基于频移键控(FSK)和正交幅度调制(OQPSK)的调制技术,它的工作频段在433MHz、868MHz和915MHz等低频段。 | 1、长距离传输:LoRa技术采用宽带信号和调制技术,在低频段下可以实现长距离的传输,可以达到公里级别,比传统的无线通信技术更具优势。 | 1、低速率:LoRa技术的数据传输速率较慢,一般在几百bps到几千bps之间。 |
5 | NB-lot | 是一种为物联网(IoT)应用而设计的无线通信技术。它是3GPP标准中的一种低功耗广域物联网技术。由华为、爱立信和诺基亚三家公司共同研发。 | 1、覆盖范围广:NB-IoT可覆盖大范围、深度建筑物和地下区域。 | 1、速率较低:由于其低带宽,NB-IoT的数据速率较慢。 |
植物园只采集温度、湿度和光照强度等3个指标,这3个指标短时间内变化率低,所以对通信的速率要求低,可以容忍较大的时间延迟,园区内不存在特别重要明显的温场、湿度场和光照度场变化,所以不需要过于复杂的网络。综合上述:LoRa技术最为合适,先期先完成LoRa传感器节点到LoRa网关之间的点对点无线通信,LoRa网关将数据上传给上位机监测。
案例分解
结合LoRa无线通信技术,对案例进行分析,将案例分解成以下四个子任务:
任务1 LoRa驱动移植;
任务2 LoRa温湿度传感器节点程序开发;
任务3 LoRa光敏传感器节点数据采集;
任务4 LoRa网关节点汇聚传感器数据。
通过对上述项目的分析,任务一需要完成的任务为对LoRa驱动进行移植,移植成为咱们需要的系统。
任务1 LoRa驱动移植
LoRaMac-node是Semtech官方发布的LoRaWAN节点端项目开发软件包。其中包含了LoRa芯片的SPI接口驱动程序、LoRaWAN协议源代码等内容。目前该软件开发包被Semtech公开发布,共开发者使用。下载网址:https://github.com/Lora-net/LoRaMac-node/。目前已经更新到v4.5.1(截止到2023年11月20日)。软件包所含内容如下

其中软件包中主要文件夹和文件所用如下:
.vscode:用VScode打开文件的时候的一些配置;
cmake:用于构建Makefile文件;
Doc:原理图和开发环境的说明;
src:工程源码;
.gitignore:与git工具相关的文件;
.gitmodules:在多项目管理中使用;
CHANGELOG.md:为更新日志;
CMakeLists.txt:cmake工具的依赖文件;
LICENSE.txt:许可证之类的说明;
readme.md:对这个文件夹的一些详细说明;
SECURITY.md:相关安全说明文件。
在windows环境下开发我们主要关注两个文件夹Doc和src。本项目需要着重关注src文件夹,该文件夹的内容如下

apps文件夹:内主要包含LoRa应用。具体内部结构如下
其中:
LoRaMac:符合LoRaWAN规范的例程
ping-pong:点对点的例程(一发一收)
rx-sensi:接收灵敏度测试的例程
tx-cw:持续发送的例程

boards文件夹:板级驱动、库函数、MCU启动文件等,目前支持市面上主流的MCU型号,如STM32L0系列、STM32L1系列、STM32L4系列、Atmel的低功率系列等多种信号。具体结构如下

mac文件夹:LoRaWAN协议栈MAC层源代码及一些加密算法,子文件夹region里面是各个地区的参数。具体结构如下

peripherals文件夹:主要是一些外设的驱动,如:加速度计、磁力计等。sofe-se文件夹是与加密相关的文件,LoRaWAN采用的是AES-128加密。具体结构如下

radio文件夹:主要是射频驱动,包括:LR1110、SX126x系列、SX1272、SX1276。其中SX1276和SX1278的驱动是相同的,共同使用SX126x系列驱动。具体结构见下

system文件夹:单片机底层函数接口,剥离MCU的外设驱动。将不同的MCU的底层驱动封装成一样的函数接口,在适用不同MCU时调用接口即可。主要包含常见的函数有:ADC、DELAY、FIFO、GPIO、GPS、I2C、NVMM、SPI、systime、Timer和UART等。具体机构见下

随着项目的需求不同,src文件夹中的文件有些需要修改有些不需要改动,有些属于定制或者重新开发。
LoRa移植
步骤一:
将下载的资源包Lora Mac NODE master解压到适当位置,将文件内的 src文件夹保留,其余删除,用不到这些文件。在 LoRa-Mac-node-master 文件夹内新建 project 文件夹,并将 src 重命名为source,进入到路径 Lora Mac NODE master source下apps 文件夹内,是应用层相关的源码, boards文件夹下的文件都是和硬件平台相关的,用的 MCU 是STM32L151,所以相对应的也就需要将boards文件夹的文件替换为 STM32L151 相关的驱动和HAL库。peripherals是外设相关的驱动源码。
将 Lora 源码资源 source 下的 apps、boards、peripherals复制替换到 LoRaMac-node-master的source文件夹下,替换掉协议中原有的文件,即可将原有协议中的应用层固件库外设替换为自己的硬件平台了。
Lora源码资源下的库为STM32L151,HAL库是从软件STM32CubeMX中下载,也可以在ST公司官方网站下载,STM32Cube_FW_l1_v180.zip 压缩包中提取出来的,这也保障了可以将软件 STM32CubeMX 生成的初始化代码移植到工程模板中,可使用。
步骤二:
新建keil工程。打开keil软件,点击菜单栏"Project",再点击"New µVision Project" ,在弹出的窗口里面找到路径..\LoRa-Mac-node-master\project, 将keil工程命名为 LoRaModem,并点击保存。弹出选择设备的窗口,在“Search:”栏目中填入“STM32L151C8”,然后选中搜索到的芯片,再次点击“OK ”。软件跳转到“Manage Run-Time Environment ”的窗口,此时直接点击“OK ”。
步骤三:
建立目标工程和分组。点击“Manage Project Items ”按钮,并在“Project Targets” 此栏下点击新建图标,并填入“LoRa”。在“Groups”栏下点击新建图标,并依次填入:apps、boards\hardware、boards\hardware\cmsis、boards\mcu、boards\mcu\STM32L1xx_HAL_Driver、peripherals、radio、system。
这些组名与路径名相对应,在这里组名就是路径名。点击“apps”,再点击按钮 “Add Files”,在弹出的窗口中浏览到路径..\LoRa-Mac-node-master\source\apps 。文件类型选“*.c”,并选中“main.c”和“NS_Radio.c”,点击“Add”按钮,再将文件类型选为“*.h”,点击“user_define.h”,并点击“Add”按钮,最后点击“Close”按钮,这就完成将apps文件夹下的源码添加到工程中,按添加apps文件夹下的源码到工程的方法依次给boards\hardware、boards\hardware\cmsis、boards\mcu、boards\mcu\STM32L1xx_HAL_Driver、peripherals、radio、system添加源码文件。各个源码文件都在组名对应的路径中或子目录下。
注意:在添加STM32L1xx_HAL_Driver下的“*.c”源文件时,建议添加所有“*.c”源文件,不要添加“stm32l1xx_ll*.s”文件,这里的“*”代表任意长度的字符。不要把“stm32l1xx_hal_timebase_tim_template.c”添加进来,因为该文件内的函数“HAL_TIM_PeriodElapsedCallback()” 已经在“tim_board.c”有定义,如果包含进来将导致函数重复定义。此外,“stm32l1xx_hal_msp_template.c”也不需要添加进来。
步骤四:
添加原文件配置工程生成HEX文件,点击菜单栏Options for Target 图标,点击“Output”标签,勾选“Create HEX File”,同时注意:“Name of Executable:” 右侧文本框内是否有文字内容,无内容填入合适的文件名。工程编译结束后,将生成以该文件名为名称的HEX文件,按照之前的配置工程编译成功后生成文件LoRaModeM .hex。
步骤五:
添加预编译符号,点击菜单栏Options for Target 图标,点击“C/C++”标签,在“Define”一栏中填入“USE_HAL_DRIVER STM32L151xB USE_DEBUGGER USE_BAND_433 USE_MODEM_LORA”,并勾选 C99 Mode。最后点击 OK 按钮保存配置。
步骤六:
添加编译包含路径,点击菜单栏Options for Target 图标,点击“C/C++”标签,再点击Include Paths右侧的按钮,随后弹出配置文件夹窗口,点击新建图标,窗体内将跳出新的输入框,点击输入框右侧的按钮,找到apps文件夹所在的路径,点击apps文件夹,再点击“选择文件夹”按钮。此时点击下配置文件夹窗口内的空白处,输入框内的路径将变成相对路径。点击配置文件夹窗口的按钮“OK”,保存路径配置。最后点击 Options for Target窗口的按钮“OK”,保存配置选项。这就完成了apps文件夹的添加过程。编译器编译的时候,将会从apps文件夹内检索头文件,依次添加余下的编译包含路径。
步骤七:
修改代码,打开路径..\LoRa-Mac-node-master\source\system 下的gpio.h, 可以看到该文件有代码语句:“#include “pinName-ioe.h””,将该代码语句删除。pinName-ioe.h是原协议站扩展的GPIO用的驱动源码的头文件,本程序不使用,故删除该段代码语句,否则将引起编译时报错。
在user_define.h中添加宏定义:“#define USE_SX1276_RESET false”,并在sx1276.c中的函数SX1276Reset()前后添加:“#if(USE_SX1276_RESET!=false)”和 “#endif”,就可以做到既保留了源码又不编译该函数内的代码的作用。最后关闭工程源码,并将工程源码文件夹由“LoRaMac-node-master”重命名为:“LoRaModemProject”,再次打开工程重新编译。工程编译完成后,可以看到 Build Output窗口中无错误也无警告,到这里就完成了SX1278的驱动移植。

