21物联网应用技术2班-陈林燕
目录
前言
模拟温室大棚控制系统是一种实时监测和控制温室环境的系统。该系统可以自动读取当前温度,并模拟灯光、喷灌和通风功能等,以确保温室环境处于最佳状态。本文将介绍该系统的需求和C#代码实现。
需求概述
该系统需要采用串口和上位机进行数据通信,以获取当前温度。此外,还需要模拟LED灯光、喷灌和通风功能,以保持温室环境的最佳状态。具体要求如下:
1. 通过串口和上位机进行数据通信
系统需要通过串口与上位机进行数据通信。上位机将向系统发送查询请求,系统将返回当前温度数据。
2. 读取环境温度数据
系统需要实时读取环境温度数据,以决定是否需要进行喷灌、通风或调整灯光。
3. 使用LED灯模拟温室采光
系统需要模拟LED灯光,以模拟温室采光。灯光的亮度应该可以根据环境温度进行调整。
4. 使用两个风扇模拟喷灌、通风功能
系统需要使用两个风扇来模拟喷灌和通风功能。当环境温度过高时,系统应该自动开启风扇进行通风。
使用示例
简单绘制一个界面。(此步骤略过)
实例化一个串口
SerialPort serialPort1 = new SerialPort();
封装打开、关闭串口的方法
private void UserOpenSerialPort()
{
//设置串口号
serialPort1.PortName = cmb_SerialPortName.Text;
//打开串口
serialPort1.Open();
//判断串口是否打开成功
if (serialPort1.IsOpen == true)
{
serial_open_state = true;
//修改打开按钮显示文本
btn_open.Text = "关闭串口";
//输出提示信息
//禁用控件
cmb_SerialPortName.Enabled = false;
comboBox2.Enabled = false;
}
else
{
//输入提示信息
}
}
private void UserCloseSerialPort()
{
//关闭串口
serialPort1.Close();
//更新串口状态
serial_open_state = false;
//修改打开按钮显示文本
btn_open.Text = "打开串口";
//输出提示信息
//使能控件
cmb_SerialPortName.Enabled = true;
comboBox2.Enabled = true;
}
向串口传递数据(上位机需要发送的数据,需要根协议而定,博主只是提供参考方式)
void SendDate(byte [] data)
{
serialPort1.Write(data, 0, data.Length);
}
串口回调事件
private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//Console.WriteLine("串口接收事件");
//获取接收缓冲区中的字节个数
int n = serialPort1.BytesToRead;
byte[] data = new byte[n];
if(n > 0)
{
serialPort1.Read(data, 0, n);
UserRecSerialPortData(data);
greenhouse.ReceivedRawData(data);
}
}
点击“打开串口”
private void btn_open_Click(object sender, EventArgs e)
{
if(serial_open_state ==true)
{
UserCloseSerialPort();
}
else
{
//打开串口
//判断串口号是否为空
if (cmb_SerialPortName.Text == "" || cmb_SerialPortName.Text == null)
{
MessageBox.Show("串口号为空");
return;
}
//设置串口号
serialPort1.PortName = cmb_SerialPortName.Text;
//设置波特率
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text );
UserOpenSerialPort();
}
}
开启/关闭 通风
private void button2_Click_1(object sender, EventArgs e)
{
if (button2.Text == "开启通风")
{
greenhouse.SetFanSate(6000);
button2.Text = "关闭通风";
}
else
{
greenhouse.SetFanSate(0);
button2.Text = "开启通风";
}
}
开启/关闭 采光
private void button3_Click_1(object sender, EventArgs e)
{
if (button3 .Text == "开启灯光")
{
greenhouse.SetLedSate(6000);
button3.Text = "关闭灯光";
}
else
{
greenhouse.SetLedSate(0);
button3.Text = "开启灯光";
}
}
读取温度
private void button4_Click(object sender, EventArgs e)
{
int temp = greenhouse.ReadTemperature();
label4.Text = temp.ToString() + "°C";
if (button4.Text == "开启读取温度")
{
greenhouse.ReadTemperature();
button4.Text = "关闭读取温度";
}
else
{
greenhouse.ReadTemperature();
button4.Text = "开启读取温度";
}
}