目录

  • 1 课程简介
    • 1.1 课程简介
    • 1.2 课程标准
    • 1.3 职业证书对接
    • 1.4 课程分工
  • 2 数据采集
    • 2.1 数据采集之数字量传感数据采集
    • 2.2 数据采集之模拟量传感数据采集
    • 2.3 数据采集之模拟量转换为数字量
    • 2.4 数据采集之开关量传感数据采集
  • 3 STM32微控制器基本外设应用开发
    • 3.1 STM32基础知识
    • 3.2 任务1 开发环境搭建和工程建立
    • 3.3 任务2 LED流水灯应用开发
    • 3.4 任务3 按键控制LED灯亮灭
    • 3.5 任务4 串行通信控制LED流水灯应用开发
    • 3.6 任务5 电池电量检测应用开发
  • 4 RS-485总线通信应用
    • 4.1 RS-485基本知识
    • 4.2 RS-485通信协议及网关通信协议
    • 4.3 Modbus通信协议
    • 4.4 任务1 案例分析及工程代码编写
    • 4.5 任务2 系统搭建及云平台项目创建
  • 5 CAN总线通信应用
    • 5.1 CAN总线基本知识
    • 5.2 CAN通信帧
    • 5.3 CAN控制器和收发器
    • 5.4 任务1 案例分析及工程代码编写
    • 5.5 任务2 系统搭建及云平台项目创建
    • 5.6 任务3 CAN通信数据抓包与解析
  • 6 BasicRF的无线通信应用
    • 6.1 BasicRF基础知识
    • 6.2 任务1创建工程项目
    • 6.3 任务2 温湿度节点数据采集
    • 6.4 任务3 火焰节点数据采集
    • 6.5 任务4 传感器节点组网
    • 6.6 任务5 传感数据汇聚
  • 7 WiFi数据通信
    • 7.1 WI-FI基础知识
    • 7.2 使用AT指令配置WI-FI工作模式
    • 7.3 WI-FI接入云平台
  • 8 NB-IoT联网通信
    • 8.1 NB-IoT技术简介
    • 8.2 利尔达NB-IoT模组介绍
    • 8.3 任务1 “智慧路灯”AT指令代码编写
    • 8.4 任务2.烧写智能路灯
    • 8.5 任务3NB-IoT接入云平台
  • 9 LoRa 通信技术
    • 9.1 基础知识
    • 9.2 项目分析与LoRa驱动移植
    • 9.3 任务2 LoRa温湿度传感器节点应用程序开发
    • 9.4 任务3 LoRa光照传感器节点数据采集
    • 9.5 任务4 LoRa网关节点汇聚传感器数据
    • 9.6 讨论
项目分析与LoRa驱动移植
  • 1 知识介绍
  • 2 PPT
  • 3 教学视频
  • 4 讨论
  • 5 名家名言

案例介绍

有方圆5平方公里的植物园,以前是粗放式管理:植物的生长和管理全靠工作人员的经验人工检查。由于工作人员频繁检查控制,耗时耗力;植物生长环境要求精细,人工经验难以保障最佳环境;发生突发情况,不能及时处理,导致造成损失。管委会想对园区的环境(温湿度、光照强度)进行智能化监测。

要求:

  • 保护环境,少施工;

  • 低成本,节约经费;

  • 先期实现点对点通信,能够在上位机查看数据,后期升级为云平台系统。

案例分析

由于植物园区的面积在5平方公里,园区尺寸较大,如果使用有线通信不可避免有大量的走线和布线施工,会影响园区环境,增大建设和施工成本。在技术上为保护园区环境,该系统选择无线通信方式较为合适。

目前较为流行的无线通信技术有蓝牙、Wi-Fi、ZigBee、NB-IoT、LoRa等,不同的通讯技术有着不同的特点,也有各自适合的应用场景。各个无线通信技术优缺点如下表 8-6所示:

8-6无线通信技术优劣势对比

序号

标准名称

标准简介

优点

缺点

1

WiFi(IEEE 802.11)

目前最流行的无线技术之一,无限技术中传输速率比较高的,工作在2.4G和5G频段。

1、高速:传输速率比较快,一般能达到几十,几百兆,更甚至达到1Gbps。
2、共享:一个WiFi网络可以支持多个设备同时连接,实现了多人共享网络的需求。
3、兼容性好:WiFi技术已经成为一种全球性的通信标准,几乎所有的智能设备都支持WiFi连接,无需担心设备兼容性的问题。

1、覆盖范围限制:WiFi技术的信号覆盖范围有限,而且受到建筑物等物理障碍的影响更加明显,导致信号覆盖不稳定。
2、功耗比较大,不适合用电池供电,
3、安全性也比较差容易被攻破(尤其公共wifi),并且由于使用的共享频段易受干扰(2.4G和5G)。

2

蓝牙(IEEE 802.15.1)

目前最流行的无线技术之一,是一种短距离无线通信技术,工作频段在2.4GHz。目前最新的是蓝牙协议5.3。

1、低功耗:蓝牙技术的功耗很低,因此适合于使用电池供电的设备,如蓝牙耳机、智能手表等。
2、方便:蓝牙技术可以实现无线连接,使用方便,不需要使用电缆连接设备,用户可以随时随地在设备之间进行数据传输。
3、安全性:蓝牙技术可以使用加密和认证等多种安全措施来保护用户数据和网络安全。
4、兼容性好:蓝牙技术已经成为一种全球性的通信标准,几乎所有的智能设备都支持蓝牙连接,无需担心设备兼容性的问题。

1、传输速度慢:蓝牙技术的传输速度相对较慢,最高速度只能达到几十Mbps,无法满足大数据传输的需求。
2、信号覆盖范围小:蓝牙技术的信号覆盖范围比较小,一般只能达到10米左右,如果在较大的范围内传输数据,可能需要增加中继设备,增加了设备和成本。
3、受干扰:蓝牙技术容易受到周围的其他无线信号干扰,例如WiFi信号和其他蓝牙设备的信号。
4、连接限制:蓝牙技术连接数有限,一般只能支持7个左右的连接,无法满足大量设备连接的需求。
兼容性问题:虽然蓝牙技术已经成为全球性的通信标准,但是不同的设备对蓝牙的支持程度不同,有些设备可能无法正常连接蓝牙。

3

Zigbee(IEEE 802.15.4)

是一种短距离,低功耗无线通信技术。其最大传输速率在250Kbps,一般工作在2.4G频段。现如今多应用在工业领域

1、容量大:Zigbee可以采用星状,片状和网状的网络结构,最多可以形成65,535个节点的大型网络。
2、高安全性:Zigbee使用AES-128加密算法提供数据完整性检查和身份验证功能。
3、低功耗:在低功耗待机状态下,两节5号干电池可以使用6至24个月。

1、传输距离短:Zigbee的传输距离受到环境和信道质量的影响,通常在室内环境下的传输距离为10-100米左右,而在室外环境下的传输距离则可能更短。这限制了Zigbee在某些需要大范围覆盖的应用场景中的使用。
2、传输速率受限:Zigbee的最高传输速率为250 kbps,相对较低。这使得它不能满足一些需要高速数据传输的应用场景。
3、通信协议复杂:Zigbee的通信协议相对较为复杂,需要对协议栈和网络拓扑结构等方面有深入的了解才能开发出稳定、高效的应用程序。

4

LoRa

是一种基于频移键控(FSK)和正交幅度调制(OQPSK)的调制技术,它的工作频段在433MHz、868MHz和915MHz等低频段。

1、长距离传输:LoRa技术采用宽带信号和调制技术,在低频段下可以实现长距离的传输,可以达到公里级别,比传统的无线通信技术更具优势。
2、低功耗:LoRa技术采用了低功耗设计,使得其适用于物联网设备,例如传感器等,可以长时间运行。
3、穿透障碍物:LoRa技术具有较强的穿透障碍物的能力,可以在建筑物内或城市区域内进行通信。
4、通信安全:LoRa技术采用AES加密算法,保证通信的安全性。
5、网络扩展性:LoRa技术支持多级网络扩展,可以在需要时通过增加中继节点来扩展网络。

1、低速率:LoRa技术的数据传输速率较慢,一般在几百bps到几千bps之间。
2、时延较大:LoRa技术的传输时延较大,一般在几百毫秒到几秒之间。
3、不适合高密度网络:由于LoRa技术的频谱利用率较低,因此不适合在高密度网络环境下使用。

5

NB-lot

是一种为物联网(IoT)应用而设计的无线通信技术。它是3GPP标准中的一种低功耗广域物联网技术。由华为、爱立信和诺基亚三家公司共同研发。

1、覆盖范围广:NB-IoT可覆盖大范围、深度建筑物和地下区域。
2、低功耗:NB-IoT的设备功耗非常低,可以提供数年的电池寿命。
3、低成本:由于其低功耗,NB-IoT设备可以使用较小的电池,从而降低了生产成本。
4、高可靠性:NB-IoT的连接更加稳定,可提供更可靠的通信连接,可以在弱信号区域工作。
5、安全性高:NB-IoT具有较高的安全性能,可以支持各种安全协议。

1、速率较低:由于其低带宽,NB-IoT的数据速率较慢。
2、有限的容量:由于其低带宽,NB-IoT在连接大量设备时的容量有限。
3、竞争激烈:由于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日)。软件包所含内容如下图 8-10所示:

LoRaMac-node软件包


8-10LoRaMac-node软件包结构


其中软件包中主要文件夹和文件所用如下:

.vscode:用VScode打开文件的时候的一些配置;

cmake:用于构建Makefile文件;

Doc:原理图和开发环境的说明;

src:工程源码;

.gitignore:与git工具相关的文件;

.gitmodules:在多项目管理中使用;

CHANGELOG.md:为更新日志;

CMakeLists.txt:cmake工具的依赖文件;

LICENSE.txt:许可证之类的说明;

readme.md:对这个文件夹的一些详细说明;

SECURITY.md:相关安全说明文件。

在windows环境下开发我们主要关注两个文件夹Doc和src。本项目需要着重关注src文件夹,该文件夹的内容如下图 8-11所示:

src文件夹内容8-11src文件夹内容

apps文件夹:内主要包含LoRa应用。具体内部结构如下图 8-12所示。

其中:

  • LoRaMac:符合LoRaWAN规范的例程

  • ping-pong:点对点的例程(一发一收)

  • rx-sensi:接收灵敏度测试的例程

  • tx-cw:持续发送的例程

apps文件夹结构8-12apps文件夹结构

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

boards文件夹内部结构


8-13boards文件夹结构


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

mac文件夹结构8-14mac文件夹结构

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

peripherals文件夹结构8-15peripherals文件夹结构

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

radio文件夹结构8-16radio文件夹结构

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

system文件夹结构8-17system文件夹结构

随着项目的需求不同,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的驱动移植。