이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 WiFi Module과 Raspberry Pi, Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560)를 사용 합니다.

python-LAMP-server-data-logger

ESP8266/ESP32(LAMP Server - data logger) - Python
ESP8266/ESP32 - LAMP Server를 이용한 Data logger - Python


  • LAMP Server를 이용한 Data logger
    • LAMP Server를 이용한 Data logger의 구성
    • 측정 결과(데이터)를 데이터 분석 등을 위하여 대규모로 저장하여야 하는 경우 LAMP(Linux + Apache + MySQL + PHP) Server를 이용하는 것이 효과적이다.

      LAMP Server를 이용한 Data logger 구성도

        LAMP Server를 이용한 Data logger 구성은 윗 그림과 같이 Raspberry Pi, ESP8266 또는 ESP32 Module, 온도/습도 센서(DHT11 또는 DHT22) 모듈, Data 출력 장치(PC, 노트북, 휴대폰 등과 같이 인터넷에 열결할 수 있는 터미널)로 구성된다.

      • 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 설치

  • Data logger를 위한 MySQL Database 생성과 Web Server측 PHP Script
    • phpMyAdmin을 이용한 Database와 Data Table 생성
      • phpMyAdmin을 사용하여 MySQL Database를 관리하기 위하여는 먼저 PC의 Web 브라우저에서 phpMyAdmin에 연결하여야 한다.

        참고자료: "PHPMyAdmin 사용자를 위한 새로운 DB 사용자 계정을 생성하고 phpMyAdmin에 연결(로그인)하기"

        주: MySQL과 SQL에 대한 배경 지식이 있는 경우에는 phpMyAdmin을 사용하지 않고 Raspberry Pi 터미널(Putty 등)에서 직접 Database와 Data Table 생성하는 것이 편리하다.

      • Web 브라우저를 이용하여(예: 192.168.0.15/phpmyadmin/) phpMyAdmin에 연결하기
        • Raspberry Pi 터미널(예: Putty)에서 아래 명령을 사용하여 Raspberry Pi의 IP Address를 확인한다.
        • hostname –I

        • Web 브라우저를 이용하여(예: 192.168.0.15/phpmyadmin/) phpMyAdmin에 연결 한다.
      • Database 생성하기
        • phpMyAdmin 관리 창에서 "데이터베이스"를 선택하고 아래와 같이 "새 데이터베이스 만들기"란에 데이터베이스 이름(예: esp_DHT_data)을 입력하고 "만들기" 버튼을 클릭한다.

        • phpMyAdmin 관리 창에서 "데이터베이스"를 생성하는 예

      • 생성한 데이터베이스(예: esp_DHT_data)에 데이터 저장을 위한 Table 생성하기
        • phpMyAdmin 관리 창 왼쪽에서 데이터베이스(예: esp_DHT_data)를 선택하고, "SQL"을 선택하면 SQL을 입력할 수 있는 창이 열린다.
        • SQL 입력 창에 아래 SQL 문을 복사하여 입력하고 "실행" 버튼을 클릭한다.


        • 데이터베이스(예: esp_DHT_data)에 데이터 저장을 위한 Table를 생성하는 예

        • phpMyAdmin 관리 창 왼쪽에서 생성한 Table(예: DHT_data)를 선택하고, "구조"를 선택하면 아래와 같이 새로 생성된 Table(예: DHT_data)의 구조를 확인 할 수 있다.

        • 생성된 Table(예: DHT_data)의 구조 예


    • MySQL Database에 Data를 기록하는 PHP Script
      • 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를 작성한다.

      • 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/ 폴더에 복사한다.

  • ESP8266/ESP32를 이용한 온도·습도 측정과 Data 전송
    • ESP8266/ESP32를 이용한 온도·습도 측정 회로 구성 예

    • ESP32/ESP8266를 이용한 온도·습도 측정과 데이터 전송 프로그램
      • 온도/습도 센서(DHT11/DHT22) 모듈은 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.

        ESP32/ESP8266: 센서(DHT11/DHT22) 모듈의 측정 값을 서버에 전송한다.

      • 온도/습도을 측정하여 서버에 전송하는 프로그램 예: 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가 출력(약간의 시간 지연이 있음)된다.
          • Connection successful

            ('192.168.0.30', '255.255.255.0', '192.168.0.1', '210.220.163.82')

          • 프로그램이 실행되면 ESP32/ESP8266 모듈은 3초 간격으로 온도·습도 값을 측정하여 Thonny IDE의 콘솔 창에 출력하고, Raspberry Pi 서버에 전송한다.
          • PC 등의 웹 브라우저에서 웹 서버의 esp-data-display.php(url 예: http://192.168.0.2/esp-data-display.php)에 접속하면 최근 10번의 측정 결과가 웹 브라우저에 출력된다.
          • 온도와 습도를 변동(센서에 손가락을 대고 있으면 온도와 습도가 변동함) 시키며 실험한다.

        • phpMyAdmin을 이용하여 데이터베이스에 저장된 측정 데이터 삭제하기
          • 프로그램이 실행되는 동안 3초 간격으로 데이터베이스에 데이터가 누적되기 때문에 필요한 경우 데이터베이스에 저장된 데이터를 삭제할 필요가 있다.

          • Web 브라우저를 이용하여 phpMyAdmin에 연결(예: 192.168.0.15/phpmyadmin/) 하고 아래 예와 같이 "DHT_data" Table 보기를 실행한다.
          • "DHT_data" Table 보기 창에서 "모두 보기"를 체크하고 "삭제"를 실행하면 삭제 실행 창이 열린다.

          • "DHT_data" Table 보기 창 예

          • 삭제 실행 창에서 "예"를 실행하면 선택된 데이터가 모두 삭제된다.

          • 삭제 실행 창 예



  • ESP8266/ESP32 - LAMP Server를 이용한 Data logger - 관련 페이지 보기