본문으로 바로가기

라즈베리파이 프로젝트 진행상황

category IT. 2016. 5. 1. 06:33



라즈베리파이 프로젝트 진행상황


안녕하세요. 왕발입니뎃 !  


라즈베리파이 프로젝트 진행상황에 대해서 포스팅할게요..


일단, 어제 MCP3208을 통해서 값을 받기 시작했고

MCP3208에서 받은 센서 값이 어느정도 변화가 있는가(?)에 대해서

집에서 직접 실험을 진행하였습니다.


그리고, 기존값과 변화값을 어느정도 파악하게 되었구요.


그렇게, MCP3208 센서 값을 SPI 통신을 통해서 받을 수 있게 되었으니

필요한것은 MYSQL에 저장시키는 것이였습니다.


구상은 이렇습니다.

라즈베리파이에서 센서값 받기 (MCP3208 - SPI통신)

받은 센서 값을 MYSQL에 저장.

저장 된 MYSQL가 화재설정 값보다 이상일 경우 화재로 인식 후 알람 전송.


하지만, 여기서 화재설정 값은 언제든지 지역과 상황에 따라 변할 수가 있었습니다.

집에서 측정할때와, 야외에서 측정할때, 실험실에서 측정할때가 다를 수 있기 때문입니다.

(조도 및 설치 위치에 따라 다를 수 있기 때문에)

그렇기 때문에, 화재설정 값을 손쉽게 변경할 수 있었어야 했기 때문에,

저는 MYSQL에 SETTING 값을 넣어서 MYSQL에서 SETTING 값을 불러와서 비교하도록 하는 것을 택했습니다.


라즈베리파이에서 센서값 받기 (MCP3208 - SPI통신)

받은 센서 값을 MYSQL에 저장.

MYSQL - SETTING TABLE 생성 후, 화재설정 값을 저장함.

저장 된 MYSQL가 저장된 (SETTING) 화재설정 값보다 이상일 경우 화재로 인식 후 알람 전송.


그래서 저는 MYSQL에 SETTING 테이블을 만들고, 그 안에 화재설정 값을 작성하였습니다.

그리고나서, 센서 값을 MYSQL > WRITE TABLE에 기록하였습니다.


하지만, 여기서 문제점은 C로 제작된 SPI통신 즉, 센서 전송 후에, 어떻게 MYSQL에서 받아온 설정값과 비교하고,

그것을 알람으로 전송할까(?)....


이 문제점에 대해서는 sh을 사용할까 등을 고민하다가, 제가 그나마 잘하는 PHP를 이용해서 진행하기로 했습니다.


SPI통신 (센서 값 받기)

센서 값을 받아온다.

MQ7 값, 불꽃 값을 MYSQL WRITE TABLE에 저장한다. (저장 시간도)

리눅스 명령어로 CURL 사용하여 PHP를 실행시킨다.

system("curl http://127.0.0.1:8080/alarm.php");


PHP부분 (설정 값 불러오기 및 값 비교 후 알람 전송)

MYSQL 연결

PHP에 접속한 IP가 127.0.0.1이 아니라면 exit() 처리 [보안을 위해서]


MYSQL - SETTING TABLE 값 변수로 저장 (설정한 값)

MYSQL - WRITE TABLE 마지막 값 변수로 저장 (SPI 통신에서 저장 된 마지막 값을 가져오는 것)


SETTING 값(화재감지 설정 값), WRITE 값(SPI 통신 마지막 값)을 비교하여

WRITE > SETTING 일 경우에는 알람 전송.


알람의 경우는 Pushbullet 을 이용하기로 하였습니다.

그 이유는 간단합니다.


"본 프로젝트를 위해 전용 어플리케이션을 신규 제작하는 것은 현실적으로 비효율적이라 판단되어, 

기존재하는 애플리케이션의 API를 활용하는 방식으로 개발 기간 단축과 효율 향상을 도모하였다."


이기 때문입니다.


하지만 PHP 관련 API를 이용하려고 했지만, 딱히 PUSH만 이용할 부분인데

API 전체를 이용하고 싶지는 않았습니다.

그래서 간단하게 CURL 방식으로 sh을 실행시키도록 만들었습니다.


PHP 알람 전송 부분에

$data1 = shell_exec("sh /home/pi/ssc/push.sh");


으로, push.sh를 실행시키게 만들었습니다.

(사실, 아파치가 euc-kr로 읽고 utf-8로는 설정안되있어서, 설정을 전체 건드리기 귀찮아서... sh는 utf-8로 작성하였습니다)

(그 이유는 pushbullet 에서 한글은 utf-8로만 가능했기에)


#!/bin/sh


# PUSHBULLET MAKE : UTF-8

# PUSHBULLET 으로 전송하는 한글 텍스트는 UTF-8로 저장해야한다.


#Access Token 세팅

token="uKvDO6zReOfCZGREq8EIVWXc6kxVml6M"


#토큰이 있기 때문에 암호는 필요 없다.

#password="No-Password"




# pushbullet으로 알림 함수

pushbullet() {

curl -u $token: https://api.pushbullet.com/v2/pushes -d type=note -d title="화재 알림 !" -d body="화재감지기에 의한 화재 감지 ! 신속하게 확인하시기 바랍니다."

}


# pushbullet으로 알림 전송

 

pushbullet



위와 같은 소스를 이용하였습니다.

(너무 두서없이 작성한것 같아서 죄송합니다...)


결과적으로 말씀드리자면,


C로 제작된 SPI통신에서 센서값을 받아서 MYSQL에 저장하고, 알람.PHP를 실행합니다.


알람.PHP에서는 MYSQL에 저장된 설정 값을 불러와 변수로 저장하고

두번째로 MYSQL에 저장된 센서 값 (마지막)을 불러와 변수로 저장합니다.


두 변수를 비교하여, 설정 값보다 크다고 판단될 경우에는 화재알람API가 저장되어 있는 push.sh을 실행합니다.

push.sh에서는 pushbullet PUSH를 CURL로 저장되어 있기 때문에,

push.sh 실행 시 바로 pushbullet 알람이 가도록 되어 있어,


화재감지라고 PHP에서 인식할 경우 바로 push.sh를 실행하여, pushbullet을 통해 알람을 전송합니다.


한꺼번에 처리하는 방법도 있었으나, 다양한 방법을 택하고 싶었습니다.

(변명 아닌 변명.... @_@)


여기까지가 현재 작업 상태입니다.

[물론... 아직까지도 DS18B20은 4.7k Pull-up 저항이 없어 못했습니다 ㅋㅋㅋ]


추가적으로 작업할 내용들은


라즈베리파이에 설치된 아파치(웹)을 통해서 암호를 입력해서 MYSQL - SETTING TABLE 세팅 값들을 변경할 수 있게 만드는 것입니다.

(웹 상에서 손쉽게 SETTING 값을 수정할수가 있음)


마지막으로는, 웹에서 SPI 통신을 통해서 저장된 센서 값들을 최신 값(약 10개 ~ 25개)정도를 볼 수 있게 만드는 것입니다.

위 두가지만 제작하면, 사실 상 개발은 끝이 나는 것이고,


DS18B20을 연결하여, 온도 값 또한 저장, 비교되게 만들어야 합니다.

그리고, 제일 중요한 졸업작품 전시회때, 시연할 수 있게 끔, 세팅을 해두어야 하며,

시연에 알맞는 센서값들 (화재감지시)을 여러번 체크하여 설정 값에 입력을 해둬야지만.


시연 시에도 문제 없이 작동되리라 생각이 됩니다. 하하하하

이건 뭐... 글같지 않은 글이 된거 같습니다.

밤 새고, 졸려서라고 믿겠습니다.


아직 끝난게 아니므로... 위 두가지를 끝내고 자겠습니다. :)


긴 글 읽어주셔서 감사합니다.

앞으로 필력을 높이도록 노력하겠습니다 !!

 

졸려... ㅠㅠ