,,,
(长沙师范学院 信息科学与工程学院,长沙 400100)
目前,环境问题已经成为人们关注的重点问题,PM2.5[1]在近年来引发全球的关注。采用信息技术手段监测室内环境(如PM2.5等)参数,提高室内家居环境质量已经成为一种趋势。树莓派是一款基于Debian Linux系统的嵌入式计算机,因其具有体积小、集成化程度高、扩展性强的优势被广泛使用在不同领域的物联网应用系统中[2],将树莓派用于智能家居环境下的室内环境监测设计有利于提高系统稳定性和可扩展性。
嵌入式系统集成化程度的不断提高、功能的不断完善使得各种技术之间相互渗透、相互促进[3]。树莓派自带USB-host、RJ45、HDMI、SD读卡器等常用接口,并且树莓派[4]的硬件拓展支持功能较为强大,支持的传感器种类颇多,有利于日后的功能扩展。本系统由树莓派控制模块、ESP8266模块、传感器模块和人体感应模块4个模块组成,整体结构图如图1所示。
图1 空气监测系统总体结构图
传感器模块负责完成室内环境参数检测,并通过系统连线将参数通过ESP8266传送到主控制器中,人体感应模块的传感器检测室内是否有人的信号,并直接与主控制器相连,ESP8266模块作为中介模块,实现数据传输功能的同时并作为WiFi路由客户端将数据传送到树莓派主控制器。主控制器根据传感器送来的信号将对应的控制信号通过ESP8266控制外接的空调、窗帘、灯具等被控对象。
本项目选择了树莓派3B平台作为主控制器,其搭载了64位4核的ARM Cortex-A53 CPU,自带板载网口、WiFi和蓝牙,内存硬盘为SD卡。树莓派的系统为嵌入式Linux系统。安装该系统需要下载镜像并使用软件进行烧录,同时还需要使用安全外壳协议(SSH)、MQTT及SMB协议完成整个设计的配置,此外,其体积小,便于部署和安装。
ESP8266是一款超低功耗的UART-WiFi 透传模块。模块体积小,便于携带,成本低,具有通用USART接口等特性。此外,ESP8266不但能够实现数据的传输,还可以作为WiFi客户端连接到路由器,基于以上两点,本设计选择了ESP8266扩展板作为系统的WiFi模块。
ESP8266用于数据的传输。传感器将数据传入ESP8266,然后通过WiFi与树莓派相连,并通过使用消息队列遥测传输协议(Message Queuing Telemetry Transport,MQTT)将数据传入树莓派。
由于ESP8266扩展板的核心芯片NodeMCUDevKit的Rx和Tx引脚用于连接ESP芯片,实现内部的通信,因此传感器连接NodeMCUDevKit时,选择了GPIO口的12、13引脚进行连接。
空气检测传感器模块用于完成室内环境的测量。本系统需要测量的指标有温度、湿度、PM1.0和PM2.5浓度。本文选取了攀藤的PMS5003系列传感器,其是一款基于激光散射原理的数字式通用颗粒物浓度传感器,可连续采集并计算单位体积内空气中不同粒径的悬浮颗粒物个数,即颗粒物浓度分布,进而换算成为质量浓度,并以通用数字接口形式从Rx和Tx输出,其与ESP8266的端口接线如表1所列。内部功能框图如图2所示。
表1 ESP8266与传感器接口配置表
图2 传感器内部功能图
控制模块用于实现监控系统的控制部分,用于实现远程控制系统中的自动化控制。本系统选择了无线WiFi sonoff基本版智能开关,用于连接各种外部设备,通过WiFi路由器将数据传输到云平台,使用户可以通过移动端远程控制所有连接的设备。sonoff的工作电压范围为3.0~3.6 V,如果接5 V的电压则会烧毁硬件,所以转TTL接口时工作电压应为3.3 V。sonoff开关并不能直接连接树莓派,需要在软件中进行配置。修改完成后,用电器和电源的零火线分别与sonoff相对应的输入输出口相接后上电。其外部连线图如图3所示。
图3 sonoff开关外部负载接线图
ESP8266的官方固件不支持PMS5003T传感器温度和湿度数据传输。在官方固件中,数据11为0.1升空气中直径在5.0 μm以上的颗粒物个数,数据12为0.1升空气中直径在10 μm以上的颗粒物个数,而PMS5003T的温度数据口为数据11,湿度数据口为数据12,因此要进行修改,数据才能上传至ESP8266,否则无法得到温度和湿度的数据。为了保证精确度,温度和湿度的数值要精确到小数点后两位,因此要用到float函数。关键部分代码如下:
log += F(", temperature="); //温度数据
log += float(data[10]/10.00);
log += F(", humidity="); //湿度数据
log += float(data[11]/10.00);
addLog(LOG_LEVEL_DEBUG_MORE, log);
SerialRead16(&checksum2, NULL);
SerialFlush(); //串口数据监测
if (checksum == checksum2){
UserVar[event->BaseVarIndex] = data[3];
//输出的数据为PM1.0
UserVar[event->BaseVarIndex + 1]= data[4];
//输出的数据为PM2.5
UserVar[event->BaseVarIndex+2]=
float(data[10]/10.00); //输出为温度
UserVar[event->BaseVarIndex+3]=
float(data[11]/10.00); //输出为湿度
return true;
}
在ESP8266的web页面显示的效果如图4所示,可得到当前环境的PM1.0、PM2.5、温度和湿度数据,若GPIO口的设置或连接错误,则Values一栏中的数据空缺。
图4 ESP8266监控页面
本设计的主控平台为树莓派。除了配置树莓派操作系统之外,还需要配置SSH、MQTT及SMB协议,从而为ESP8266提供有效的数据交换保障。
MQTT是一种基于发布/订阅模式的“轻量级”通信协议,为连接远程设备提供实时可靠的消息服务。PMS5003T的数据通过数据线连接传输到ESP8266后,使用MQTT协议将数据传入树莓派,从而在树莓派的web页面上显示监测数据。其中用Mosquitto实现MQTT协议。在树莓派中安装Mosquitto,并且配置账号密码,用于实现数据的安全传输。安装后即可在putty中进行账号密码的设置,代码如下:
mqtt:
broker: 192.168.1.113 //服务器地址
username: pi //登录名
password: raspberry //登录密码
port: 1883 //登录端口
配置完成后在树莓派的显示如图5所示。
图5 树莓派web监控页面
内网通常指局域网,外网也就是广域网即Internet。家居系统要实现远程访问家中设备,可以通过外网与内网之间的数据交换实现。内网与外网交换数据要通过路由器或网关的网络地址转换(NAT)进行。然而,来自外网对内网数据的访问请求,路由器或网关在绝大多数情况下都会进行拦截,使用内网穿透技术中的端口映射实现外网访问。
端口映射是NAT的一种,将一台主机的内网(LAN)IP地址映射成一个公网(WAN)IP地址,当用户访问提供映射端口主机的某个端口时,服务器将请求转移到本地局域网内部提供这种特定服务的主机。
本设计采取的方式是通过花生壳域名解析器实现端口映射,完成外网访问,配置如图6所示。使用花生壳账户即SN访问花生壳界面并完成端口映射内网主机的IP地址即树莓派在局域网的IP地址,从而能在无公网IP的情况下,通过内网地址的映射和穿透将树莓派web网页上的数据都映射到公网上,实现远程监控。
图6 花生壳域名解析器配置图