2019. 6. 5. 12:02ㆍ프로젝트/카페 소음 알림 App
준비
우선 프로그램 설치가 필요합니다.
구글에 'XAMPP'라고 검색하고 다운로드
MySQL을 사용할 예정이기 때문에 XAMPP를 설치해줬습니다.
DB 생성
설치된 XAMPP폴더에 들어가면 'xampp-control.exe' 실행파일이 있습니다.
클릭해줍시다.
이런 창이 뜨면 Apache, MySQL의 Start 버튼을 눌러줍니다.
ID와 Port번호가 뜨면 MySQL의 Admin을 눌러줍니다.
데이터베이스를 만들어줘야 합니다.
저는 데이터베이스명에 'test'라고 적고 utf8mb4_unicode_ci 를 선택하고 만들기를 눌러줬습니다.
테이블 만들기 창이 뜨면 테이블 이름을 적고 컬럼수를 정해준 후 실행 버튼을 누릅니다.
저는 테이블 이름으로 'sensor' 그리고 'id', 'time', 'value' 3개의 컬럼을 사용하기 때문에 컬럼수 3으로 했습니다.
이름 |
종류 |
데이터정렬방식 |
보기 |
Null |
기본값 |
설명 |
추가 |
id |
int(50) |
아니오 |
없음 |
AUTO_INCREMENT |
|||
time |
datatime |
아니오 |
0000-00-00 00:00:00 |
||||
value |
int(50) |
아니오 |
없음 |
테이블의 구조는 위와 같이 해줬습니다.
PHP문서작성
설치가 완료되었으면 PHP문을 작성해야 합니다.
저장 위치는 XAMPP > htdocs입니다.
데이터 베이스의 'host', 'user', 'passwd'를 따로 정해주지 않았기 때문에 아래와 같이 데이터베이스와 연결해줍니다.
센서 값 하나만 받아오기 때문에 num변수 하나만 선언합니다.
날짜도 입력하기 때문에 sql문을 아래와 같이 입력했습니다.
$sql = "INSERT INTO sensor(time,value) VALUES(now(),$num)";
<?php
$db_host = "localhost";
$db_user = "root";
$db_passwd = "";
$db_name = "test";
// MySQL - DB 접속.
$conn = mysqli_connect($db_host,$db_user,$db_passwd,$db_name);
if (mysqli_connect_errno()){
echo "MySQL 연결 오류: " . mysqli_connect_error();
exit;
} else {
echo "DB : \"$db_name\"에 접속 성공.<br/>";
$num=$_GET["num"];
$sql = "INSERT INTO sensor(time,value) VALUES(now(),$num)";
$result = mysqli_query($conn, $sql);
mysqli_close($conn);
}
코드 작성
#include <SoftwareSerial.h>
int sensorValue;
SoftwareSerial ESP8266 (rxPin, txPin);
void setup() {
Serial.begin(9600);
ESP8266.begin(9600);
delay(2000);
ESP8266.println("AT+RST\r\n"); //모듈 리셋
delay(1000);
ESP8266.println("AT+CWMODE=3\r\n"); //모드 3번 AP +Station Mode, 디바이이스 + AP 기능
delay(1000);
ESP8266.println("AT+CWJAP=\"공유기아이디\",\"공유기비밀번호\"\"\r\n"); //공유기 접속
delay(3000);
}
void printResponse() {
while (ESP8266.available()) {
Serial.println(ESP8266.readStringUntil('\n'));
}
}
void loop() {
sensorValue = 30;
Serial.println(sensorValue);
//소리 센서의 값을 시리얼 모니터에 출력
ESP8266.println("AT+CIPMUX=1"); //다중접속 설정을 1로한다.
delay(1000);
printResponse();
ESP8266.println("AT+CIPSTART=4,\"TCP\",\"서버의아이피\",80"); //포트연결
delay(1000);
printResponse();
String StsensorValue = String(sensorValue); //int형으로 가져온 센서값을 String으로 변환
String cmd = "GET http://localhost/write_data.php?num="+StsensorValue+" HTTP/1.0";
//GET할 주소 형식은 HTTP/1.0
ESP8266.println("AT+CIPSEND=4," + String(cmd.length() + 4)); //데이터 전송
delay(1000);
ESP8266.println(cmd);
delay(200);
ESP8266.println();
delay(200);
printResponse();
// delay(5000);
}