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

LAMP-server-data-logger-arduino

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


  • 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를 이용한 온도·습도 측정 회로 구성 예

    • Arduino IDE 환경에서 ESP32/ESP8266에 필요한 프로그램
      • 온도/습도 센서(DHT11/DHT22) 모듈은 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.

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

      • 온도/습도을 측정하여 서버에 전송하는 프로그램 예: 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초 동안 누른다.
        • 주: ESP8266 NodeMCU 개발보드를 사용하는 경우에는 FLASH Switch와 RST Switch를 누르지 않아도 자동으로 업 로드 된다.

        • 실험
          • "업 로드"가 완료되면 프로그램이 자동으로 실행되고 된다.
          • 프로그램이 실행되면 ESP32/ESP8266 모듈은 3초 간격으로 온도/습도 값을 측정하여 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 - 관련 페이지 보기