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 |