李红
(福建省华厦能源设计研究院有限公司 福建福州 350001)
随着科技水平的不断进步,不仅仅是工业上开始推行智能化,智能化的“云家居”逐渐走入人们的家中,“云家居”这个概念也逐渐被人们所了解。“云家居”运用的物联网(IOT)技术,即物物相连技术,是通过各种传感器支撑起来的一种新兴技术。随着社会的发展,这一技术对于人们的日常生活愈发的重要起来,越来越多的互联网厂商开发出了自己的物联网“云家居”产品,实现了远程读取数据、远程控制,为客户提供个性化服务。小米公司积极发展生态链企业,组成了一个比较完整的“云家居”生态链。温湿度检测[1]在工业、生活中均有着重要的应用,在很多情况下需要对较大的空间进行多个点的测量,这给温湿度传感器的可分布式、低功耗提出了一定的要求。传统的温湿度传感器主要有水银式和电子式。水银式温湿度计精度比较高,但是需要人工到温度计前进行读取,采集数据后人工录入系统。电子式温湿度传感器实现自动读取,但是电子式温湿度远程监测系统有布线复杂、采集速度慢等缺点[2],或者需要插在220 V 市电插座上,影响布放传感器的灵活性,极大限制了应用场景和应用范围。市面上便携式以及采用低功耗设计的远程温湿度传感器少。同时单片机和大规模集成电路的应用,出现了高性能、高可靠性的单片机数据采集系统[3]。近年来,WiFi 技术[4]已经走进了千家万户,所以出现一款低功耗、模块化、基于物联网技术的温湿度传感器有着非常重要意义。
根据实际需求,本系统拟采用STM32F103C8T6[5]单片机做为主控芯片,其较丰富的STM32 固件库[6]可以方便我们开发,特别是低功耗模式可以很方便地实现低功耗功能。数据采集模块采用DHT11 温湿度传感器[7]模块,外部通讯模块采用成本较低的ESP8266-01S WIFI 模块[8]实现,云服务器采用了百度智能云服务器,UI 界面采用比MFC 优化更好的QT5 来绘制[9]。STM32F103 的低功耗模式采用停止模式[10]来降低系统的功耗。
本设计的总体框图如图1 所示,由图可知系统整体结构分为3 个部分:①下位机部分,以STM32F103C8T6 为控制核心,由温湿度传感器ESP8266-01S WIFI 模块组成;②云服务器,下位机数据传送给云服务器再传给上位机;③上位机有多个平台的显示,有PC 端和手机端,均可以显示消息记录、数据库信息以及画出数据的折线图。系统是一个比较完整的物联网系统,模块性强,可以后期接入到更大更全的物联网系统中,实用性强。
图1 系统总体框图
(1)下位机软件整体结构。该系统使用STM32F103C8T6进行下位机的开发。系统首先进行复位初始化,初始化系统时钟以及系统I/O、中断和RTC 实时钟。而后进行ESP8266 的初始化,WIFI 模块由MCU 通过串口通信发送AT 指令进行控制,初始会设置为站模式,连接上当前环境的WIFI 热点,并且设置为透传模式。以上步骤完成后发送命令连接云服务器,连接完成后发送命令订阅主题,订阅完成后LED 灯闪烁提示完成。初始化完成的外部中断负责切换停止模式。如果不进入停止模式,则3 s 获取并且发送一次数据;如果是进入停止模式,则2 min 30 s 获取并且发送一次数据,LED 灯亮暗来提示当前状态。温湿度传感器则由传感器通信协议获取温湿度的实时数据。整个下位机软件结构如图2 所示。
图2 单片机软件的结构体图
(2)系统的总体程序流程图如图3 所示。
图3 系统流程图
STM32F103C8T6 单片机主要是工作在单线程中,所以在初始化中有一个循环来保持单片机的持续工作。为了处理时钟和外部摁键等信息,运用了中断这个重要的处理机制。在停止模式时,需要RTC 中断和外部中断来唤醒停止模式,使单片机继续运行接下去的代码。
(1)低功耗模式以及RTC 时钟唤醒程序设计。该系统选择了低功耗模式中的停止模式来减小系统的功耗,接下来结合代码来实现停止模式。
在STM32 程序的函数中加入stm32f10x_pwr.c 这个系统库,以及加入#include “stm32f10x_pwr.h”,调用其中的void PWR_EnterSTOPMode(uint32_t PWR_Regulator,uint8_t PWR_STOPEntry)函数来进入停止模式:第一个参数填写PWR_Regulator_LowPower,设置为低功率模式下带有调节器的停止模式,第二个参数填写PWR_STOPEntry_WFI,设定为任意一个中断就可以唤醒停止模式。所以最后的代码如下:
RTC 时钟[14]是STM32 系统内部的时钟[15],可以进行倒计时。倒计时结束后可以产生中断,这个中断用来“唤醒”停止模式,继续执行主函数里的代码,具体实现如下:
调用库函数来初始化RTC 时钟,并且初始化RTC 时钟中断响应函数。在RTC 时钟进入中断后,清除中断标志位和中断源[16],RTC 中断源为EXTI_LINE17,重新开启系统时钟以及之前被关闭的外设,系统恢复正常,继续执行代码。
在停止状态时,显示状态的LED 灯会熄灭。在每3 s 发送一次的状态时,LED 会亮起。
(2)ESP8266 程序设计。本系统使用的是ESP8266-01 WIFI 模块,是市场上较为常用的WIFI 模块之一。本系统利用串口通信与改模块进行通信(UATR2),采用AT 指令库进行操作。在下位机控制系统中,需要将获取到的温湿度数据发送到ESP8266 模块,首先就要初始化,设置ESP8266 模块,并且利用Mqtt 协议连接上百度智能云服务器。
下位机硬件系统的设计如图4 所示。基于物联网的低功耗温湿度传感系统的下位机,是以STM32F103C8T6 为主控核心,由ESP8266-01S 作为WIFI 传输模块,两路的SHT30 温湿度传感器作为温湿度采集模块,6*6*5 轻触开关作为外部中断输入。系统实时获取温湿度传感器的数据,进行数学解算后打包由串口通信发送至WIFI 模块。WIFI 模块连接上百度智能云服务器后再由上位机接收。
图4 下位机系统总体框图
下位机控制核心采用STM32F103C8T6 芯片。主控芯片是一款基于ARM Cortex-M3 内核的32 位微控制器。芯体尺寸为32 位,程序存储器容量为64 KB,具有72 MHz 的芯片主频。内部集成了ADC 以及I2C 硬件接口,通用I/O 个数达到37 个,工作电压为2 V~3.6 V。
(1)Qt 程序设计思路。本UI 界面设计要求具有能够获取百度智能云服务器透传的温湿度数据、显示数据、将数据存放入数据库后显示数据库数据以及将数据绘制成数据曲线的功能。程序设计的思路是通过Qt 的Mqtt 库进行操作,连接上百度智能云服务器,订阅相应的主题,而后利用CONNECT 函数接收服务器所发送的信息。通过解包来获取设备编号、环境的温湿度数据。采用QChart 类来绘制数据的折线图,方便用户观察环境变化的趋势。
(2)Qt 程序整体设计框架。本系统使用Qt 编写UI 界面,软件的整体框架图如图5 所示,总共有4 个界面,分别为连接界面、数据库数据显示界面、数据库查找界面和折线图界面。
图5 Qt 软件设计框架图
(3)Qt 显示界面的优化。Qt 在PC 端的控件更加兼容,容易实现更多的功能,所以在PC 端增加了背景图片标题以及图标,增大了QLable 的字号,让提示更加的清晰。优化后的界面如图6 所示。
图6 PC 端界面图
测量了3 组温湿度与实际对比表格如表1 和表2 所示,表1 为SHT30 通道1,表2 为SHT30 通道2。
表1 SHT30 通道1 测量温湿度与实际对比
表2 SHT30 通道2 测量温湿度与实际对比
测试方法与结论:实际温湿度采用市面上采购的温湿度计进行监测,由表1 和表2 数据可得温湿度误差较小,测量精度较高。
测量了7 组工作在停止模式下工作电流、3 s 一发送模式下工作电流和低功耗模式使用10 000 mah 充电宝供电使用的时间如表3 所示。
表3 测量低功耗电流与正常工作电流
测试方法与结论:测试采用5 V 10 000 mah 充电宝供电,将万用表串联至供电系统中,测得以上数据。由表3 中数据可得:当工作在停止模式下时,电流比3 s 一发送的工作模式减小一半,功耗减小一半,可以实现系统的低功耗功能。
减小了功耗之后,采用充电宝供电的本系统可以达到14 d以上的使用时间,基本能够满足市场的要求。
市面上虽然有功耗比较低的温湿度采集系统,能够做到4 mA 级别[10],但是只有采集的功能,没有通过WIFI 传输至服务器,缺乏主要的功能。本系统如果只有采集功能时,低功耗能达到2 mA 级别,比市面上明显小。
本系统主要特色为:①使用百度智能云服务器,将数据组包发送至服务器后使用手机和PC 端进行远程接收;②实现单片机进入停止功能,有效降低了系统的功耗。
本系统比较完整的实现了以上功能,数据传输正确,功耗明显降低。
市面上的低功耗温湿度传感器系统比较少,而且缺乏主要功能,本系统填补了市场上的空白。同时该系统目前在性能和功能上还有很大的提高空间,如云平台只能采用百度智能云服务器,对其他的云平台兼容性较差,上位机软件界面优化仍然不足,后期可以增加web 界面,使系统更加完善。