TABLE 생성
생성할 database는 temperature
생성할 table name 은 log
생성할 항목은 date, clock, temp, hum
mysql -u root -p
show databases;
create database temperature;
use temperature;
create table log(
recorddate datetime not null,
date int(10) not null,
clock int(10) not null,
temp decimal(10,1) not null,
hum decimal(10,1) not null,
PRIMARY KEY (`recorddate`)
);
show tables;
완성예제
crontab 을 사용해서 HTML 코드를 출력해서 10분마다 온습도를 표로 볼 수 있게 만드는거,
run.php
<?php
$temhum = escapeshellcmd('/var/www/html/temp_execute/temhum.py');
$temhumrun = shell_exec($temhum);
$data=explode("|", $temhumrun);
echo "<html><head><title>Temperature & Humidity ".date('d/m/Y H:i', time())."</title></head><body>";
echo "<table width='100%'><tr align='center'><td>";
echo "<div style='border:2px solid; border-radius:25px;box-shadow: 10px 10px 5px #888888;padding: 10px;width:400px;background-color:#EAEAEA;'>";
echo "<span style='font:Arial;font-size:20'>Temperature and Humidity monitoring</span><br \><br \>";
if($data[0] > 0) {
echo "<table padding='0'>";
echo "<tr><td colspan='4'><center>TEMPERATURE</center></td></tr>";
echo "<tr>";
echo "<td>0</td><td align='right' width='".($data[0]*3)."' bgcolor='green'><span style='color:white;'>$data[0] C</span></td>";
echo "<td width='".(300-$data[0]*3)."' bgcolor='grey'></td><td>100</td>";
echo "</tr></table>";
echo "<table padding='0'>";
echo "<tr><td colspan='4'><center>HUMIDITY</center></td></tr>";
echo "<tr>";
echo "<td>0</td><td align='right' width='".($data[1]*3)."' bgcolor='purple'><span style='color:white;'> $data[1] %</span></td>";
echo "<td width='".(300-$data[1]*3)."' bgcolor='grey'></td><td>100</td>";
echo "</tr>";
echo "<tr><td colspan='4'></td></tr>";
echo "<tr><td colspan='4'>";
echo "<center><span style='font:Arial;font-size:11'>".date('d/m/Y H:i', time())."</span></center>";
echo "</td></tr></table>";
} else
echo "No data. Please try again";
echo "<br \><span style='font:Arial;font-size:10'>HEESEOP.COM</span>";
echo "</div>";
echo "</td></tr></table";
echo "</body></html>"
?>
temhum.py
#!/usr/bin/env python
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola
import sys
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print '{0:0.1f}|{1:0.1f}'.format(temperature, humidity)
else:
print 'Failed to get a reading. Please try again!'
mysql.php 파일을 통해서 MySql로 저장
<?php
function connect_db()
{
$server="localhost";
$dbname="temperature";
$uid="root";
$pwd="password";
$conn = @mysql_connect($server, $uid, $pwd);
if(!$conn)
die("Unable to connect to the database.");
$select = mysql_select_db($dbname, $conn);
return($conn);
}
$conn=connect_db();
date_default_timezone_set("Asia/Seoul");
$tdate=date("Ymd");
$tclock=date("His");
$record=date("YmdHis");
$temhum = escapeshellcmd('/var/www/html/temp_execute/temhum.py');
$temhumrun = shell_exec($temhum);
$data=explode("|", $temhumrun);
if($data[0] > 0) {
$sql ="INSERT INTO log (date,clock,temp,hum,recorddate) VALUES ($tdate,$tclock,$data[0], $data[1],$record)";
$rs=mysql_query($sql, $conn);
if (!$rs) die("MYSQL: ".mysql_error($conn)."<br><b>$sql</b>");
} else
echo "No data. Please try again";
?>
Mysql에서 data불러와서 highchart graph 출력
//highchart 다운로드받아서 /hightchart 폴더에서 압축풀기
wget http://code.highcharts.com/zips/Highcharts-4.2.3.zip
<?php
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'PASSWORD';
$mysql_db = 'temperature';
// 접속
$conn = mysql_connect($mysql_host, $mysql_user, $mysql_password);
$dbconn = mysql_select_db($mysql_db, $conn);
// charset 설정, 설정하지 않으면 기본 mysql 설정으로 됨, 대체적으로 euc-kr를 많이 사용
//mysql_query("set names utf8");
$sql="
select * from (
SELECT DATE_FORMAT( recorddate, '%m-%d %HH' ) mdh , COUNT( * ) cnt, SUM( temp) , round(SUM( temp ) / COUNT( * ),2) atemper
FROM `log`
GROUP BY DATE_FORMAT( recorddate, '%Y%m%d%H' )
order by recorddate desc
limit 24
) t_a
order by t_a.mdh
";
//echo $sql;
$result = mysql_query($sql) ;
$str_mdh="";
$str_atemper="";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
// echo($row['mdh']."--------------".$row['atemper']."<br>");
$str_mdh .="'".$row['mdh']."',";
$str_atemper .="".$row['atemper'].",";
}
$str_mdh= substr($str_mdh,0,-1);
$str_atemper= substr($str_atemper,0,-1);
//echo $str_atemper;
?><!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temperature Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
${demo.css}
</style>
<script type="text/javascript">
$(function () {
$('#container').highcharts({
chart: {
type: 'line'
},
title: {
text: 'Average Temperature'
},
subtitle: {
text: 'Source: ilikesan.com'
},
xAxis: {
categories: [<?php echo $str_mdh?>]
},
yAxis: {
title: {
text: 'Temperature (°C)'
}
},
plotOptions: {
line: {
dataLabels: {
enabled: true
},
enableMouseTracking: false
}
},
series: [{
name: 'Home',
data: [<?php echo $str_atemper?>]
}
/*
, {
name: 'London',
data: [3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8]
}
*/
]
});
});
</script>
</head>
<body>
<script src="/highchart/js/highcharts.js"></script>
<script src="/highchart/js/modules/exporting.js"></script>
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
</body>
</html>
기타 소스코드
python 으로 tem = 온도, hum = 습도를 저장하게 만드는
import Adafruit_DHT as dht
import datetime
wtime = datetime.datetime.now()
h,t = dht.read_retry(dht.DHT22, 4)
tem= '{0:0.1f}'.format(t)
hum= '{1:0.1f}'.format(t,h)
print wtime,tem,hum, 'Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(t, h)
#$data=explode("|", $temhumrun); 를 써서 "|" 기준으로 data[0] 와 data[1] 를 분리
<?php
echo "It works, can you see it?\n";
$temhum = escapeshellcmd('/var/www/html/temp/temhum.py');
$temhumrun = shell_exec($temhum);
$data=explode("|", $temhumrun);
echo "Data zero is first and Data one is humidity\n";
echo $data[0];
echo $data[1];
?>
#!/usr/bin/env python
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola
import sys
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print '{0:0.1f}|{1:0.1f}'.format(temperature, humidity)
else:
print 'Failed to get a reading. Please try again!'
php를 사용해서 온도 습도 불러오기
http://stackoverflow.com/questions/32236588/passing-dht22-output-in-python-to-php
read_dht.py
#!/usr/bin/env python
# Copyright (c) 2014 Adafruit Industries
# Author: Tony DiCola
print 'Hello World...'
import sys
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
pin = 4
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print '{0:0.1f}|{1:0.1f}'.format(temperature, humidity)
else:
print 'Failed to get a reading. Please try again!'
get_readings.php
<?php
$command = escapeshellcmd('/var/www/cgi-bin/read_dht.py');
$output = shell_exec($command);
echo $output;
?>
- 위젯으로 그래프 만들어서 data 받아오게끔,
- 설정온도 이하로 떨어질 경우, 이상으로 올라갈 경우 알람
- 클릭시 CCTV앱으로 연결
- server는 무료서버에서 받아오는걸로, 1차는 RPi SD카드에, 2차로는 무료서버, 3차로 NAS FTP로 주기적으로 백업
온도 습도 출력
import Adafruit_DHT as dht
import datetime
wtime = datetime.datetime.now()
h,t = dht.read_retry(dht.DHT22, 4)
print wtime, 'Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(t, h)
crontab -e 실행해서 아래 문구 삽입하면 10분마다 temp.txt 파일이 웹페이지 temp.txt 파일로 ascending으로 저장됨
*/10 * * * * sudo python /var/www/temp.py >> /var/www/temp.txt
센서 테스트
Read from anj AM2302 Connected to GPIO#4
sudo /home/pi/Adafruit_Python_DHT/examples/AdafruitDHT.py 2302 4
GPIO Pin 활성화
/boot/config.txt 에 gpiopin 4번을 추가하도록 합니다.
$sudo nano /boot/config.txt
-> dtoverlay=w1-gpio,gpiopin=4
온도 센서를 기본 모듈에 추가합니다.
$sudo nano /etc/modules
-> w1-gpio
-> w1-therm
reboot을 통해 설정값을 적용합니다.
$sudo reboot
#!/usr/bin/python
import MySQLdb
import subprocess
import re
import sys
import time
import datetime
# Open database connection
conn = MySQLdb.connect("localhost","root","le_password","temperatures")
# Continuously append data
while(True):
date = time.strftime("%d/%m/%Y")
clock = time.strftime("%H:%M")
# Run the DHT program to get the humidity and temperature readings!
output = subprocess.check_output(["./DHT", "2302", "4"]);
#print output
matches = re.search("Temp =\s+([0-9.]+)", output)
if (not matches): time.sleep(0) continue
temp = float(matches.group(1))
# search for humidity printout
matches = re.search("Hum =\s+([0-9.]+)", output)
if (not matches): time.sleep(0) continue
humidity = float(matches.group(1))
# print "T %.1f " % temp
# print "H %.1f " % humidity
# MYSQL DATA Processing
c = conn.cursor()
c.execute("INSERT INTO data_th (date, clock, temp, hum) VALUES (%s, %s, %s, %s)",
(date, clock, temp, humidity))
#print "DB Loaded"
time.sleep(360)
참조
http://blog.naver.com/jsmjhd/220357189047
http://blog.naver.com/yeri_i/220358205538
http://blog.naver.com/kkasis/220357802502
https://www.youtube.com/watch?v=Rbl0yj9Q3Zs
'Computer > Linux' 카테고리의 다른 글
리눅스 패스워드 파일경로 및 숨김해제, 암호 확인 (0) | 2019.02.07 |
---|---|
워드프레스 설치하기 (0) | 2019.02.07 |
라즈베리파이 조도센서 설치 BH1750 (디지털출력가능) (1) | 2019.02.07 |
라즈베리파이 i2c 활성화 (0) | 2019.02.07 |
crontab (1) | 2019.02.07 |
VirtualHost 서브도메인 특정폴더로 연결 (0) | 2019.02.07 |
라즈베리파이 온도 습도 센서 DHT22 AM2302 연결 (0) | 2019.02.07 |
라즈베리 파이 웹서버 구성 APM 설치 + PhpMyAdmin + FTP (0) | 2019.02.07 |