本系统实现了Zigbee组网监测,应用于变电站使用,多节点监测,上位机软件实时显示状态,同时检测到有人入侵就会报警。上位机将数据存到mysql数据库中。便于后续管理查询。Zigbee协调器连接上位机,Zigbee终端连接传感器。主控芯片采用CC2530
上位机采用VS2019进行编程开发,Zigbee代码采用IAR开发,硬件电路图采用AD17设计
上位机界面端设计
上位机界面效果截图如下:
实物图
硬件电路图如下:
IAR开发界面
上位机源代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;//添加对MySql.Data.MySqlClient的引用。
namespace Test
{
public partial class Form1 : Form
{
MySqlConnection conn;//定义数据库连接
MySqlCommand cmd = new MySqlCommand();//定义数据库执行操作类
MySqlDataAdapter adapter;
DateTime dtStart;//用于在批量添加测试时,记录添加数据库记录的开始时间
DateTime dtEnd;//用于在批量添加测试时,记录添加数据库记录的结束时间
private int sum = 0;//用于在批量添加测试时,记录要添加数据库记录的总数
string user_data_tebles_ck = "cktables";
string user_data_tebles_ck2 = "cktables2";
string user_data_tebles_log = "log";
string server_ip = "127.0.0.1";
string server_port = "3306";
string mysql_user = "root";
string mysql_pass = "1520747634@qq.com";
string mysql_dataname = "info";
// CREATE Database `spdata` DEFAULT CHARACTER SET utf8;
// CREATE Database `test` DEFAULT CHARACTER SET utf8;
//CREATE TABLE `user` (
// `id` int (11) NOT NULL AUTO_INCREMENT,
// `序列号` varchar(45) DEFAULT NULL,
// `商品名称` varchar(45) DEFAULT NULL,
// `商品价格` varchar(45) DEFAULT NULL,
// PRIMARY KEY(`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8;
//CREATE TABLE `log` (
// `id` int (11) NOT NULL AUTO_INCREMENT,
// `time` varchar(45) DEFAULT NULL,
// `states` varchar(45) DEFAULT NULL,
// PRIMARY KEY(`id`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8;
public Form1()
{
InitializeComponent();
}
private bool OpenConnection()
{
try
{
String connetStr = "server='" + server_ip + "';port='" + server_port + "';user='" + mysql_user + "';password='" + mysql_pass + "'; database='" + mysql_dataname + "';" + "charset=utf8"; ;
// server=127.0.0.1/localhost 代表本机,端口号port默认是3306可以不写
conn = new MySqlConnection(connetStr);
conn.Open();//打开通道,建立连接,可能出现异常,使用try catch语句
Console.WriteLine("连接正常!");
return true;
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("不能连接服务器!");
break;
case 1045:
MessageBox.Show("账号密码错误!");
break;
case 1046:
MessageBox.Show("数据库未选择");
break;
default:
MessageBox.Show("未知错误!", ex.Number.ToString() + ex);
break;
}
return false;
}
}
void ShowMsg(string str)
{
Console.Write(str + "\r\n");
Write_SaveTxtFile(str + "\r\n");
// txtMsg.Items.Add(str + "\r\n");
}
public void Write_SaveTxtFile(string txtStr) //保存文本文件 到软件运行目录下
{
string str = System.Windows.Forms.Application.StartupPath;//获取软件的运行目录
File.AppendAllText(@str + "\\" + "config.txt", txtStr); //在软件运行目录下保存log信息
}
void create_tables()
{
//CREATE TABLE `log` (
// `id` int (11) NOT NULL AUTO_INCREMENT,
// `time` varchar(45) DEFAULT NULL,
// `states` varchar(45) DEFAULT NULL,
// PRIMARY KEY(`id`)
//int primary key auto_increment,value 自动递增
string createStatement = "CREATE TABLE "+ user_data_tebles_ck+ "(id int primary key auto_increment,value VarChar(50),time VarChar(50) )";
string createStatement2 = "CREATE TABLE " + user_data_tebles_ck2 + "(id int primary key auto_increment,value VarChar(50),time VarChar(50) )";
String sqlConn = "server='" + server_ip + "';port='" + server_port + "';user='" +
mysql_user + "';password='" + mysql_pass + "'; database='" + mysql_dataname + "';" + "Charset=utf8;";
conn = new MySqlConnection(sqlConn);//
conn.Open();
try
{
// 建表
using (MySqlCommand cmd = new MySqlCommand(createStatement, conn))
{
cmd.ExecuteNonQuery();
}
using (MySqlCommand cmd = new MySqlCommand(createStatement2, conn))
{
cmd.ExecuteNonQuery();
}
// 改表或者增加行
//using (MySqlCommand cmd = new MySqlCommand(alterStatement, conn))
//{
// cmd.ExecuteNonQuery();
//}
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
Application.Exit();//直接推出
}
}
void init_mysql()
{
//
//mysql_dataname = "liuhao11";
String sqlConn = "server="+ server_ip+"; port="+ server_port+"; user="+ mysql_user+"; password=" + mysql_pass + ";";
MySqlConnection conn = new MySqlConnection(sqlConn);//
string sqlDB = "SELECT * FROM information_schema.SCHEMATA where SCHEMA_NAME='"+ mysql_dataname+"';";
MySqlDataAdapter adp = new MySqlDataAdapter(sqlDB, conn);
DataSet ds = new DataSet();
adp.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
MessageBox.Show("数据库初始化成功!");
}
else
{
conn.Open();
// MySqlCommand cmd = new MySqlCommand(string.Format("CREATE DATABASE IF NOT EXISTS '"+ mysql_dataname+"';"));
MySqlCommand cmd = new MySqlCommand("CREATE DATABASE "+ mysql_dataname+";", conn);
if (cmd.ExecuteNonQuery() > 0)
{
MessageBox.Show("数据库初始化成功!");
}
else {
MessageBox.Show("数据库初始化失败!");
}
create_tables();
//string createStatement = "CREATE TABLE "+ user_data_tebles_ck+" (Field1 VarChar(50), Field2 Integer)";
//string alterStatement = "ALTER TABLE Test1 ADD Field3 Boolean";
//try
//{
// // 建表
// using (MySqlCommand cmd1 = new MySqlCommand(createStatement, conn))
// {
// cmd1.ExecuteNonQuery();
// }
// // 改表或者增加行
// //using (MySqlCommand cmd = new MySqlCommand(alterStatement, conn))
// //{
// // cmd.ExecuteNonQuery();
// //}
//}
//catch (MySqlException ex)
//{
// MessageBox.Show(ex.Message);
// Application.Exit();//直接推出
//}
}
}
private void Form1_Load(object sender, EventArgs e)
{
string[] ports = System.IO.Ports.SerialPort.GetPortNames();//获取电脑上可用串口号
comboBox1.Items.AddRange(ports);//给comboBox1添加数据
comboBox1.SelectedIndex = comboBox1.Items.Count > 0 ? 0 : -1;//如果里面有数据,显示第0个
comboBox2.Text = "115200";/*默认波特率:115200*/
comboBox3.Text = "1";/*默认停止位:1*/
comboBox4.Text = "8";/*默认数据位:8*/
comboBox5.Text = "无";/*默认奇偶校验位:无*/
init_mysql();//初始化数据库
// radioButton1.ForeColor = Color.Red;
// radioButton1.Checked = true;
// dataGridView1.RowHeadersVisible = false; //隐藏首列
//String sqlConn