目录

  • 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 讨论
任务3 LoRa光照传感器节点数据采集
  • 1 知识介绍
  • 2 PPT
  • 3 教学视频
  • 4 名人名言

任务3为智慧植物园区下的子系统,主要完成园区环境光线采集并在显示屏上进行数据显示,并将数据传回总控。

任务3 LoRa光照传感器节点数据采集

光照传感器节点数据采集过程包括:首先由传感器采集光照的强度,然而光照传感器是模拟量的传感器,需要通过ADC来将采集到的数据转换成数字量,再由MCU来对采集的光照值数据进行处理。通过模块上OLED屏来显示当前的信息,最后再将采集到的数据组帧,将数据传输到汇集节点。

通过对任务进行分析,难点有2个:

  • ADC转换,ADC转换过程:采样、保持、量化、及编码。

  • MCU通过编程都采集到的数据进行处理,组帧,将数据发给汇聚节点。

基础知识讲解

编写程序前我们首先认识一下我们的硬件,如下图 8-18所示为光照强度传感器小板,小板中主要包含光照传感器(光敏电阻)、外围电阻、外围电容和工作指示灯。光照传感器小板工作原理图和外围连接图如下图 8-19所示。首先由光敏电阻组成的,由于光照强度不一样,它的阻值会发生变化,从而ADC4引脚处输入的电压会发生变化,从而通过换算可以知道光线强弱的变化,在由ADC转换成相对于的数值。

光照强度传感器小板8-18光照强度传感器小板光照强度传感器外围链接图8-19光照强度传感器外围链接图

根据厂家提供的光敏传感器的规格书可以查到,在一定的光照度范围内,环境光强度的变化与光敏传感器的输出电流成正比,光电流与光照强度关系曲线如图 8-20所示。

光电流与光照强度关系曲线8-20光电流与光照强度关系曲线

参考厂家提供的数据手册,结合上图 8-20和下表 8-7所示:25℃下的光电参数可知,10lux(勒克斯)时的亮电流Iss典型值为4μA,100lux(勒克斯)时的亮电流Iss典型值为 40μA。假设光强度的变化与亮电流的比例为 K,可以通过以上二元方程关系式得出光照度和亮电流的关系,其中亮电流ISS 的单位为μA,光照度的单位为勒克司度(lux)。根据计算就可得出光照度的值。

8-7光敏传感器基本参数表

光电参数

(Ta=25℃)

参数名称

符号

测试条件

最小值

典型值

最大值

单位

暗电流

Idrk

0 Lux,Vdd=10V

-

-

0.2

μA

亮电流

Iss

Vdd=5V,10Lux,Rss=1KΩ

2

4

8

μA

Vdd=5V,100Lux,Rss=1KΩ

20

40

80

感光光谱

λ

\

-

800

1050

nm

响应

速度

上升

tr

Vdd=5V,Iss=5mA,RL=100Ω

-

4

-

μS

下降

tf

-

4

-

μS


ADC为Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。ADC的作用:采集传感器的数据,测量输入电压,检查电池电量剩余,监测温湿度等。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。过程分为4步,分别是采样、保持、量化及编码,在ADC转换完成前,是需要等待数据转换的。切记在取值之前需要判断,过程是否完成。

ADC的性能指标:

  • 量程:能测量的电压范围,一般来收量程越大越好;

  • 分辨率:ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,精度越大,外部微小的变化都可以被显示。一般来说分辨率越高,转化时间越长;

  • 转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到获得稳定的数字量输出所需要的时间称为转换时间,希望时间越短越好。

LoRa光照传感器节点数据采集具体实施步骤如下:

步骤1 硬件连接

1、 取一块LoRa模块,将显示屏下方的开关JP1往右拨。其中JP1右拨为正常工作,左拨为固件下载。 2、 开关JP2往左拨。JP2是STM32单片机的usart1的接通选择开关,左拨用于接通到NewLab主机上,右拨用于断开与NewLab主机的连接。3、 编码开关往上拨。编码开关是控制STM32的SPI引角和SX1278模组的SPI接通。全部上拨的时候,STM32的SPI和SX1278模组接通,全部下播的时候,STM32的SPI和SX1278模组断开连接。 4、 插上LoRa模块儿天线。 5、 LoRa模块插上光照传感器模块。准备NewLab主机和配套12V电源。NewLab主机接通12V电源,通讯旋钮开关旋至通讯模式,将LoRa传感器节点放置NewLab主机上。

步骤2 LoRa 光照传感器节点应用程序开发

本步骤要在温湿度传感器节点的应用开发基础上,完成LoRa光照传感器节点应用程序的开发,采集光照度并在OLED屏上显示出来。首先,工程模板操作前面已经完成了温湿度传感器节点的应用开发,在此工程的基础上修改出光照传感器节点的应用程序。

复制工程源码文件夹LoRaModemSensorTempRhProject为副本,并重命名为 LoRaModernSensorLightProject。进入文件夹LoRaModernSensorLightProject,并打开该工程源码。应用程序编写全部在main.c文件中进行修改。修改内容主要分四部分:1、 变量定义及外设初始化部分的修改;2、 光照数据采集部分修改;3、 传输数据内容的修改;4、 OLED液晶显示部分修改。

1、 变量定义及外设初始化部分的修改。光照传感器节点需要采集光照度信息,删除原先的定义和存放温度、湿度的变量,并重新定义一个全局变量用于存放光照度。这里定义全局变量LightLux=200。由于温湿度传感器节点和光照传感器节点是在同一个无线网络中的,不同设备要修改main.c中MY_ADDR的数值,这里宏定义期值为2。MY_NET_ID的值无需修改。修改函数PlatformInit()。首先打开函数PlatformInit(),函数末尾的原printf 提示信息改为“Lora Light \r\n”。其次,删除原初始化温湿度模块的代码,改为配置带ADC模块转换功能的初始化函数,函数void AdcInit()定义在adc.c文件中可以直接调用。最后在board.c中定义Adc_t Adc,在board.h中定义:#define ADC_0 PA_0。

2、 光照数据采集部分修改。光照传感器节点和温湿度传感器节点的采集传感数据的机制是一样的,只是传感器类型不一样。根据厂家提供的光敏传感器的规格书,我们可以得出一个光电流Iss与光照强度lux的一个关系式:lux=(5/2)*Iss。其中Iss的单位为:μA,lux的单位为乐克斯度(lux)。有了计算方法,开始编写代码。这部分代码在LoRaGetSensorDataProcess()函数下修改。在c语言编程中,如果一个常数是浮点类型,那么用这个常数参与运算,将会导致运算过程变成浮点运算。这里将上述代码的第3行将1写作1.0,就是为了进行浮点运算。这样小于1的中间运算结果不会变成0,保证了最终数据的准确性。

3、 传输数据内容的修改。光照传感节点收到网关读取传感数据的命令后,数据解析和生成响应的代码是一样的。唯一不同的是数据域部分光照传感器的标识名这里写为:LightLux,单位:lux。因此仅仅需要修改函数LoRa_DataParse()内的sprintf所在位置的代码,代码中把温湿度数据及其单位换成了光照度数据及其对应的单位。

4、 OLED液晶显示部分修改。OLED12864显示屏用于显示提示信息,显示当前传感类型和数据信息。温湿度传感节点程序中显示的是温湿度数据,而任务中需要显示光照度信息,因此这部分代码只需把温湿度的提示及数据替换成光照度的提示和数据既可。修改OLED_InitView()函数,将LoRa Temp/Rh 改为 LoRa Light,用于提示当前采集数据是光照度信息,到这里就完成了光照传感器节点的应用程序的编写编译工程,编译完成后无错误,无警告既可进行下一步。

步骤3 程序烧录

1、将温氏度传感器LoRa模块JP1往左拨,按一下复位键。2、 打开STMFlashLoaderDemo软件,在PortName 下拉列表框中选择对应的窗口。3、读到硬件设备后,BaudRate波特率选:115200,点击NEXT命令按钮。4、 选择MCU型号为STM32L1_Cat1-128k,点击NEXT命令按钮。5、 选中Download device单选按钮,选择xxx.hex下载程序对应的路径,点击NEXT命令按钮。注意:路径要根据.hex文件的实际路径选择。6、 等待下载完成,将LoRa模块的JP1往右拨,同时按一下复位键KEY1。温湿度程序便开始运行了。