【Python原创毕设|课设】基于Python Flask空气质量实时检测预警可视化系统-含硬件-文末附下载方式,原创项目其他均为抄袭
基于Python Flask空气质量实时检测预警可视化系统-含硬件-(获取方式访问文末官网)
一、项目简介
这个基于Python开发的空气质量实时检测预警可视化系统,采用了serial技术实时采集COM口传感器数据,为用户提供精准的空气质量监测服务,其传感器(两款仅外观不同)如下所示。
系统通过Echarts实现数据可视化,用户可以直观地查看多种空气指标的动态变化,包括二氧化碳浓度、挥发性有机化合物(TVOC)浓度、PM2.5和PM10颗粒物浓度、温度、湿度等。同时,该系统还展示了数据总计、综合实时数据数值及各项指标的分布情况,如CO2、TVOC、PM2.5、PM10等,帮助用户全方位了解当前的空气状况。
系统不仅注重实时监测,还设有后台管理功能,支持用户登录、注册以及公告、版本、数据管理等功能。预警设置模块可以根据用户自定义的标准触发预警记录,确保在空气质量出现异常时,及时发出警报,为用户提供安全保障。该系统特别适用于学校、企业、公共场所等需要密切关注空气质量的场景,结合当前人们对健康与环境的高度关注,具备重要的应用前景和社会价值。
二、功能简介
1. 实时数据采集
2. 数据处理
3. 数据可视化
4. 预警功能
5. 用户管理
6. 公告管理
7. 版本管理
8. 数据管理
9. 预警记录
三、开发环境
开发环境 | 版本/工具 |
---|---|
PYTHON | 3.10. 9 |
开发工具 | PyCharm |
操作系统 | Windows 10 |
内存要求 | 8GB 以上 |
浏览器 | Firefox (推荐)、Google Chrome (推荐)、Edge |
数据库 | MySQL 8.0 (推荐) |
数据库工具 | Navicat Premium 15 (推荐) |
项目框架 | FLASK |
四、项目技术
Python: 作为开发语言,用于编写后端逻辑和数据处理。
Flask: Python的Web框架,用于搭建后端数据接口和处理HTTP请求。
PyMySQL: 用于Python与MySQL数据库的交互,实现数据的存储和读取。
Echarts: JavaScript的数据可视化库,将数据转化为图表形式展示给用户。
LAYUI: 轻量级前端UI框架,用于构建用户友好的交互界面。
JavaScript: 用于实现前端交互和处理用户输入。
HTML和CSS: 用于构建前端界面和样式设计。
pandas和numpy: Python的数据处理和分析。
AJAX: 用于实现前后端数据交互,异步请求后端数据接口。
MySQL: 数据库管理系统,用于持久化数据。
五、运行截图
可视化页面
登录页面
注册页面
后台首页
用户管理
公告管理
版本管理
空气数据管理模块页面
预警设置
预警记录
六、数据库设计
表名:alert_records
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | 主键 |
data_id | int | None | YES | None | 预警数据ID |
content | varchar | 255 | YES | None | 预警内容 |
parameter | varchar | 50 | YES | None | 预警类型 |
parameter_name | varchar | 255 | YES | None | 预警名称 |
warn_time | datetime | None | YES | None | 预警时间 |
status | int | None | YES | None | 0未处理,1已处理 |
表名:alert_rules
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | 主键 |
parameter | varchar | 50 | YES | None | 预警编码 |
parameter_name | varchar | 50 | YES | None | 预警类型 |
min | float | None | YES | None | 预警低值 |
max | float | None | YES | None | 预警高值 |
表名:environment_data
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | 主键,自增ID |
device_id | varchar | 50 | NO | None | 设备编号 |
co2 | int | None | NO | None | CO2浓度值 (PPM) |
ch2o | int | None | NO | None | 甲醛浓度值 (µg) |
tvoc | int | None | NO | None | TVOC浓度值 (µg) |
pm25 | int | None | NO | None | PM2.5浓度值 (µg) |
pm10 | int | None | NO | None | PM10浓度值 (µg) |
temp | float | None | NO | None | 温度 (℃) |
hum | float | None | NO | None | 湿度 (%RH) |
created_time | datetime | None | YES | None | 创建时间 |
表名:notice
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | 主键 |
title | varchar | 255 | YES | None | 公告标题 |
content | longtext | 4294967295 | YES | None | 公告内容 |
user_name | varchar | 255 | YES | None | 发布人 |
create_time | datetime | None | YES | None | 发布时间 |
表名:sys_version
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | 主键 |
sys_name | varchar | 255 | YES | None | 名称 |
sys_version | varchar | 255 | YES | None | 版本 |
表名:user
字段名 | 数据类型 | 长度 | 允许为空 | 默认值 | 描述 |
---|---|---|---|---|---|
id | int | None | NO | None | |
name | varchar | 255 | YES | None | 用户名称(供应商名称) |
account | varchar | 255 | YES | None | 用户账号 |
password | varchar | 255 | YES | None | 用户密码 |
company | varchar | 255 | YES | None | 企业名称 |
varchar | 255 | YES | None | 邮箱 | |
type | int | None | YES | None | 0管理员,1普通用户 |
status | int | None | YES | None | 0禁用1启用 |
七、功能实现
数据采集核心代码
def main():
port = 'COM12' # 确保这里是正确的端口号
baudrate = 9600 # 波特率
timeout = 1 # 读取超时时间(秒)
try:
# 打开串口
ser = serial.Serial(port, baudrate, timeout=timeout)
except serial.SerialException as e:
print(f"无法打开端口 {port}: {e}")
return
except PermissionError as e:
print(f"没有权限访问端口 {port}: {e}")
return
创建数据库连接核心代码
def connect(self):
self.conn = pymysql.connect(
host=DB_CONFIG["host"],
port=DB_CONFIG["port"],
user=DB_CONFIG["user"],
passwd=DB_CONFIG["passwd"],
db=DB_CONFIG["db"],
charset=DB_CONFIG["charset"],
cursorclass=pymysql.cursors.DictCursor)
self.cursor = self.conn.cursor()
分页环境监测数据数据核心代码
# 分页环境监测数据数据
def select_environment_data_list(page, limit, where):
page, limit, where = get_page_start(int(page), int(limit), where)
params_sql = get_search_params(where)
data_sql = "SELECT * FROM `environment_data` WHERE 1=1 " + params_sql + " ORDER BY id DESC LIMIT %s,%s"
count_sql = "SELECT COUNT(id) AS i FROM `environment_data` WHERE 1=1 " + params_sql
sqlManager = SQLManager()
data = sqlManager.get_list(data_sql, (page, limit)) # 获取分页数据
count = sqlManager.get_one(count_sql)['i'] # 获取数据总数
model = get_class_list(data, environment_data)
page_result = PageData(count, model)
return page_result
八、源码获取
源码、安装教程文档、项目简介文档以及其它相关文档已经上传到是云猿实战官网,可以通过下面官网进行获取项目!
作者:是云小糊糊