Files
IOT_SIM/samples/p8-t3-环境采集与分析/Environment.cs
T
xuyueandClaude Opus 5.5 65a1b3a81e
CI/CD / test (push) Canceled after 0s
CI/CD / deploy (push) Canceled after 0s
项目 8 智慧校园管理平台:5 个任务的示例、自绘素材、WisdomCampus 数据库
- 示例 p8-t1…t5(代码逐个累加):主界面、校园环境界面、环境采集与分析(路灯手动 / 自动控制、
  LED 推送、自动推送火情、7 天温度图表)、校园安防(入侵提示、摄像机方向、拍照入库)、历史图片
  (按日期查询、左右切换),各有评分规则
- 按书补全参考工程里空着的"推送LED信息""自动控制",给"自动推送火情"绑定 CheckedChanged
  (书上第 23 步写成了 ch_autoLamp);任务 5 每次查询前清空 Keys
- 素材:项目 8 的 20 多张图片全部自绘,名字和尺寸与教材一致(project8.py 生成 SVG,
  build-gallery.sh 渲染成 PNG;源文件移到 svg/)
- 数据库 WisdomCampus 按教材的表结构建(EnvironmentData、SecurityData、Users),预置 7 天环境数据
- 测试:参考答案全部通过;没绑定"自动推送火情"、开灯换错背景图片时报出对应原因
- 文档:教材 8 个项目全部有示例,共 23 个

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 15:15:00 +08:00

280 lines
8.2 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DeviceCtrlLibrary;
using DeviceCtrlLibrary.Model;
using 智慧校园.SQLHelpers;
using System.Threading;
namespace 智慧校园
{
public partial class Environment : Form
{
public Environment()
{
InitializeComponent();
}
//用于各类耗时长的操作(SQL、数据采集、设备控制等)
Thread thread;
//用于异步通行
SynchronizationContext _main;
//结果模型
ADAM4017ResModel ResModel_4017;
ADAM4150ResModel ResModel_4150;
//设置自动控制路灯的光照值
double environmentLight, setLight;
//按钮状态标志
bool IsAuto_Lamp = false;
bool IsAuto_FireMsg = false;
bool IsLampOpen = false;
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void lb_return_Click(object sender, EventArgs e)
{
this.Close();
}
private void Environment_Load(object sender, EventArgs e)
{
try
{
//隐藏曲线图
chart1.Visible = false;
thread = new Thread(new ThreadStart(Tick));
_main = WindowsFormsSynchronizationContext.Current;
thread.Start();
}
catch
{
}
}
private void Tick()
{
try
{
while (true)
{
//数据采集
ResModel_4017 = DeviceCtrlHelper.adam4017Helper.SetData();
Thread.Sleep(500);
ResModel_4150 = DeviceCtrlHelper.adam4150Helper.SetData();
//UI显示数据
_main.Send(_ =>
{
try //防止无数据出错
{
txt_fire.Text = (ResModel_4150.fireValue ? "发生火情" : "正常");
txt_smoke.Text = (ResModel_4150.smokeValue ? "发生烟情" : "正常");
txt_light.Text = ResModel_4017.lightValue;
txt_temperature.Text = ResModel_4017.temperatureValue;
txt_humidity.Text = ResModel_4017.humidityValue;
}
catch { }
}, null);
//自动路灯控制
double.TryParse(ResModel_4017.lightValue, out environmentLight);
if (IsAuto_Lamp && environmentLight < setLight)
{
LampOnOff(1, true);
}
else if (IsAuto_Lamp && !(environmentLight < setLight))
{
LampOnOff(1, false);
}
//自动推送火情LED信息控制
if (IsAuto_FireMsg)
{
if (ResModel_4150.fireValue && ResModel_4150.smokeValue)
DeviceCtrlHelper.ledHelper.SendLedString("发生严重火灾 ");
else if (ResModel_4150.fireValue)
DeviceCtrlHelper.ledHelper.SendLedString("发现火情 ");
else if (ResModel_4150.smokeValue)
DeviceCtrlHelper.ledHelper.SendLedString("发现烟情 ");
}
//执行数据上传
SQLBLL.EnvironmentUpData(ResModel_4150.fireValue, ResModel_4150.smokeValue, ResModel_4017.lightValue, ResModel_4017.temperatureValue, ResModel_4017.humidityValue);
Thread.Sleep(5000);
}
}
catch
{
}
}
private void LampOnOff(int RelayNum, bool IsOpen)
{
try
{
//开启路灯
DeviceCtrlHelper.zigBeeHelper.OnOff(RelayNum, IsOpen);
//切换UI背景
_main.Send(_ =>
{
if (IsOpen)
{
pic_lampOpen.BackgroundImage = Properties.Resources.switch_on;
panel_bg.BackgroundImage = Properties.Resources.day_01;
}
else
{
panel_bg.BackgroundImage = Properties.Resources.day_02;
pic_lampOpen.BackgroundImage = Properties.Resources.switch_off;
}
}, null);
}
catch
{
}
}
private void Environment_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
thread.Suspend();
thread = null;
}
catch
{
}
}
private void btn_dataAnalyse_Click(object sender, EventArgs e)
{
try
{
if (btn_dataAnalyse.Text.Equals("数据分析"))
{
//绑定图标数据
chart1.DataSource = SQLBLL.GetEnvironmentGraphData();
//更新图标数据
chart1.DataBind();
chart1.Visible = true;
btn_dataAnalyse.Text = "关闭图表";
}
else if (btn_dataAnalyse.Text.Equals("关闭图表"))
{
chart1.Visible = false;
btn_dataAnalyse.Text = "数据分析";
}
}
catch
{
}
}
private void pic_lampOpen_Click(object sender, EventArgs e)
{
//手动路灯控制
try
{
if (!IsLampOpen)
{
LampOnOff(1, true);
}
else
{
LampOnOff(1, false);
}
IsLampOpen = !IsLampOpen;
}
catch
{
}
}
private void btn_ledEnvironment1_Click(object sender, EventArgs e)
{
try
{
//推送LED天气信息
if (ResModel_4017 != null && ResModel_4150 != null)
DeviceCtrlHelper.ledHelper.SendLedString("当前温度:" + ResModel_4017.temperatureValue + "℃ 湿度:" + ResModel_4017.humidityValue + "%");
}
catch
{
}
}
private void btn_ledEnvironment2_Click(object sender, EventArgs e)
{
try
{
//推送LED天气信息
if (ResModel_4017 != null && ResModel_4150 != null)
DeviceCtrlHelper.ledHelper.SendLedString("当前温度:" + ResModel_4017.temperatureValue + "℃ 湿度:" + ResModel_4017.humidityValue + "%");
}
catch
{
}
}
private void panel3_Paint(object sender, PaintEventArgs e)
{
}
private void txt_autoLight_TextChanged(object sender, EventArgs e)
{
try
{
//获取光照比较值
double.TryParse(txt_autoLight.Text,out setLight);
}
catch
{
}
}
private void btn_ledSendMsg_Click(object sender, EventArgs e)
{
try
{
//推送LED信息
DeviceCtrlHelper.ledHelper.SendLedString(txt_ledMsg.Text);
}
catch
{
}
}
private void ch_autoLamp_CheckedChanged(object sender, EventArgs e)
{
//自动控制路灯
IsAuto_Lamp = ch_autoLamp.Checked;
}
private void ch_autoLedFire_CheckedChanged(object sender, EventArgs e)
{
//自动推送火情
IsAuto_FireMsg = ch_autoLedFire.Checked;
}
}
}