- 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를 이용한 온도·습도 측정 회로 구성 예
- 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를 이용한 온도·습도 측정 회로 구성 예
- ESP32/ESP8266를 이용한 온도·습도 측정과 데이터 전송 프로그램
- 온도/습도을 측정하여 서버에 전송하는 프로그램 예: esp-LAMP-data-logger-DHT11.py
- LAMP Server를 이용한 Data logger 실험
- 실험을 위한 준비
- STA Mode를 사용하여 WiFi 네트워크에 연결하기 때문에 자신이 사용하는 WiFi Router 가 있어야 한다.
- 위 "ESP8266/ESP32를 이용한 온도·습도 측정 회로 구성 예"를 참고하여 ESP 모듈과 DHT11 통신에 필요한 회로를 구성한다.
- ESP8266/ESP32 개발보드 Data input pin(GPIO14)과 DHT11/DHT22 모듈의 data pin를 연결한다.
- Data input line Pull up 저항(1K - 10K): DHT11/DHT22 모듈에 Pull up 저항이 내장된 경우 생략하여도됨.
- ESP8266/ESP32 개발보드 VDD(3.3V)와 DHT11/DHT22 모듈의 Vcc pin를 연결한다.
- ESP8266/ESP32 개발보드 GND와 DHT11/DHT22 모듈의 GND pin를 연결한다.
- 실험 방법
- Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
- Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
- Thonny IDE의 "파일 -> 새 파일"을 클릭한다.
- 윗 프로그램(esp-LAMP-data-logger-DHT11.py)을 프로그램 편집 창에 복사하여 저장한다.
- WiFi(본인이 사용하는 무선공유기) 연결에 필요한 정보(네트워크 자격 증명: ssid, password)를 본인의 공유기에 맞게 편집하여 프로그램을 저장한다.
- 데이터를 수신하는 Domain name 과 URL path(or IP address 와 path)를 설정한다.
- 필요한 경우 deviceIdValue, sensorName, sensorLocation를 변경한다.
- 실험
- "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
- 프로그램이 실행되면 Thonny IDE의 콘솔 창에 아래 예와 같이 네트워크 연결에 성공하였음을 알리는 메세지와 Network interface parameters가 출력(약간의 시간 지연이 있음)된다.
- 프로그램이 실행되면 ESP32/ESP8266 모듈은 3초 간격으로 온도·습도 값을 측정하여 Thonny IDE의 콘솔 창에 출력하고, 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) 모듈의 측정 값을 서버에 전송한다.
Connection successful
('192.168.0.30', '255.255.255.0', '192.168.0.1', '210.220.163.82')
프로그램이 실행되는 동안 3초 간격으로 데이터베이스에 데이터가 누적되기 때문에 필요한 경우 데이터베이스에 저장된 데이터를 삭제할 필요가 있다.
"DHT_data" Table 보기 창 예
삭제 실행 창 예