본문 바로가기

C#

C# 개발 - 라즈베리 파이에서 온습도 데이터베이스 C# 차트로 표현 가능!

반응형

서동우(교육), [16.09.20 18:22]
# -*- coding:utf-8 -*-
import mysql.connector;
import Adafruit_DHT as Sensor
from datetime import datetime
import time
  
Maria = mysql.connector.connect(host="localhost", user="root", passwd="너의암호", database="mydb");
Cursor = Maria.cursor();
  
while True :
     Humi, Temp = Sensor.read_retry(Sensor.DHT11, 4)
     d = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
     Query = "INSERT INTO tblSensorDHT11 VALUES(%s,%s,%s)";
     Values = [
         (d,Humi,Temp)
      ];
     print(d,Humi,Temp)
     Cursor.executemany(Query,Values);
     Maria.commit();

이번에는 온습도 센서를 통해 온도 ,습도 데이터를 DB Table에 저장한 정보를 C#을 통해 그래프로 불러와 보겠다. 

 

VI 005_TEST_DHT111.PY 파일을 만들어 파일에 코딩을 해준다.

다시 파일을 PYTHON으로 실행해주면 위와 같이 습도와 온도가 출력된다

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private static string TName = "tblSensor_DHT11";
        private static string QueryLogin = "SERVER=192.168.0.164; DATABASE=mydb; UID=root; PASSWORD=1234";
        private static string QueryTable = "SELECT * FROM " + TName + " ORDER BY TIME DESC LIMIT " ;
        private string QueryTable5 = QueryTable + 20;
        private string QueryTable1 = QueryTable + 1;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataSet data = new DataSet();
            using (MySqlConnection connection = new MySqlConnection(QueryLogin))
            {
                MySqlDataAdapter dataAdapter = new MySqlDataAdapter(QueryTable5, connection);
                
                dataAdapter.Fill(data, TName);
            }
            List<int> TempData = new List<int>();
            List<int> HumiData = new List<int>();
            foreach (DataRow item in data.Tables[TName].Rows)
            {
                TempData.Add(Int32.Parse(item["TEMP"].ToString()));
                TempData.Add(Int32.Parse(item["HUMI"].ToString()));
            }
            //MessageBox.Show(TempData.Count.ToString());
            chart1.Series[0].Points.DataBindY(TempData);
            chart1.Series[1].Points.DataBindY(HumiData);

        }

        private void button2_Click(object sender, EventArgs e)
        {
            DataSet data = new DataSet();
            using (MySqlConnection connection = new MySqlConnection(QueryLogin))
            {
                MySqlDataAdapter dataAdapter = new MySqlDataAdapter(QueryTable1, connection);

                dataAdapter.Fill(data, TName);
            }
            DataRow temp = data.Tables[TName].Rows[0];
            chart1.Series[0].Points.Add(Int32.Parse(temp["TEMP"].ToString()));
            chart1.Series[1].Points.Add(Int32.Parse(temp["HUMI"].ToString()));
            if (chart1.Series[0].Points.Count>5)
            {
                chart1.Series[0].Points.RemoveAt(0);
                chart1.Series[1].Points.RemoveAt(0);

            }
        }
    }
}

 

C#에서 using 문을 사용하여 DB와 연결해 준다 .

 

연결해주면 

그래프를 통해 온도 습도 변화가 시각적으로 확인 가능하다.

 

아래는 강사님 코드

using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace WindowsFormsApp28
{
    public partial class Form1 : Form
    {
        private static string TName      = "tblSensorDHT11";
        private static string QueryLogin = "SERVER=192.168.0.172; DATABASE=mydb; UID=root; PASSWORD=####;";
        private static string QueryTable = "SELECT * FROM " + TName + " ORDER BY TIME DESC LIMIT ";
        private static string QueryTable12 = QueryTable + 12;
        private static string QueryTable1 = QueryTable + 1;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataSet aDataSet = new DataSet();
            using (MySqlConnection aMySqlConnection = new MySqlConnection(QueryLogin))
            {
                MySqlDataAdapter aMySqlDataAdapter = new MySqlDataAdapter(QueryTable12, aMySqlConnection);
                aMySqlDataAdapter.Fill(aDataSet, TName);
            }

            List<int> TempData = new List<int>();
            List<int> HumiData = new List<int>();
            foreach (DataRow Temp in aDataSet.Tables[TName].Rows)
            {
                TempData.Add(Int32.Parse(Temp["TEMP"].ToString()));
                HumiData.Add(Int32.Parse(Temp["HUMI"].ToString()));
            }
            //MessageBox.Show(TempData.Count.ToString());

            chart1.Series[0].Points.DataBindY(TempData);
            chart1.Series[1].Points.DataBindY(HumiData);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataSet aDataSet = new DataSet();
            using (MySqlConnection aMySqlConnection = new MySqlConnection(QueryLogin))
            {
                MySqlDataAdapter aMySqlDataAdapter = new MySqlDataAdapter(QueryTable1, aMySqlConnection);
                aMySqlDataAdapter.Fill(aDataSet, TName);
            }

            DataRow Temp = aDataSet.Tables[TName].Rows[0];
            chart1.Series[0].Points.Add(Int32.Parse(Temp["TEMP"].ToString()));
            chart1.Series[1].Points.Add(Int32.Parse(Temp["HUMI"].ToString()));

            if(chart1.Series[0].Points.Count > 12)
            {
                chart1.Series[0].Points.RemoveAt(0);
                chart1.Series[1].Points.RemoveAt(0);
            }
        }
    }
}
반응형