# 智慧校园仿真应用系统 ## 1 前言 随着物联网技术的发展,以及移动应用市场的重大变革,现在的生活渐渐发展为以移动为中心的智能多元化生活,人们可以通过手中的移动设备或互联网随时随地监控家里的状况、远程管理和控制家用电器或设备,智能化的生活逐渐被更多的人所接受和使用。 正是在此大的行业背景下,结合功能强大的 Castwise-Z7 嵌入式全可编程应用开发实训平台,提出了《智慧校园仿真应用系统》这一项目,旨在学习和实践新兴的物联网技术,掌握新的行业动向。 ## 2 需求分析 程序主界面如图 2-1 所示。为登录界面。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/1b84543033b967a12aab0a8aea1a9e12.writebug) 图 2-1 仿真系统登录界面 介绍界面: ![](https://www.writebug.com/myres/static/uploads/2022/1/6/706adf2f178305b2b0147f95041d0983.writebug) 图 2-2 登录主介绍界面 我的介绍界面: ![](https://www.writebug.com/myres/static/uploads/2022/1/6/45d7b6cba89a6785ce83e7cfec2a3b05.writebug) 图 2-3 我的介绍界面 系统软件界面: ![](https://www.writebug.com/myres/static/uploads/2022/1/6/5bd3bc3f703bf9fac041b818e2601f70.writebug) 图 2-4 系统软件界面 ## 3 总体设计 ### 3.1 系统目标 该项目是基于 Castwise-Z7 嵌入式全可编程应用开发实训平台的数据采集和环境监控系统,系统应具有如下功能: (1)环境监测 通过收集智能传感器和 Zigbee 无线网络采集的环境数据,以 Web 页面方式显示。主要包括: 1)温度监测 通过温度传感器采集环境的温度,经过数据处理后以页面方式显示。 2)湿度监测 通过湿度传感器采集环境的湿度,经过数据处理后以页面方式显示。 3)风速监测 通过风速传感器采集风速仪的转速,经过数据处理后以页面方式显示。 4)风向监测 通过风向传感器采集风向仪的方位值,经过数据处理后以页面方式显示。 (2)视频监控 通过网络摄像头实时采集视频数据流,当用户通过客户端访问视频监控页面时可调用摄像头查看所监控的环境情况。 (3) 条码操作 1)二维码操作 在二维码操作页面上输入任意字符,可生成二维码图片,并能够保存和打印。 2)条形码操作 在条形码操作页面上输入任意数字,可生成条形码图片,并能够保存和打印。 ### 3.2 构建开发环境 #### 3.2.1 硬件配置 Web 服务端: 1.设备名称:Castwise-Z7 嵌入式全可编程应用开发实训平台 2. CPU 处理器:ARM Cortex-A9 1GHz 3. 内存:1GB DDR3 SDRAM 4. 存储器:4GB eMMC 高速 Flash 5. 显示分辨率:1280*720P PC 客户端: 1. CPU 处理器:Intel Pentium 4 1.6GHz 以上 2. 内存:1GB 以上 3. 硬盘:80GB 以上 4. 显示器分辨率:1280*720P 以上 #### 3.2.2 软件配置 Web 服务端: 1. 操作系统:Linux 3.5.0 2. Web 服务器:www PC 客户端: 1. 操作系统:Windows XP/7/8 兼容操作系统 2. 浏览器:Google Chrome/Mozilla Firefox 兼容浏览器 3. 播放器:VLC Media Player 2.1.3 ### 3.3 系统功能结构 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/96fd2a421b528c3987951c4f14b61b4e.writebug) 图 1 系统功能结构 ## 4 数据库设计 ### 4.1 数据库概要说明 在设计数据库时,考虑到系统主要应用于嵌入式 ARM 开发平台,且从易于开发和管理的角度考虑,系统选择采用 SQLite 作为后台数据库。 根据系统的功能需要,设计了一个 info 数据库,在其中设计了 4 个关系表:user_info, sys_info, style_config, monitor_config 分别对应系统的不同功能。 ### 4.2 数据库 E-R 图 ### 4.3 数据表结构 在 SQL Server 2008 R2 中创建数据库, (1)用户信息表 | user_info 表 | | | | ------------ | ------------- | ------ | | 列名 | 数据类型 | 允许空 | | user_id | int | | | name | nvarchar(255) | √ | | password | nvarchar(255) | √ | | email | nvarchar(255) | √ | | permission | int | √ | 表 1:用户信息表 user_info 表,对应于系统登陆 login 和用户注册 register 中间件。此表设计的目的是存储系统中远程用户的注册信息,包括了表中具有唯一性的 user_id 值(主键)、用户名称,用户密码,电子邮件地址和权限。当远程用户登陆到本系统的登陆页面时,系统会要求其登陆用户名和密码,用户输入后会将所得信息与该表的 name 和 password 对比,若一致则通过,否则将显示错误信息。 (2)系统信息表 | sys_info 表 | | | | ------------ | ------------- | ------ | | 列名 | 数据类型 | 允许空 | | machine_name | nvarchar(255) | √ | | product_id | nvarchar(255) | √ | | hardware_id | nvarchar(255) | √ | | software_id | nvarchar(255) | √ | | serial_num | nvarchar(255) | √ | 表2:系统信息表 sys_info 表,对应于系统设置 setup 中间件。此表设计的目的是用来存储系统信息,包括主机名称、产品型号、硬件 ID、软件 ID 和序列号 (3)界面风格表 | style_config 表 | | | | --------------- | -------- | ------ | | 列名 | 数据类型 | 允许空 | | page_style | int | | 表 3:用户信息表 style_config 表,对应于系统设置 setup 中间件。此表设计的目的是用来存储系统界面风格的配置信息 ``` (4)监控配置表 ``` | monitor_config 表 | | | | ----------------- | ------------- | ------ | | 列名 | 数据类型 | 允许空 | | video_1 | nvarchar(255) | √ | | video_2 | nvarchar(255) | √ | | video_3 | nvarchar(255) | √ | | video_4 | nvarchar(255) | √ | | video_5 | nvarchar(255) | √ | | video_6 | nvarchar(255) | √ | 表 4:用户信息表 monitor_config 表,对应于系统设置 setup 中间件。此表设计的目的是用来存储视频监控的配置信息(视频监控地址参数) 表 4-1 菜单表 | 字段名称 | 字段类型 | 键/索引 | 备注 | | ----------- | ------------ | ------- | -------- | | id | int | 主键 | 编号 | | MenuName | varchar(50) | | 菜单名称 | | MenuCaption | nvarchar(50) | | 菜单标题 | | MenuId | int | 索引 | 菜单编号 | | MoudleId | int | 外键 | 模块编号 | ## 5 接口设计 ### 5.1 软件接口 (1) CGI 命令控制程序 1)解析数据函数 函数:int ParseData(char *filename, struct data *js_data) 作用:从 Web 应用层 CGI 请求中获取并解析 JSON 格式的设备操作数据 2)增加命令队列函数 函数:int addCmdQueue(queue_data* p_map, struct data *js_data) 作用:把设备操作数据包添加到共享内存队列中,并作新增操作标志,即向命令解析服务器发送新增操作命令 3)获取返回结果函数 函数:int getResultQueue(int pos, queue_data* p_map, struct redata *re_data) 作用:轮询等待设备操作后的返回结果数据 4)返回结果数据函数 函数:int ReturnData(struct redata *re_data) 作用:解析返回的结果数据,并按照 Web 应用层的要求分割返回数据,并打包成 JSON 格式返回给应用层 (2) parseServer 命令解析程序 1) 初始化共享队列函数 函数:int InitializeQueue(queue_data* q_map) 作用:初始化共享内存队列 2) 打开串口函数 函数:int open_port(int com_port) 作用:打开串口 3) 设置串口参数函数 函数:int set_com_config(int fd,int baud_rate, int data_bits, char parity, int stop_bits) 作用:设置串口参数,实现中控服务系统与数据采集系统之前的数据通信 4) 队列管理线程函数 函数:void *QueueManager(void *arg) 作用:管理 3 个队列管理线程 (CleanupManager、TimeoutCounter、TimeoutManager) 5) 清除队列线程函数 函数:void *CleanupManager(void *arg) 作用:清除共享内存队列中超时未完成的操作数据包 6) 超时计数器函数 函数:void *TimeoutCounter(void *arg) 作用:循环检测共享队列,并启动超时计数器 7) 队列超时管理函数 函数:void *TimeoutManager(void *arg) 作用:循环监测共享队列,管理超时的数据包,并相应标志状态 (3) common 公共函数库 自定义操作数据包结构体 ``` typedef struct { int used_stat; //队列状态 int sandtable_id; //沙盘ID int sandtable_node_id; //沙盘节点ID char operate_code[128]; //操作命令码 char operate_data[128]; //操作命令参数 char result_code[128]; //返回状态码 char result_data[128]; //返回数据 int cmd_input_stat; //输入态 int cmd_send_stat; //发送态 int cmd_result_stat; //结果态 int cmd_finish_stat; //完成态 int cmd_remove_stat; //删除态 int time_out; //超时计数器 ``` }queue_data; (4) login 系统登陆中间件 1) 检查用户名和密码函数 函数:int check_user_and_pwd(sqlite3 *db,char *name ,char* pwd) 作用:查询当前用户名和密码是否与数据库中的记录相匹配 (5) register 用户注册中间件 1) 创建数据库函数 函数:int db_create(sqlite3 *db,char *pTable_name,int column_num,COLUMN column[]) 作用:创建用户记录数据库文件 2) 新增用户记录函数 函数:int db_insert(sqlite3 * db, char * pTable_name, int column_num, COLUMN column[]) 作用:在数据库中插入一条用户记录 3) 检查用户名记录函数 函数:int check_name_exist(sqlite3 *db,char *name) 作用:判断当前输入用户名是否已存在数据库中 (6) setup 系统设置中间件 1) 获取系统信息函数 函数:int get_system_info() 作用:查询数据库,获取当前系统信息 2) 设置系统信息函数 函数:int set_system_info() 作用:获取应用层输入的系统参数,修改当前系统信息,并保存于数据库 3) DHCP 动态配置网络函数 函数:int set_dhcp_network() 作用:采用 DHCP 方式动态配置网络,并保存网络信息到配置文件 4) 手动配置网络函数 函数:int set_manual_network() 作用:获取应用层输入的网络参数,采用手动方式配置网络,并保存网络信息到配置文件 5) 获取网络配置函数 函数:int get_network_config() 作用:从当前系统中动态获取网络配置信息,并返回应用层 6) 获取界面风格函数 函数:int get_style_config() 作用:从数据库中获取当前界面设置参数,并返回应用层 7) 设置界面风格函数 函数:int set_style_config() 作用:获取应用层输入的界面参数,修改当前系统界面风格,并保存参数到数据库 8) 获取视频监控配置函数 函数:int get_monitor_config() 作用:从数据库中获取视频监控配置参数,并返回应用层 9) 设置视频监控配置函数 函数:int set_monitor_config() 作用:获取应用层输入的视频监控配置参数,修改视频监控地址,并保存参数到数据库 ### 5.2 硬件接口 #### 5.2.1 嵌入式硬件平台 Castwise-Z7 嵌入式全可编程应用开发实训平台采用基于 Xilinx Zynq-7000 AP SoC 系列芯片 Z-7020(XC7Z20-1CLG400)作为实训平台的核心处理器,该处理器采用最新 ARM-Cortex-A9 双核和 Artix-7 FPGA 架构,其 FPGA 可编程逻辑功能使得整个系统拥有丰富的可拓展能力。处理器含有 ARM 双核 Cortex-A9 处理器(主频高达 1GHz),并且支持 NEON Processing / FPU Engines,其拥有强大的音视频处理能力。处理器提供多种外围设备 I/O 接口,如 USB、SPI、SDIO、CAN、UART 和 I2C 等接口。 Castwise-Z7 开发平台的功能原理图如下: ![](https://www.writebug.com/myres/static/uploads/2022/1/6/274563533b4d38830bfd2ca9edf76935.writebug) 图:Castwise-Z7 原理框图 #### 5.2.2 硬件平台技术参数 | 核心资源 | | | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 处理器 | Zynq-7000 AP SoC XC7Z020-1CLG400 采用最新 ARM Cortex-A9 双核 + Artix-7 FPGA 架构主频高达 1G 支持 NEON Processing / FPU Engines 支持 VFPU 浮点运算 256KB 的片上存储空间 FPGA 包含 85K 逻辑单元 FPGA 包含 560K BANK RAMFPGA 支持 2 路 2X12bit 的 ADC | | 存储器 | 1GB DDR3 SDRAM (1066 Mbps)128Mb QSPI Flash4GB eMMC Flash4 GB SD 卡 | | 音视频 | 24-bit 立体声音频编解码器 HDMI 输出 (支持 1080p60 + audio)支持 VGA (12 bit color video output)输出支持 I2C Audio Codec,立体声 48K 录制和播放音频,采样频率范围 8KHz~96KHz,支持 Mic In,Line In,Line Out,Headphone 输入输出 | | 模拟输入 | 支持 4 路模拟信号输入通道(2 路差分 / 2 路单通道) | | 网口 | 一路 10/100/1000 Mbps 以太网口 | | 配置与调试 | 一路 USB OTG 接口一路 JTAG 调试接口一路 UART RS232 DB9 串口启动模式配置开关 | | 电源与指示 | 电源开关复位开关电源指示灯编程指示灯 | | 外围设备 I/O 接口 | 支持 I2C 接口支持 SPI 接口支持 SDIO 接口支持 CAN 接口支持 UART 接口 | | 功能模块 | | | 传感器模块 | 该模块包含如下传感器:光强度传感器(测量范围 1-70000lx,精度 1lx)数字温度传感器(测量范围 -55℃~+125℃,测量精度低至 0.0625℃)温湿度传感器(测湿度范围 20-90%RH 精度 ±5%RH,测温范围 0-50℃ ,精度 ±2℃ )脉冲测湿度传感器(测量范围 20…95%RH 精度 ±5%RH) | | 模数转换模块 | 该模块包含:12 位精度内部 ADC 测量范围 0-1V,测量精度 244uv 一路 PT100 湿度采集模块,采集范围-200℃-660℃ 一路滑动变阻器电压采集模块,采集范围 0-2.5v | | 键盘字符模块 | 该模块包含如下:OLED 显示屏(分辨率 128 x 32,0.91 寸)4*4 矩阵键盘 1 个 4 位数码管 7 段数码管 | | 通用接口模块 | 该模块包含如下:4 个 LED4 个拨码开关 4 个按键 1 个蜂鸣器 | | 摄像头模块 | 30 万 CMOS 摄像头,最大分辨率 1,600 x 1,200 pixels,支持 RawRGB、RGB(GBR4:2:2、565/555/444)、YUV(4:2:2)和 YCbCr(4:2:2)输出格式 | | 电容触摸显示屏模块 | 24 位 7 寸 LCD 显示屏,分辨率 800*480 电容触摸屏 | | 通信模块 | 该模块包含如下通信模块:CAN 通信接口,支持 ISO 11898 -1,传输速度高达 1 Mb/sRS232 DB9 串口通讯接口蓝牙模块,支持蓝牙 3.0 / 4.0+ EDR ,支持蓝牙 4.0 BLE 通讯协议与 3.0 SPP 串行通讯协议 | | 电机模块 | 该模块包含如下:板载电机驱动电路,预留了接口,方便外接其它电机模块一个直流电机带红外测速模块 | | 面包板模块 | 将 Zynq 重要的资源管脚引到面板上,方便用户做实验 | | 多路开关模块 | 12 路 LED12 路拨码开关 | | WIFI 模块 | 支持 USB 接口网络标准:IEEE 802.11n,IEEE 802.11 传输速率:300Mbps 频率范围:单频(2.4-2.4835G) | | 无线传感器传输模块 | 支持 Zigbee 协议栈基于 IEEE802.15.4 标准的低功耗[局域网](http://baike.haosou.com/doc/3165868.html)协议支持温湿度、光强度、压强等传感器 | | 串口模块 | 支持 USB 接口支持 RS232 DB9 接口 | 表 1:Castwise-Z7 硬件平台技术参数 (3)Zigbee 协调器/控制器 负责 Zigbee 数据采集设备之前的数据传输,通过 Zigbee 无线网络方式。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/b552d9b47121c935500dae8fe1b200ba.writebug) 图:Zigbee 无线协调器/控制器 (4)Zigbee 温湿度仪 采集温湿度数据,并通过 Zigbee 无线网络方式传输。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/0aa9471782af83bd0d66304eef916e64.writebug) 图:Zigbee 温湿度仪 (5)Zigbee 风速仪 采集风速数据,并通过 Zigbee 无线网络方式传输。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/808899869af0a405f43a96601f98c368.writebug) 图:Zigbee 风速仪 (6)Zigbee 风向仪 采集风向数据,并通过 Zigbee 无线网络方式传输。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/6c1ba32a8860b6485e36d4d6c91c2881.writebug) 图:Zigbee ## 6 程序主要系统开发 ### 6.1 系统框架 智能数据采集系统的系统框架共划分为三个层次,从上至下分别为:Web 应用层、中间件层和数据采集层,系统框图如下: ![](https://www.writebug.com/myres/static/uploads/2022/1/6/73a57c530415a12b2ba7a6e2b9e52c96.writebug) 图:智能数据采集系统-系统框架 ### 6.2 Web 应用层设计 Web 应用层的主要任务是响应客户端浏览器发送过来的 HTTP 和 CGI 请求;提交从中间件层所获取的设备层的传感器采集数据;提供用户登陆、用户注册、设备操作、视频监控、条码操作、系统设置等界面;将用户信息和系统配置写入数据库等。网页前端层是直接与用户交互的一层。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/4f05e13bd562369a85dd63fd294b67af.writebug) 图:Web 应用层-系统架构 ### 6.3 中控服务系统设计 中间件层,即中控服务系统层。包括 Appweb 服务器、CGI 命令控制器和命令解析服务器。其主要任务是解析 Web 应用层发送过来操作命令,并传递给 Zigbee 网络层;从网络层获取设备层采集的数据,打包成 JSON 格式的字符串,实现对设备层采集数据的处理,并按应用层兼容的格式进行打包,然后返回给 Web 应用层显示。 Appweb 是一个嵌入式 HTTP Web 服务器,它可以直接集成到客户的应用和嵌入式设备上,便于开发和部署基于 Web 的应用程序和设备。本项目中的 Web 应用层就是基于 Appweb 服务器运行的网页前端应用。 CGI 命令控制器的作用是响应客户端浏览器发送过来的 CGI 命令请求,解析命令请求,打包成操作数据包,并把它加入共享内存队列,便于命令解析服务器使用。 命令解析服务器从共享内存队列中获取操作数据包并解析成数据采集层能够识别的格式,发送至串口,与数据采集层交互通讯。 视频监控模块直接采用视频播放插件与 Web 页面交互,即在客户端浏览器上安装 VLC Media Player 播放器插件后,在 Web 应用层的视频监控页面上直接播放视频。 系统登陆、用户注册和系统设置这 3 个模块分别对应相应的中间件软件,且底层采用 SQLite 嵌入式数据库作为存储机制,实现完整的系统交互。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/d352b2ea6557cc7814067a0a8bd96eba.writebug) 图:中控服务系统--系统框图 ### 6.4 数据采集系统设计 数据采集层包括由 Zigbee 协调器和 Zigbee 控制器组成的无线网络和嵌入在 Zigbee 数据采集设备中的智能传感器共同组成。每个 Zigbee 控制器对应一个或一组传感器设备。 Zigbee 协调器作为无线网络中的路由器,它上层对接中控服务系统,从串口接收中控发来的命令并广播发送至 Zigbee 网络,使设备节点可以接收命令;另一方面,从 Zigbee 网络接收设备节点返回的操作结果数据,并通过串口回送给中控服务系统。 Zigbee 控制器监听网络上的命令请求,并根据设备节点号匹配属于自己的操作请求,并根据命令执行对应的设备操作:数据采集、设备重启、检测设备状态等,然后获取智能传感器的返回数据或设备状态,并再次通过 Zigbee 网络回送给协调器。 ![](https://www.writebug.com/myres/static/uploads/2022/1/6/6bdd920ae6f5901407de08b3858ff5ae.writebug) 图:数据采集系统--系统框图 ## 7 系统出错处理设计 智能数据采集系统中设置了一些常见错误现象和其处理方式,如下表所示: | 错误类型 | 错误现象 | 处理 | | ---------- | ---------------------- | -------------------- | | 客户端问题 | 浏览器无法正确加载网页 | 更换兼容的浏览器版本 | | 软件问题 | 浏览器无法加载更新数据 | 自动刷新处理 | | 软件问题 | 监控视频无法播放 | 播放窗口显示黑色 | | 设备错误 | 设备操作异常/失效 | 提示设备操作失败 | 表 1:出错处理设计 ## 8 项目总结 《智慧校园仿真应用系统》项目运行在 Linux 系统中,所以在硬件方面需要底层硬件板卡的支持,在硬件板卡中需求配置网口,USB 接口,音频接口等外部接口设备。并且在其中还的配有专门的温度,湿度,风速、风向等传感器硬件设备。在软件方面,需要对 Linux 系统进行定制移植。在 Linux 系统中需要移植小型的 Web 服务器,开发 Web 前端应用层。