반응형

 

 

 

아두이노(Arduino)를 이용한 홈 IoT를 구축하는 프로젝트의 진행과정으로 웹서버(Web sever)와 데이터베이스(Database, DB)를 구성하였습니다. 이어서 지난 포스팅에서는 웹브라우저를 통해서 DB서버(MySQL)의 데이터베이스에 (온습도) 데이터도 저장해보았습니다. 오늘은 웹브라우저를 통하지 않고 ESP-01(ESP8266) Wifi 모듈을 사용해서 온라인으로 DB서버에 데이터를 보내는 방법을 알아보겠습니다. 지난 포스팅과 이어지기 때문에 "Arduino 아두이노 홈IoT 서버 활용: 온습도 데이터 DB서버(MySQL)에 저장하기" (아래 링크)를 참조하셔서 process.php 파일을 생성 후 진행하셔야 합니다.

 

Arduino 아두이노 홈IoT 서버 활용: 온습도 데이터 DB서버(MySQL)에 저장하기

아두이노(Arduino)를 이용한 홈 IoT(사물인터넷) 구축을 위해 웹서버(Web sever) 및 데이터베이스(Database, DB) 서버를 구성하는 방법을 지난 포스팅을 통해 알아보았습니다. 웹서버를 구성하는 도구로 AMP (Apac..

it-g-house.tistory.com


진행 전에 아래 항목을 확인 부탁드립니다.

 

- APMSetup 프로그램 설치를 통한 AMP(Apache, MySQL, PHP) 서버 구성

- APMSetup 설치 하위 폴더 htdocs 폴더에 process.php 파일 확인 (PHP 프로그램: 아래 코드블록 참조)

- MySQL 데이터베이스 이름: testdb, 테이블 이름: tempnhumi, 각 칼럼(column) 이름: temp, humi

- esp-01 AT command 정상 동작 확인 및 Wifi 접속 (아래 링크 내용 참조)

 

아두이노(Arduino) 인터넷 하기 - Wifi (ESP-01)연결하는 방법

아두이노(Arduino)로 인터넷을 연결하는 방법은 랜선(LAN)을 연결하는 방법인 이더넷 모듈(Ethernet module)을 사용하는 방법, Wifi를 연결하는 방법, 3G/LTE를 연결하는 방법이 있습니다. 지난 포스팅까지 주로..

it-g-house.tistory.com

<?php
header("Content-Type: text/html;charset=UTF-8");
 
$host = 'localhost';
$user = 'root';
$pw = 'apmsetup';
$dbName = 'testdb';
$mysqli = new mysqli($host, $user, $pw, $dbName);
 
    if($mysqli){
	echo "MySQL successfully connected!<br/>";

	$temp = $_GET['temp'];
	$humi = $_GET['humi'];
	
	echo "<br/>Temperature = $temp";
	echo ", ";
	echo "Humidity = $humi<br/>";
	
	$query = "INSERT INTO tempnhumi (temp, humi) VALUES ('$temp','$humi')";
	mysqli_query($mysqli,$query);

	echo "</br>success!!";
    }

    else{
	echo "MySQL could not be connected";
    }

mysqli_close($mysqli);
?>

 

 

 

모든 진행은 앞의 확인사항이 모두 정상적으로 구성 되었다는 가정하에 아래 순서와 같이 진행하도록 하겠습니다.  

 

1. 포트포워딩 설정: 외부 통신(Wifi)을 통한 웹서버(Apache: 내 컴퓨터)로 접속이기 때문에 접근할 수 있는 포트 설정

2. 아두이노의 시리얼 모니터(Serial Monitor)를 통한 웹서버 접속

3. AT command를 통한 data 송신

4. MySQL 접속 후 데이터 확인

 

1. 포트포워딩 설정

 

아두이노의 ESP-01 모듈을 사용하여 Wifi를 통해 웹서버에 접속하기 때문에 외부 통신으로 내 컴퓨터의 웹서버에 접근하는 상황입니다. 이런 경우 접근할 수 있는 포트를 설정해야 하는데 이것을 '포트포워딩'이라고 합니다. 조금 더 상세히 설명드리고 싶으나.. 어설픈 설명보다 포트포워딩에 관해 정리를 잘하신 분의 포스팅을 아래 링크하니 참조 부탁드립니다.

 

공유기 포트포워딩 설정하기

지난번 포스팅을 통해 OctoPrint 세팅 과정을 공유드렸습니다.​지난번 포스팅에서는 OctoPrint 가 설...

blog.naver.com

그럼 포트포워딩의 이해가 어느 정도 됐으면 설정을 진행해 보겠습니다. 저희 집 공유기는 "tp-link"입니다. 웹브라우저 주소창에 '192.168.0.1'을 입력하면 공유기 설정이 가능하고 왼편 메뉴에서 '포워딩'을 클릭하면 아래와 같이 가상 서버를 설정할 수 있습니다. 여기서 서비스 포트에 사용하고 싶은 포트번호를 설정하면 됩니다. (4~5자리로 설정하시면 됩니다.) 저는 8787로 지정하였고, IP주소는 서버가 구성되어 있는 컴퓨터의 공유기 내부 IP주소를 입력하시면 됩니다.

 

아두이노(Arduino) ESP-01 모듈을 사용한 웹서버 접속: 포트포워딩 설정

 

다른 공유기를 사용하셔도 대부분 설정방법이 비슷하기 때문에 쉽게 설정하실 수 있습니다. 좀 더 자세한 이해를 위해서는 위에 링크를 참조 부탁드립니다. 정상적으로 포트포워딩이 설정되었으면 웹브라우저 주소창에서 "내 아이피:설정 포트"를 접속하면 이전에 APMSetup 설치 후 http://localhost로 확인한 화면과 동일한 화면이 출력됩니다. 이제 외부에서 내 아이피로 접속이 허용되는 상황입니다. (내 아이피 확인은 네이버에서 '내 아이피 주소 확인'이라고 검색하면 바로 나옵니다. ^^)

 

포트포워딩 후 웹서버 접속 확인

 

2. 아두이노 시리얼모니터(Serial Monitor)를 통한 웹서버 접속

 

다음은 시리얼 모니터를 통해 열려있는 포트로 웹서버에 접속을 진행하겠습니다. 우선 시리얼 모니터를 통해 와이파이까지 접속합니다. 그리고 AT+CIPSTART="TCP, "내 아이피 주소", 설정 포트(8787) 명령어로 웹서버에 접속합니다. 실행화면은 아래 그림 참조 부탁드립니다.

 

아두이노(Arduino) ESP8266(ESP-01) 모듈로 시리얼 모니터를 통한 웹서버 접속

 

"CONNECT OK"라고 응답이 나오면 정상적으로 접속에 성공하였습니다.

 

3. AT command를 통한 data 송신

 

이제 process.php 프로그램을 통해 GET 방식으로 temp와 humi 값을 전송해 보겠습니다. 웹서버로 메시지를 보내기 위해 AT+CIPSEND 명령어를 사용합니다. 명령어 실행 후 GET /process.php?temp=20.7&humi=55.6 HTTP/1.0이라고 메시지를 보낼 겁니다. (temp=20.7, humi=55.6이라고 임의로 정하였습니다.) AT+CIPSEND 명령어는 보내고자 하는 text 수에 맞게 숫자를 설정해야 합니다. 그래서 명령어를 AT+CIPSEND=49라고 실행해야 합니다. 그럼 "OK" 응답이 나오면서 '>' 이렇게 메시지를 입력할 수 있습니다. 그럼 GET /process.php?temp=20.7&humi=55.6 HTTP/1.0 입력하고 엔터(Enter)를 한번 더 눌러줍니다.

 

아두이노(Arduino) ESP8266(ESP-01) 모듈로 시리얼 모니터를 통한 DB서버(MySQL)에 데이터 전송

 

메시지가 전송되면 "SEND OK" 응답은 무조건 나옵니다. 이 응답 말고 그 아래 '+IPD, 243:HTTP/1.1 200OK'란 응답이 와야 데이터가 정상적으로 전송된 겁니다. 그리고 맨 아래 줄의 응답 메시지를 보면 웹브라우저로 데이터를 DB서버로 보낼 때 (process.php 프로그램에서 설정된) 나왔던 응답 메시지와 동일하게 나온 것을 확인할 수 있습니다. ㅎㅎ

 

4. MySQL 접속 후 데이터 확인

 

그럼 MySQL에 접속하여 데이터가 저장되었는지 확인해 보겠습니다. 앞서 APMSetup으로 웹서버와 DB서버 구성할 때 만들었던 데이터베이스 tempnhumi 안의 테이블에 temp=20.7, humi=55.6이라고 저장된 것을 확인할 수 있습니다. 저는 여러 번 시험하느라 앞에 많은 데이터가 있는데요 ㅎㅎ 마지막에 데이터가 들어온 것을 확인하였습니다.

 

아두이노 ESP-01(ESP8266)을 사용해서 DB서버(MySQL)에 전송한 데이터 확인

 

 

 


여기까지 아두이노(Arduino)로 ESP-01(ESP8266) Wifi 모듈을 사용해서 온라인으로 DB서버(MySQL)에 데이터를 보내는 방법을 알아보았습니다.

 

이제 모든 준비가 되었습니다. 여기까지 모두 정상적으로 진행하셨으면 온습도 센서(Temperature and Humidity sensor)에서 측정된 데이터를 ESP-01(ESP8266) Wifi 모듈을 통해서 온라인으로 DB서버(MySQL)에 저장하는 방법을 다 배웠습니다. 

 

이 모든 것을 아두이노에서 실행이 되도록 스케치로 프로그램 코딩만 잘하면 됩니다. ㅎㅎ 다음 포스팅에는 코딩방법에 대해 알아보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다. 궁금하신 부분이나 추가로 필요한 내용 있으면 언제든지 댓글로 남겨주세요 ^^ 

 

 

 

 

반응형

+ Recent posts