본문 바로가기

컴퓨터 프로그래밍/라즈베리파이

라즈베리파이 2 DS18B20 온도센서 PHP 프로그램, MySQL DB 저장

라즈베리파이 2 에서 온도센서를 PHP로 읽어 들이고, Mysql DB에 저장하는 법에 대해서 배우겠다.

이강좌를 이해하기 위해서는 앞의 강좌를 먼저 읽어 봐야한다.

그리고 , 당연히 Apach+ PHP + Mysql 환경 이어야 한다.

그런 본론으로 들어 가겠다.

 

아래는 먼저 읽어야하는 강좌 리스트 이다.

  1. 2015/05/13 라즈베리파이 2에서 APM(Apache,PHP,Mysql) 구축및 환경설정
  2. 2015/05/09 아두이노 라즈베리파이 온도센서 방수형 DS18B20 사용법
  3. 2015/05/09 라즈베리파이 아두이노 온도센서 방수형 DS18b20 상품 설명과 구매

 

일단 온도센서를 읽어들이는 출력하는 프로그램은 다음과 같다.

DB18B20.php

<?php
//리눅스 명령어를 cat을 실행해서 온도센서의 데이터를 읽어 들인다.
$re=exec("cat /sys/bus/w1/drivers/w1_slave_driver/28-*/w1_slave");
//데이터중 온도값의 값을 추출하기위해서 "t="기준으로 배열로 분리한다.
$tem_c=explode("t=",$re);
//현재 시간 과 온도값을 천으로 나누고, 소숫점 둘째자리에서 반올림 해서 출력한다.
echo ( "Time = ".date("Y-m-d H:i:s")." , Temperature =  ".round($tem_c[1]/1000,2)." C ");
?>


 

해당 프로그램을 웹에서 호출하면,

 

 

 

 

이 얼마나 간결하고 아름다운가? 감탄사가  헐~~~ 하고 나온다.

 

C, perl,자바(JSP), 파이썬 너희들 대가리 박고  웹에서는 덤비지 말라는 애기가 절로 나온다.

느들 주석빼고 , 3줄로 웹에 온도 센서값 뿌려줄수 있어?

 

C,자바 개발자가 돌 던지는 소리가 들린다. 웹 전용 랭귀지가 어디서 덤비냐?

이런 애비애미 못 알아 보는 놈 , 웃자고 하는 애기니 열받지 마시기를 ㅎㅎ

 

그럼 디비에 저장하는 법을 배워보겠다.

 

일단 Mysql 에 저장한 테이블을 생성하자.

--------- 테이블 생성 -----------


CREATE TABLE IF NOT EXISTS `temperature` (
  `no` int(10) NOT NULL AUTO_INCREMENT COMMENT '번호',
  `time_ymd` char(8) NOT NULL COMMENT '날짜 ',
  `time_his` char(6) NOT NULL COMMENT '시간',
  `temperature` float NOT NULL COMMENT '온도',
  `regday` datetime NOT NULL COMMENT '저장시간',
  PRIMARY KEY (`no`),
  KEY `time_ymd` (`time_ymd`,`time_his`,`regday`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;


--------- 테이블 생성 -----------

 

--------------- php 프로그램 ------------

<?php
// mysql 접속 계정 정보
$mysql_host = 'localhost';
$mysql_user = 'pi';
$mysql_password = 'XXXXXX';
$mysql_db = 'pi';
// 접속
$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");
 
//리눅스 명령어를 cat을 실행해서 온도센서의 데이터를 읽어 들인다.
$re=exec("cat /sys/bus/w1/drivers/w1_slave_driver/28-*/w1_slave");
//데이터중 온도값의 값을 추출하기위해서 "t="기준으로 배열로 분리한다.
$tem_c=explode("t=",$re);
//온도
$data['temp_c']=round($tem_c[1]/1000,2);
//날짜
$data['temp_ymd']=date("Ymd");
//시간
$data['temp_his']=date("His");
 
//insert sql 스트링 만들기 
$query = "INSERT INTO `temperature`(`time_ymd`, `time_his`, `temperature`, `regday`) ";
$query .= "VALUES ('".$data['temp_ymd']."','".$data['temp_his']."', '".$data['temp_c']."', now() )";
//테스트를 위해서 쿼리출력
echo $query;
//쿼리 실행
$res = mysql_query($query, $conn);
?>

웹브라우저로 실행,

 

 

 

 

실제 디비에 저장된 데이타를 phpmyadmin 에서 확인

 

 

 

다음 강좌에는 위의 프로그램을 일정시간 간격으로 자동으로 DB에 저장하고 그래프로 표현하는 법에 대해서 배워보겠다.