- LAMP Server를 이용한 Data logger
- LAMP Server를 이용한 Data logger의 구성
- Data logger 구현에 필요한 Hardware와 배경 지식
- LAMP Server를 이용한 Data logger 구현에 필요한 Software tool 설치
- Data logger를 위한 MySQL Database 생성과 Web Server측 PHP Script
- phpMyAdmin을 이용한 Database와 Data Table 생성
- MySQL Database에 Data를 기록하는 PHP Script
- MySQL Database의 Data를 Web page에 출력하는 PHP Script
- ESP8266/ESP32를 이용한 온도·습도 측정과 Data 전송
- ESP8266/ESP32를 이용한 온도·습도 측정 회로 구성 예
- Arduino IDE 환경에서 ESP32/ESP8266에 필요한 프로그램
- LAMP Server를 이용한 Data logger 실험
- ESP8266/ESP32 - LAMP Server를 이용한 Data logger - 관련 페이지 보기
- LAMP Server를 이용한 Data logger의 구성
- Raspberry Pi: MySQL(or MariaDB), Apache Web server, PHP와 같은 LAMP Server에 필요한 Tool과 ESP8266/ESP32로 부터 전송되는 Data를 MySQL(or MariaDB)에 기록하기 위한 Data Logging Script(이 페이지에서는 php 언어로 작성함), MySQL(or MariaDB)에 저장된 data를 터미널에 전송하기 위한 Data Displsy Script(이 페이지에서는 php 언어로 작성함)를 설치한다.
- ESP8266/ESP32: 주기적으로 온도와 습도를 측정하여 Server에 전송한다.
- 온도/습도 센서(DHT11 또는 DHT22) 모듈: 온도와 습도를 측정하여 ESP8266/ESP32에 전송(Single-Wire 통신을 사용)한다.
- Data 출력 장치: Web Server로 부터 Data를 읽어 결과를 출력하는 장치로 PC, 노트북, 휴대폰 등과 같이 인터넷에 열결할 수 있는 터미널 장치를 사용한다.
- Data logger 구현에 필요한 Hardware와 배경 지식
- 필요한 Hardware
- Raspberry Pi board(MicroSD Card – 16GB)
- ESP32 또는 ESP8266 Module
- 온도/습도 센서(DHT11 또는 DHT22) 모듈
- 인터넷 터미널로 사용할 수 있는 장치(PC, 노트북, 휴대폰 등)
- 필요한 Software와 배경 지식
- Linux OS: Raspberry Pi에 설치하는 OS로 Raspberry Pi를 이용하기 위하여는 Linux OS에 대한 기본적인 이해가 필요하다.
- Apache Web server: 무료로 사용할 수 있는 오픈 소스(Open-source) 웹 서버 소프트웨어로 Raspberry Pi에서 Web server를 사용할 수 있게 한다.
- MySQL(or MariaDB): 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)으로 다량의 Data를 체계적으로 저장하고 이용할 수 있게 한다.
- PHP(Personal Home Page Tools or Hypertext Preprocessor) : 웹 서버 측에서 주로 사용되는 스크립트 언어로 웹 서버에서 필요한 기능을 용이하게 구축할 수 있도록 한다.
- phpMyAdmin: MySQL을 웹 상에서 관리할 수 있도록 하는 PHP로 작성한 오픈 소스 도구이다.
- LAMP Server를 이용한 Data logger 구현에 필요한 Software tool 설치
- Linux OS: "Raspberry Pi 사용을 위한 준비"를 참고하여 Raspberry Pi Board를 준비하고 RRASPBIAN OS를 설치한다.
- Apache Web server: "Raspberry - Apache Web server"를 참고하여 Apache Web server를 설치한다.
- MySQL(or MariaDB): "MySQL(MariaDB) - phpMyAdmin 설치하기"를 참고하여 MySQL(or MariaDB)를 설치한다.
- PHP: "Raspberry Pi에 PHP 설치하기"를 참고하여 PHP를 설치한다.
- phpMyAdmin: "phpMyAdmin 설치하기"를 참고하여 phpMyAdmin를 설치한다.
측정 결과(데이터)를 데이터 분석 등을 위하여 대규모로 저장하여야 하는 경우 LAMP(Linux + Apache + MySQL + PHP) Server를 이용하는 것이 효과적이다.
LAMP Server를 이용한 Data logger 구성도
LAMP Server를 이용한 Data logger 구성은 윗 그림과 같이 Raspberry Pi, ESP8266 또는 ESP32 Module, 온도/습도 센서(DHT11 또는 DHT22) 모듈, Data 출력 장치(PC, 노트북, 휴대폰 등과 같이 인터넷에 열결할 수 있는 터미널)로 구성된다.
- phpMyAdmin을 이용한 Database와 Data Table 생성
- Web 브라우저를 이용하여(예: 192.168.0.15/phpmyadmin/) phpMyAdmin에 연결하기
- Raspberry Pi 터미널(예: Putty)에서 아래 명령을 사용하여 Raspberry Pi의 IP Address를 확인한다.
- Web 브라우저를 이용하여(예: 192.168.0.15/phpmyadmin/) phpMyAdmin에 연결 한다.
- Database 생성하기
- phpMyAdmin 관리 창에서 "데이터베이스"를 선택하고 아래와 같이 "새 데이터베이스 만들기"란에 데이터베이스 이름(예: esp_DHT_data)을 입력하고 "만들기" 버튼을 클릭한다.
- 생성한 데이터베이스(예: esp_DHT_data)에 데이터 저장을 위한 Table 생성하기
- phpMyAdmin 관리 창 왼쪽에서 데이터베이스(예: esp_DHT_data)를 선택하고, "SQL"을 선택하면 SQL을 입력할 수 있는 창이 열린다.
- SQL 입력 창에 아래 SQL 문을 복사하여 입력하고 "실행" 버튼을 클릭한다.
- phpMyAdmin 관리 창 왼쪽에서 생성한 Table(예: DHT_data)를 선택하고, "구조"를 선택하면 아래와 같이 새로 생성된 Table(예: DHT_data)의 구조를 확인 할 수 있다.
- MySQL Database에 Data를 기록하는 PHP Script
- PHP Script(esp-data-database.php) 작성하기
- 텍스트 편집기(예: Notepad++ 등)의 새 편집창에 아래 Script를 복사한다.
- 아래 Script에서 Database 이름, Database 사용자, Database 사용자의 password를 설정하고 esp-data-database.php로 저장한다.
- WinSCP를 사용하여 esp-data-database.php 파일을 Raspberry Pi의 /var/www/html/ 폴더에 복사한다.
- MySQL Database의 Data를 Web page에 출력하는 PHP Script
- PHP Script(esp-data-display.php) 작성하기
- 텍스트 편집기(예: Notepad++ 등)의 새 편집창에 아래 Script를 복사한다.
- 아래 Script에서 Database 이름, Database 사용자, Database 사용자의 password를 설정하고 esp-data-display.php로 저장한다.
- WinSCP를 사용하여 esp-data-display.php 파일을 Raspberry Pi의 /var/www/html/ 폴더에 복사한다.
phpMyAdmin을 사용하여 MySQL Database를 관리하기 위하여는 먼저 PC의 Web 브라우저에서 phpMyAdmin에 연결하여야 한다.
참고자료: "PHPMyAdmin 사용자를 위한 새로운 DB 사용자 계정을 생성하고 phpMyAdmin에 연결(로그인)하기"
주: MySQL과 SQL에 대한 배경 지식이 있는 경우에는 phpMyAdmin을 사용하지 않고 Raspberry Pi 터미널(Putty 등)에서 직접 Database와 Data Table 생성하는 것이 편리하다.
hostname –I
phpMyAdmin 관리 창에서 "데이터베이스"를 생성하는 예
데이터베이스(예: esp_DHT_data)에 데이터 저장을 위한 Table를 생성하는 예
생성된 Table(예: DHT_data)의 구조 예
ESP32 또는 ESP8266에서 들어오는 요청(Requests)을 수신하고, 수신한 데이터를 MySQL 데이터베이스에 삽입하는 PHP 스크립트를 작성하여 /var/www/html에 저장한다.
Raspberry Pi에서 실행하는 Script의 크기가 큰 경우에는 편리한 PC의 텍스트 편집기(예: Notepad++ 등)를 이용하여 Script를 작성하고, Windows용 그래픽 유저 인터페이스를 사용하여 원격으로 파일을 관리할 수 있는 WinSCP를 이용하여 Script를 관리하는 것이 편리하다. 만약 Script의 크기가 작은 경우에는 터미널(Putty 등)에서 직접 nano 편집기를 사용하여 Script를 작성할 수 있다.
참고자료: "원격 컴퓨터에서 PuTTY(SSH 프로토콜 이용)를 사용한 개발 환경"
아래 예에서는 PC의 텍스트 편집기(예: Notepad++ 등)와 WinSCP를 사용하여 Script를 작성한다.
- ESP8266/ESP32를 이용한 온도·습도 측정 회로 구성 예
- Arduino IDE 환경에서 ESP32/ESP8266에 필요한 프로그램
- 온도/습도을 측정하여 서버에 전송하는 프로그램 예: esp-post-DHT11.ino
- LAMP Server를 이용한 Data logger 실험
- 실험을 위한 준비
- Sensor Library 설치하기
- DHT Sensor Library 설치하기
- DHT Sensor Library "DHT-sensor-library-master.zip"을 다운로드한다.
- "스케치 -> 라이브러리 포함하기 -> .ZIP 라이브러리 추가..."를 실행하면 라이브러리 검색 창이 열린다.
- DHT-sensor-library-master.zip를 검색하여 "열기" 클릭하면 스케치북 폴더(스케치북 폴더 위치는 환경설정 창에서 확인할 수 있음) 아래 libraries 폴더에 Library가 설치된다.
- Adafruit Unified Sensor Driver 설치하기
- Adafruit Unified Sensor Driver "Adafruit_Sensor-master.zip"을 다운로드한다.
- "스케치 -> 라이브러리 포함하기 -> .ZIP 라이브러리 추가..."를 실행하면 라이브러리 검색 창이 열린다.
- Adafruit_Sensor-master.zip를 검색하여 "열기" 클릭하면 스케치북 폴더(스케치북 폴더 위치는 환경설정 창에서 확인할 수 있음) 아래 libraries 폴더에 Library가 설치된다.
- ESP8266/ESP32 개발보드와 센서 모듈 연결
- ESP8266/ESP32 개발보드 Data input pin(GPIO14) <-> 센서의 data pin
- Data input line Pull up 저항(1K - 10K): DHT11/DHT22 모듈에 Pull up 저항이 내장된 경우 생략하여도됨.
- ESP8266/ESP32 개발보드 VDD(3.3V) <-> 센서 Vcc pin
- ESP8266/ESP32 개발보드 GND <-> 센서 GND
- 실험 방법
- Arduino IDE를 실행하고 "파일 -> 새 파일"을 클릭한다.
- 윗 프로그램(esp-post-DHT11.ino)을 프로그램 편집 창에 복사하여 저장한다.
- WiFi(본인이 사용하는 무선공유기) 연결에 필요한 Id와 Password를 설정한다.
- 데이터를 수신하는 서버의 Domain name 과 URL path(or IP address 와 path)를 설정하고 저장한다.
- "툴 -> 보드: "보오드 이름" 에서 보드를 선택("NodeMCUS-32인 경우에는 "NodeMCU-32S" , ESP8266 NodeMCU인 경우에는 "NodeMCU 1.0(ESP-12E Module)) 한다.
- "툴 -> 포트: "에서 COM Port(제어판에서 ESP에 연결된 Port 번호를 확인)를 선택 한다.
- "스케치 -> 확인/컴파일"을 클릭하여 프로그램이 정상으로 컴파일되는지 확인한다.
- "업 로드"를 실행 한다. 컴파일이 완료되고 Arduino IDE와 개발 보드 사이에 연결이 시작되면 FLASH Switch(NodeMCU-32S 인 경우 BOOT SW)를 약 2초 동안 누른다.
- 실험
- "업 로드"가 완료되면 프로그램이 자동으로 실행되고 된다.
- 프로그램이 실행되면 ESP32/ESP8266 모듈은 3초 간격으로 온도/습도 값을 측정하여 Raspberry Pi 서버에 전송한다.
- PC 등의 웹 브라우저에서 웹 서버의 esp-data-display.php(url 예: http://192.168.0.2/esp-data-display.php)에 접속하면 최근 10번의 측정 결과가 웹 브라우저에 출력된다.
- 온도와 습도를 변동(센서에 손가락을 대고 있으면 온도와 습도가 변동함) 시키며 실험한다.
- phpMyAdmin을 이용하여 데이터베이스에 저장된 측정 데이터 삭제하기
- Web 브라우저를 이용하여 phpMyAdmin에 연결(예: 192.168.0.15/phpmyadmin/) 하고 아래 예와 같이 "DHT_data" Table 보기를 실행한다.
- "DHT_data" Table 보기 창에서 "모두 보기"를 체크하고 "삭제"를 실행하면 삭제 실행 창이 열린다.
- 삭제 실행 창에서 "예"를 실행하면 선택된 데이터가 모두 삭제된다.
온도/습도 센서(DHT11/DHT22) 모듈은 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.
ESP32/ESP8266: 센서(DHT11/DHT22) 모듈의 측정 값을 서버에 전송한다.
주: ESP8266 NodeMCU 개발보드를 사용하는 경우에는 FLASH Switch와 RST Switch를 누르지 않아도 자동으로 업 로드 된다.
프로그램이 실행되는 동안 3초 간격으로 데이터베이스에 데이터가 누적되기 때문에 필요한 경우 데이터베이스에 저장된 데이터를 삭제할 필요가 있다.
"DHT_data" Table 보기 창 예
삭제 실행 창 예