라즈베리파이 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에 저장하고 그래프로 표현하는 법에 대해서 배워보겠다.

 

  1. BlogIcon 주호택 2015.05.24 21:54

    도움 많이 받았습니다!

    • Favicon of https://ilikesan.com BlogIcon 산좋아해 2015.05.26 10:20 신고

      반갑습니다. 공부하고 있는 내용을 정리하고 있는 중인데,
      주호택님에게 도움이 되었다니 기분 좋습니다.
      즐거운 하루 되세요.

  2. BlogIcon 정응재 2015.06.05 16:46

    정리 대단하시네요.. 정말 도움 많이 받았습니다.. 그런데 저는 온도센서를 라즈베리파이에 직접 연결하지 않고
    릴레이모듈에 연결한 뒤 블루투스 이용해 파이로 값을 받으려고하는데.. 아무리 찾아봐도 안나오네요..
    블루투스모듈 사용하는 방법좀 여쭤봐도될까요??

    • Favicon of https://ilikesan.com BlogIcon 산좋아해 2015.06.08 17:07 신고

      공부하면서 메모식으로 정리하고 있는데,
      칭찬도 해주시고, 더 정성을 들여야겠네요.
      릴레이모듈을 전원을 제어하는 것인데 어떻게 연결되지는 모르겠네요.
      릴레이모듈이 아니고 아두이노 아닌가요?
      아래의 동영상 강좌 추천합니다.
      https://www.youtube.com/watch?v=0mnp7m-v_30

  3. 김유리 2015.06.15 16:35

    안녕하세요 글 잘읽었습니다! 저도 이와 관련된 프로젝트를 진행하고 있는 학생인데요~ 지그비를 통해 받아들여온 데이터를 db에 저장하려면 어떤 방법을 써야하는지 혹시 아시나요?~ㅎㅎ

    • Favicon of https://ilikesan.com BlogIcon 산좋아해 2015.06.16 12:03 신고

      지그비를 통해 받아들여온 데이터를 바로 DB에 저장은 안 될것같습니다.
      아두이노, 라즈베리 파이와 통신해서 데이터 값을 넘기고,
      넘어온 데이타를 DB에 저장해야 할것 같습니다.
      아두이노는 자체에 DB 서버 설치가 불가하니 외부에 DB서버에 두어 데이타값을 전송해서 저장하면 되고요.
      라즈베리는 DB서버를 세팅해서 저장하시면 됩니다.
      아래의 url을 참고하세요.
      열심히 공부하셔서 프로젝트 잘 마무리하시기 빌겠습니다.
      https://devworksinprogress.wordpress.com/2011/06/18/project-zigbee-temperature-sensor/
      http://blog.killdoslab.com/220233558357?Redirect=Log&from=postView

  4. 김유리 2015.06.18 19:27

    자세한 답변 정말 감사합니다!!!ㅎㅎ 다행히도 잘 해결되었습니다! 좋은 하루되세요~ㅎㅎ

  5. BlogIcon 김병수 2015.10.29 15:22

    라즈베리파이 초보입니다. 이번에 php를 통해 외부 db와 연동하려합니다.
    라즈베리파이로 읽어온 데이타를 위에 php 파일에 localhost부분을 외부 db서버에 ip주소로 바꿔주면 외부 디비도 갱신할 수 있을까요?

라즈베리파이 에서 APM(Apache,PHP,Mysql) 환경 구축에 대해서 다루겠다.

필자는 다양한 환경에서 웹개발을 해 보았다.

 

웹 랭퀴지 선택에서 각각의 장단점이 있다.

리눅스 환경이므로 PHP, JSP 을 선택하라고 애기하고 싶다.

C에 익숙한 분들은 PHP,  자바에 익숙한 분은 JSP 환경의 tomcat을 선택하시면 된다.

디비는 mysql 을 추천한다 가볍고 빠르다. 무료이다. 그리고 한글화된 문서가 있다.

 

컴파일 해서 설치할수도 있겠지만,

간단하게 설치 할수 있는 방법으로 진행하겠다.

 

아파치 서버를 설치합니다

$ sudo apt-get install apache2

 

MySQL Database를 설치합니다.

$ sudo apt-get install mysql-server mysql-client


 PHP를 설치하자

$ sudo apt-get install php5 php5-common libapache2-mod-php5


 

 

 

아파치 DocumentRoot 는 아래와 같이변경하시면된다.

 

pi 계정으로 로그인해서. 아파치 DocumentRoot 로 사할  폴더를 만들고,

mkdir  /home/pi/www

 

해당 폴더를 권한를 755로 변경한다.

chmod  755 /home/pi/www

 

그리고 index.php 파일을 만들고, 아래와 같은 내용을 생성한다.

vi /home/pi/www/index.php

--------- index.php 인용 ----

<?
phpinfo();
?>

--------- index.php 인용 ----


아래와 같은 방법으로,아파치 설정을 변경해서 /var/www 에서 /home/pi/www로 변경하자.


root@raspberrypi:~# cd /etc/apache2/sites-enabled
root@raspberrypi:/etc/apache2/sites-enabled# ls
000-default
root@raspberrypi:/etc/apache2/sites-enabled# vi 000-default

----------- 000-default 파일 변경 ----------

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /home/pi/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/pi/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

.................

..................
----------- 000-default 파일 변경 ----------


 

 

아파치 설정이 끝났으면, 아래의 명령어로 아파치를 리스타트하자.

sudo /etc/init.d/apache2 restart

 

내부아이피를 이용해서 웹브라우저로 접속하면 아래 화면과 같이 나오면 , 정상적으로 설치된거다.

사용자에 따라 내부아이피 변경는 변경될수 있고,

필자는 고정아이피를 설정했다. 아래 링크 참고.


라즈베리파이 2 무선랜 아이피 고정하기

http://ilikesan.com/entry/라즈베리파이-2-무선랜-아이피-고정하기


iptime 할당 된 내부 아이피 알아내기.

http://ilikesan.com/entry/iptime-할당-된-내부-아이피-알아내기


 

 

 

See you Again ^^ 

 

 

 

 

  1. Ju 2015.10.30 01:52

    똑같이 따라하고 있는데 한가지 의문이 들어서 질문드립니다.
    php 설치하는 명령에서 보시면은 첨부된 스크린샷에도 그렇고 E: php-common 패키지를 찾을수 없다고 적혀있습니다... 즉 설치가 전혀 진행이 안되는데요... 명령어에 혹 잘못 쓰여진게 아닌지 궁금합니다.

  2. aaa 2015.12.10 22:53

    똑같이 해도 안됨....

  3. 오타낫네 2016.01.07 22:06

    php-common 이 아니라 php5-common 입니다 ^^

    • Favicon of https://ilikesan.com BlogIcon 산좋아해 2016.01.08 18:40 신고

      감사합니다. 수정해 놓았습니다.
      설치시 putty에서 실행 시켜보고, 명령어 복사해서 넣었는데,
      다시 한번 확인해 봐야겠네요.

  4. Favicon of https://nhs0912.tistory.com BlogIcon nhs0912 2016.01.16 15:08 신고

    라즈베리 파이 2에 오라클 DB 도 가능할까요??

  5. 질문드려요 2017.03.14 19:39

    Forbidden
    You don't have permission to access / on this server.
    오류가 발생합니다.
    모두 설치했는데 달랐던부분은
    <VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /home/pi/www 여기 수정하고,

    여기부턴 아래와같은 내용이 전혀없어 추가해줬습니다.
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    <Directory /home/pi/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    </Directory>

    저장후엔 리스타트도 했습니다.

+ Recent posts