C#

2020.09.17 - 온/습도 모듈 센서를 이용, 차트 작성

J_Bin 2020. 9. 17. 23:56

2020.09.16 - 003에 이어서

타이머 추가하기

 

-- 라즈베리파이 센서 모듈의 온도/습도 값을 테이블(tblSensorDHT11)에 저장

# -*- 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="1234", 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();

- C# 코드 (참조에 Mariasql.data.dll) 추가

using MySql.Data.MySqlClient;
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;

namespace _2020._09._16_003
{
    public partial class Form1 : Form
    {
        private static int DataSize = 300;
        private static string TName   = "tblSensorDHT11";
        private string QueryLogin     = "SERVER=192.168.0.165;DATABASE=mydb;UID=root;PASSWORD=1234;";
        private static string QueryTable = "SELECT * FROM " + TName + " ORDER BY TIME DESC LIMIT ";     // 최근 데이터를 읽을려면 DESC 
        private static string QueryTable12 = QueryTable + DataSize.ToString();
        private static string QueryTable1 = QueryTable + 1;
        private static bool TimerStatus;
        
        private void ReflashOn()
        {
            TimerStatus = true;
            timer1.Start();

            button2.Text = "그래프 정지";
        }
        private void ReflashOff()
        {
            TimerStatus = false;
            timer1.Stop();
            button2.Text = "그래프 시작";

        }
        private void ReflashToggle()
        {   // toggle : 한 번누르면 켜지고 한 번누르면 꺼지는 것(상황이 반대가 되는 것) - bool형 type

            if (false == TimerStatus)
            {
                ReflashOn();
            }
            else
            {
                ReflashOff();
            }

        }
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
            DataSet aDataSet = new DataSet();

            using (MySqlConnection aMySqlConnection = new MySqlConnection(QueryLogin))
            {
                aMySqlConnection.Open();

                //string strQuery = QueryTable;
                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(Convert.ToInt32(Temp["TEMP"].ToString()));
                HumiData.Add(Convert.ToInt32(Temp["HUMI"].ToString()));

            }
            //MessageBox.Show(TempData.Count.ToString());

            chart1.Series[0].Points.DataBindY(TempData);
            chart1.Series[1].Points.DataBindY(HumiData);
            // 범례 제목
            chart1.Series[0].LegendText = "온도";
            chart1.Series[1].LegendText = "습도";
            // 그래프 타이틀 제목
            chart1.Titles.Add("온/습도 그래프");


            ReflashOn();
        }

        private void DataUpdate()
        {
            DataSet aDataSet = new DataSet();

            using (MySqlConnection aMySqlConnection = new MySqlConnection(QueryLogin))
            {
                aMySqlConnection.Open();

                string strQuery = QueryTable;
                MySqlDataAdapter aMySqlDataAdapter = new MySqlDataAdapter(QueryTable1, aMySqlConnection);
                aMySqlDataAdapter.Fill(aDataSet, TName);

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

            if (chart1.Series[0].Points.Count > DataSize)
            {
                // DataSize의 개수가 초과되면 RemoveAt(0) = 제일 오래된 데이터를 제거한다.
                chart1.Series[0].Points.RemoveAt(0);
                chart1.Series[1].Points.RemoveAt(0);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            DataUpdate();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DataUpdate();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ReflashToggle();
        }
    }
}

 

- Form1.cs

'C#' 카테고리의 다른 글

Excel Export, Serch, Insert, Upload - 초간단 버전(MS-SQL)  (0) 2022.01.04
2020.09.16  (0) 2020.09.16
2020.09.15 - c# review  (0) 2020.09.15
2020.09.11 - 온/습도 측정하기 / 리눅스  (0) 2020.09.11
2020.09.10 -  (0) 2020.09.10