任志敏,张 良
(常州纺织服装职业技术学院,江苏 常州 213164)
日常生活中,从运动手环、智能手表、智能手机、平衡车、无人飞机、自动驾驶汽车……,到农业大棚、智慧工厂、馆藏库房[1]……,或多或少都涉及数据采集与处理,从中不难看出,数据采集的应用领域非常广泛。尤其在物联网、云计算、边缘计算等技术已经深入个人、家庭、社会生活的背景下,数据采集系统的重要性愈加凸显。
本文设计的数据采集系统的应用场合为智慧工厂、馆藏库房、农业大棚等。这些场合的特点和需求包括:待监测的数据节点较多;数据采集节点不宜采用常规供电方案,如交流市电加适配器的供电方案只能采用电池供电,且需要保证电池长时间工作;节点数据通过无线方式传输[2](通过网络发送至云平台,便于数据存储和回溯;在方便管理员工作的同时,利用移动端APP直接查看周边区域节点的数据,并能对出现的异常数据及时预警);节点数据不仅包括温度、湿度、气压等常规参数,还需要监测节点本身在运行过程中是否掉落,是否翻转。该数据采集节点的特点是传感器输出数据量不大,但要求节点功耗更低,且可以短距离无线数据传输等。基于前文的需求分析,本文设计了如图1所示的系统总体结构方案。
图1 系统总体结构方案
每个节点的硬件组成包括低功耗MEMS传感器、温湿度传感器、加速度计传感器,外加支持低功耗蓝牙的微控制器。节点由3 V的纽扣电池供电,一颗电池的工作时间至少稳定在1年以上。在数据节点蓝牙传输范围内将树莓派作为蓝牙主机,按照需求周期性收集周围多个节点通过蓝牙广播发出的传感器数据,再通过WiFi或4G模组把数据发送至阿里云物联网平台。在管理员工作过程中,手机移动端充当蓝牙主机的角色,不仅可以直接在手机上显示周边节点的数据,还能够通过WiFi或4G网络把数据发送至阿里云物联网平台。用户通过阿里云物联网平台可以实时监测每一个节点的当前状态,管理员也可以通过手机实时查看节点数据,为提高管理效率提供参考。
目前市面上支持蓝牙协议的微控制器主流生产商有挪威的Nordic公司,美国的德州仪器公司(TI),德国的戴乐格半导体公司(Dialog)和意大利的意法半导体公司(ST),每家公司都推出了多种型号的支持单模或双模的蓝牙芯片,经过比较研究,本文选择Nordic公司出品的nRF52832作为系统的核心控制器[3]。
nRF52832是Nordic公司推出的一款基于ARM Cortex-M4内核,支持低功耗蓝牙BLE、蓝牙Mesh和近场通信NFC的片上系统芯片SoC。在硬件配置上,其最突出的特点是采用先进的片上自适应电源管理系统,可实现极低的功耗,在不保留RAM的模式下功耗仅0.3 μA。无线传输性能指标方面,在低功耗蓝牙模式下支持1 Mb/s或2 Mb/s的传输速率。
基于本文的需求,环境数据主要包括温度、湿度和气压。目前市面上该类传感器种类繁多,尤其是温湿度传感器。文献[4]设计的多功能家居报警系统采用DS18B20温度传感器,DS18B20作为单总线结构的温度传感器,被广泛应用于锅炉测温、机房测温等领域,其最大的优势在于独特的单线接口方式,不足之处在于其功耗较大,且只能获取温度参数。SHT20是采用I2C协议的温湿度传感器,通常用于室内空气质量检测[5],其尺寸和功耗优势突出,但是只能测量温度和湿度,不适合本课题。BME280是德国博世(BOSCH)出品的一款集测量温度、湿度、气压于一体的MEMS传感器,其采用极小化的LGA封装,尺寸为2.5 mm×2.5 mm×0.93 mm,具有SPI和I2C两种接口,能够更好地满足低功耗的需求,因此本文选择BME280传感器。
监测数据节点本身的姿势状态需要使用加速度计传感器。目前加速度计传感器已经被广泛应用于手机翻转、四轴飞行器、可穿戴设备、平衡车等领域,品种较多,常见的加速度计传感器有MPU6050、BMA400、LIS2DH12等[6],经过研究比较,本课题选择意法半导体公司(ST)出品的LIS2DH12加速度计传感器,其低功耗特性符合本文要求。
LIS2DH12是由意法半导体公司出品的超低功耗、高性能三轴加速度计,属于MEMS传感器的一种。LIS2DH12支持1.71~3.6 V的宽电压电源供应,最低功耗可降至2 μA;支持配置可选的量程为±2g/±4g/±8g/±16g;支持I2C或SPI接口,可选数据输出速率为1 Hz~5.3 kHz;2个中断引脚可以监测唤醒、自由落体或其他位置移动等事件。
结合nRF52832核心电路、温湿度传感器BME280和加速度计LIS2DH12,本课题设计的数据采集节点电路如图2所示。
图2 数据采集节点电路
LIS2DH12的内核电压和I/O引脚电压均由VDD提供,100 nF和10 μF去耦电容尽可能靠近第9引脚VDD。LIS2DH12支持I2C和SPI数据接口,本课题采用四线SPI接口,其中CS引脚连接nRF52832的P0.08脚,由程序拉低使能SPI模式,SDO/SAO引脚选用SDO功能作为从机SPI的输出引脚,SDA/SDI/SDO引脚选用SDI功能作为从机SPI的输入引脚,SCK/SPC选用SPC功能作为从机SPI的输入时钟,2个中断引脚分别连接不同的I/O作为LIS2DH12姿势变化中断产生接口。
数据采集系统的软件设计包括:节点端nRF52832微控制器软件设计,Android端程序设计,树莓派端软件设计。
nRF52832端程序主要涉及的设计任务有采集BME280的温度、湿度和气压值,以及LIS2DH12加速度计值,并响应加速度计因掉落、翻转产生的中断;采用蓝牙广播的方式间隔性发送传感器数值。nRF52832软件设计流程如图3所示。
图3 nRF52832软件设计流程
采集数据后,需要按照协议发送节点数据。节点广播数据包共24 B,见表1所列。
表1 节点广播数据包协议
设置蓝牙发射功率txpower,根据nRF52832的技术文档,蓝牙发射功率可分为9个等级[7],依次是-40 dBm,-30 dBm,-20 dBm,-16 dBm,-12 dBm,-8 dBm,-4 dBm,0和4 dBm,发射功率设置值必须为以上9个值中的一个。理论上说,值越大,信号越强,传输距离也就越远,但是能耗也越大。本课题设置txpower为0,可以根据不同的应用场景调整该值,以实现传输距离更远与节省功耗的平衡。蓝牙发射功率值在协议中共占据5位,即可存放的范围为0~31,并非所有9个等级的数组可以存放到协议中,因此先对txpower加上40,然后除以2,保证所有值都落在0~31范围内。
移动端管理软件需要发现管理员周围的传感器节点,并添加节点,之后读取并显示环境数据、存储历史数据、设置告警阈值、将数据上传至阿里云物联网平台等。Android移动端程序设计功能结构如图4所示[8]。
图4 Android移动端程序设计功能结构
每个功能模块的具体作用如下:
(1)蓝牙节点与手机通信,打开手机端APP,设置是否允许扫描蓝牙广播设备,并设定以一定的时间间隔扫描蓝牙节点发出的广播数据。
(2)通过添加和删除蓝牙节点对蓝牙设备进行管理。
(3)显示蓝牙节点采集的环境数据,对于多个节点采用两种显示方式,如一屏列表显示多个节点数据或一屏显示一个节点数据,通过滑动屏幕显示多个节点数据;环境数据既可以以数字形式显示当前值,也可以显示历史值,还可以采用动态曲线显示数据变化。
(4)利用Android提供的SQLite数据库存储不同时间点获取的环境数据,便于日后查询或分析。
(5)设置温湿度、气压数据的告警阈值,一旦超出阈值范围,则通过振铃方式告知用户,同时显示告警提示。
(6)监测并显示蓝牙节点电池余量。
(7)显示三轴加速度计x,y,z方向的值,一旦加速度计有移动,程序及时提醒用户。
(8)获取的节点数据通过手机4G网络周期性发送至阿里云物联网平台。
Android端APP数据显示界面如图5所示。
图5 Android端APP数据显示界面
树莓派主机作为蓝牙广播的接收器,接收节点的蓝牙广播,并间断性向阿里云物联网平台发送数据。
在本文中,使用树莓派系统Raspbian的Shell提供的hciconfig操作蓝牙,主要步骤如下:
(1)通过sudo hciconfig hci0 up启动蓝牙树莓派设备,hci0指0号HCI设备,即树莓派的蓝牙适配器。
(2)通过命令sudo hciconfig hci0 reset复位蓝牙适配器。
(3)扫描蓝牙节点,命令为sudo hciconfig lescanduplicates。
(4)接收并获取蓝牙节点广播数据,命令为sudo hcidump-raw。
树莓派端程序内容主要由两部分组成,一是扫描获取附近所有蓝牙节点的广播,接收数据并解析;二是把解析后的数据发送至阿里云物联网平台。树莓派端程序流程如图6所示。
图6 树莓派端程序流程
本文源自实际应用需求,通过研究低功耗相关技术,确定并设计了总体方案,在此基础上设计了数据采集节点硬件系统,编程实现了软件系统,可把数据上传到阿里云物联网平台[9-10]。硬件实物如图7所示。
图7 硬件实物