刘 理
(阜阳职业技术学院城乡建设学院,安徽 阜阳 236031)
建筑智能化实训平台是用于高职建筑类专业实验实训教学的成套设备,包括“综合布线系统”、“门禁系统”、“消防系统”、“视频监控系统”和“照明系统”等多个子系统[1-2]。在不同的子系统中,包含了对采集温度、湿度、烟雾浓度、光照强度等环境监测数据的需求。实训平台中已存在相应无线传感器节点,可以实现对所需环境指标的实时监测,采集数据通过无线网络传输后,由电脑端的控制软件完成数据显示和管理。
设计基于上述条件,开发应用于Android系统的环境监测软件,结合WiFi模块、ZigBee节点和网络协调器等硬件,实现通过手机或平板上的APP远程实时监测、管理采集信息和控制报警装置的功能。
建筑智能化实训平台中的环境监测系统硬件部分由传感器(探测器)、报警器、网络节点、网关和终端设备等组成。传感器(探测器)包含了温度探测器、烟雾探测器、湿度传感器、光照强度传感器等,用于采集相应的环境数据。数据信息由网络节点发出,通过以网关为核心的ZigBee自组网络进行传输,并通过WiFi方式与客户端(电脑或手机)软件连接实现监测和控制[3]。
设计根据硬件设备情况,结合传感器、嵌入式、无线通信(Zigbee和WiFi)及数据库等多项技术,开发基于Android系统的应用软件,在手机或平板等移动终端上实现对环境数据的采集、显示、存储、管理以及对报警器的控制,提高实训平台环境监测功能的实时性、便捷性、高效性和智能化。该系统整体架构如图1所示,主要分为环境采集模块、网关模块、服务器(数据库)模块和用户终端(Android软件)模块。
环境采集模块用来采集各种环境数据,由不同类型的传感器、探测器与Zigbee网络节点、电源模块共同组成。其中,选择CC2530为网络节点的主控芯片,该芯片具有良好的兼容性和可扩展性[4]。为每个传感器对应的网络节点设置唯一的IP地址,设置定时指令让Zigbee网关自动汇集各个网络节点中传感器所采集的数据,并通过WiFi模块将数据实时传送到手机端,同时上传至服务器的数据库中。
该系统的网关模块主要由两部分组成,一是建立在CC2530芯片组基础上构成的ZigBee网络协调器;二是WiFi模块,采用ESP8266芯片组[5]。其中,ZigBee网络协调器主要用于接收和处理各ZigBee网络节点的采集数据,再由WiFi模块将数据信息发送至手机端和数据库。
该系统使用建筑智能化实训平台配备的上位机电脑作为服务器,服务器主机内装载了控制软件和数据库[6]。其中,数据库的内容主要为系统采集的历史环境数据信息,并通过MySQL软件对这些数据进行存放和管理。服务器主机硬件规格——主板:B460M芯片组,CPU:Intel 酷睿i5 10400,内存:8 GB DDR4,硬盘:2 TB 7200转机械硬盘,网卡:外置1300 M无线网卡。
图1 环境监测系统整体架构
用户终端模块选用搭载了Android系统的智能手机为测试对象。根据Android系统开源特性,对数据采集、处理和通信模块的设计需求进行分析后,决定使用Android studio软件为应用开发环境。测试手机的硬件规格——操作系统:Android 11.0,CPU:骁龙865 八核2.9 GHz,内存:8 GB LPDDR5,外存:128 GB UFS 3.0,网络:支持WiFi6和5G全网通。
根据需求分析,设计将软件系统结构划分为交互层、中间层和数据层三层架构。如图2所示,交互层用于人机交互、中间层用于数据和控制命令传输、数据层用于数据存放和调用。在软件(APP)中,用户可操作界面上的相应按钮,实时查看环境数据、设备状态、调取历史数据和手动开启/关停报警器等,实现设计功能。设计选用的Android Studio作为开发环境,其配套有2个开发工具:JDK(Java Development Kit)、 SDK(Software Development Kit)。JDK使用Java语言编写程序代码;SDK是生成APP所需的编译器。将开发环境配置完毕后,结合设计要求分别进行各模块的程序设计[7]。
根据环境采集模块硬件的主要作用和技术特点,程序的设计应能够实现将采集的数据信号以数值的形式显示在手机界面上。由于系统中各传感器采集现场物理量时,数据将通过ZigBee网络节点中自带的A/D转换器后以数字量的形式输出,在程序中设置从WiFi模块中读取实时数据的部分,并设计环境监测显示界面,将接收的信息直接显示在对应位置处。
以读取和显示温度信息为例,编写代码如下:
public class TempCollector {
public static void main(String[] args) {
// 获取WiFi连接信息
WifiManager wifiMgr = (WifiManager)getSystemService(Context.WIFI_SERVICE);
List
// 遍历扫描结果,获取网络节点温度
for (ScanResult scanResult : scanResults) {
String ssid = scanResult.SSID;
String bssid = scanResult.BSSID;
int frequency = scanResult.frequency;
int level = scanResult.level;
int temperature = scanResult.temperature;
// 显示温度
System.out.println(" 温度:" + temperature);
}
}
}
图2 手机端软件(APP)设计逻辑框图
为实现对历史数据的存放和管理,还需要在APP中实现读取服务器数据库的功能。MySQL中存放的历史数据已按照不同类型进行存放,根据系统功能设计需求建立了关系型数据库,按类别划分表格,包括温度、湿度、烟雾浓度、光照强度等。按类别设置表格存放的优势在于,可以分别单独写入或读取某一类型的数据,数据间互不干扰。APP调取的历史数据是通过本地无线网络接入服务器数据库查询后显示的。
以从数据库中读取和显示历史温度信息为例,编写代码部分内容如下:
public class MainActivity {
public static void main(String[] args) {
// 定义数据库连接变量
Connection conn = null;
// 定义SQL语句
String sql;
// 定义结果集
ResultSet rs;
// 定义数据库驱动
String driver = "com.mysql.jdbc.Driver";
// 定义数据库地址
String url = "jdbc:mysql://localhost:3306/mydb";
// 定义数据库用户名
String user = "admin";
// 定义数据库密码
String password = "000000";
try {
// 加载数据库驱动
Class.forName(driver);
// 连接数据库
conn = DriverManager.getConnection(url, user, password);
// 定义SQL语句
sql = "SELECT * FROM temperature";
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
// 遍历结果集
while (rs.next()) {
// 获取历史温度信息
String historyTemp = rs.getString("history_temp");
// 输出历史温度信息
System.out.println("历史温度信息:" + historyTemp);
}
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
图3 APP环境监测界面
报警器有手动控制和自动控制两种控制方式。其中,手动控制指用户可以通过手机App上的按钮选择开启/关闭报警器;自动控制则是通过设定温度或烟雾浓度的阈值,触发报警器自动开启,当威胁消除时再自动关闭。设计中的报警器直接连接在ZigBee网络节点中,因此在设计控制程序时,手动控制可以通过直接向其发送指令的形式完成,自动控制则需要增加一个触发条件。
以自动开启报警器(实时温度≥50 ℃)为例,编写代码如下:
//定义报警器类
public class Alarm {
private boolean isOn;
private int temperature;
public Alarm(int temperature) {
this.temperature = temperature;
}
//当温度大于等于50℃开启
public void checkTemperature() {
if (temperature >= 50) {
isOn = true;
}
}
public boolean isOn() {
return isOn;
}
}
//定义ZigBee节点类
public class ZigBeeNode {
private Alarm alarm;
public ZigBeeNode(Alarm alarm) {
this.alarm = alarm;
}
//发出指令
public void sendCommand() {
alarm.checkTemperature();
if (alarm.isOn()) {
System.out.println("报警器已开启");
}
}
}
//测试类
public class Test {
public static void main(String[] args) {
Alarm alarm = new Alarm(50);
ZigBeeNode zigBeeNode = new ZigBeeNode(alarm);
zigBeeNode.sendCommand();
}
}
将经SDK编译后生成的.apk文件安装到测试手机中,连接本地WiFi后进入登录界面,输入预设的用户账号和密码,进入控制界面,可选择进入“环境监测”、“报警器控制”、“历史查询”和“设备状态”四个选项。在环境监测界面,可以查看到传感器(探测器)采集反馈的温度、湿度、烟雾浓度、光照强度等实时数据展现,如图3所示,实现了对建筑智能化实训平台周围环境的实时监测。依次测试“报警器控制”、“历史查询”和“设备状态”界面功能,均能实现设计需求,测试结果符合预期。
设计基于建筑智能化实训平台环境监测系统功能,结合传感器、嵌入式、无线网络和数据库等多种技术手段,开发了基于Android系统的手机端应用软件,实现了通过手机APP远程查看环境监测实时数据、管理历史数据和联动控制报警装置的目标。测试结果表明,已开发的软件能够有效满足设计需求。今后将尝试依据建筑智能化实训平台其他子系统功能需求,在软件中增加新的控制模块,比如:增加“门禁系统”中的开/关门记录等,进一步增强手机端APP无线控制功能的覆盖面和集成度,以提高全系统设备的易用性、高效性和先进性。