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

pie-chart-gauge-arduino

ESP8266/ESP32 - d3.js Pie chart gauge - Arduino
ESP8266/ESP32 - d3.js Pie chart gauge - Arduino


  • d3 - Pie chart gauge
    • 필요한 배경 지식
      • 이 페이지에서는 ESP8266/ESP32 Web server와 D3.js Pie chart을 이용한 Gauge에 대하여 설명한다.

      • 필요한 배경 지식
        • MicroPython과 JavaScript 언어
        • ESP8266/ESP32 Module(WiFi)
        • ESP8266/ESP32 Module(WiFi)을 이용한 원격 제어(Web server)
        • DHT11/12 온습도센서
        • D3.js Pie chart
    • d3 - Pie chart gauge basic
      • Pie chart gauge 프로그램 예
        • Pie chart gauge 프로그램 실행 결과 예

        • Pie chart gauge 프로그램 실행하기
          • 위 HTML 문서를 복사하여 d3-gauge-pie-chart-basic.html 파일을 만들고 실행(더블 클릭)하면 웹브라우저에 "Pie chart gauge 프로그램 실행 결과 예"와 같은 Gauge가 출력된다.
    • Pie chart gauge customization
      • Pie chart gauge의 옵션 설정을 변경하여 Gauge의 모양을 변경(Customize)한다.

      • Gauge 모양 설정(Customize)에 사용하는 옵션
        • 옵션 설정 예

          Gauge chart에서 설정 가능한 옵션은 아래와 같다.

        • Gauge 이름과 위치(X, Y) 설정
        • Gauge(Pie chart) size
        • Gauge 출력창 크기
        • Gauge ring의 위치와 폭
        • Pointer 모양
        • Gauge에 표시되는 최소값과 최대값
        • Gauge가 표시되는 Angle의 최소값과 최대값
        • Major ticks 수
        • Label format과 위치 설정
        • 보간법으로 Gauge 색상을 구하는 함수와 색 데이터
        • 참고자료: D3.js - Pie chart를 이용한 gauge


    • 2개의 Pie chart gauge 출력하기
      • Pie chart gauge 프로그램 예
        • 2개의 Pie chart gauge 출력 예

        • 2개의 Pie chart gauge 프로그램 실행하기
          • 위 HTML 문서를 복사하여 d3-gauge-pie-chart-two.html 파일을 만들고 실행(더블 클릭)하면 웹브라우저에 "2개의 Pie chart gauge 출력 예"와 같이 2개의 Gauge가 출력된다.

  • Web 환경에서 ESP 모듈을 이용한 온도/습도 측정(DHT11)
    • d3 - Pie chart gauge 시험을 위한 시스템 구성과 설정
      • Web 환경에서 ESP 모듈을 이용한 온도 측정(DHT11) 구성도

        • ESP8266/ESP32를 Web server와 온도/습도 센서(DHT11/DHT22) 제어에 사용한다.
        • 온도/습도 센서(DHT11/DHT22) 모듈은 측정한 온도/습도 값을 Single-Wire 통신 프로토콜로 ESP8266/ESP32에 전송한다.
        • AJAX를 이용하여 Web 페이지에서 필요한 측정 결과만 Update 한다.
        • 측정 결과는 Web 페이지의 Pie chart gauge에 출력(표시)된다.
      • 시스템 구성과 설정
        • Web 환경에서 ESP 모듈과 DHT11(온도센서 모듈)을 이용한 온도측정 시스템 예이다. AJAX를 이용하여 Web 페이지에서 필요한 측정 결과만 Update 한다.
        • AJAX 란?
          • Ajax(Asynchronous Javascript And Xml)는 브라우저가 가지고있는 XMLHttpRequest 객체를 이용하여 전체 페이지를 새로 고치지 않고 페이지의 일부만 Update 할 수있는 라이브러리 이다.

            참고자료: w3schools.com: AJAX Introduction

        • STA Mode를 사용하기 때문에 자신이 사용하는 WiFI Router 가 있어야 한다. WiFI Router 가 없는 경우에는 아래 AP Mode를 참고 바람.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • 자신이 사용하는 WiFI Router의 SSID(Service Set IDentifier)와 PASSWORD를 프로그램에 설정한다.
        • DHT11 온도센서 모듈(Single-Wire Two-Way 방식의 통신을 이용)을 사용한다. MicroPython이 DHT 리이브러리를 제공하기 때문에 DHT11 통신 프로토콜에 잘 모르는 경우에도 쉽게 프로그램을 작성할 수 있다.
      • 온도/습도 센서(DHT11/DHT22) 측정 결과를 Web Page(Pie chart gauge)에 출력하는 예
        • 참고 자료
        • 온도/습도 측정 결과를 Web Page(Google gauge)에 출력하는 프로그램 예
          • Web Browser에 출력되는 Web page(HTML 문서)를 아래와 같이 별도로 작성하여 Arduino IDE 프로그램(web_AJAX_DHT11_pie-chart_gauge-arduino.ino)과 동일한 폴더에 index.h 이름으로 저장한다.

            Web Browser에서 ESP 웹 서버에 접속하면 이 문서가 Web Browser에 전송되어 출력된다.

          • Web Browser에 출력되는 Web page(HTML): index.h



          • ESP8266/ESP32 Web Server 프로그램: web_AJAX_DHT11_pie-chart_gauge-arduino.ino

          온도 측정 결과와 현재 시간을 보여주는 Web page 예

        • 실험을 위한 준비
          • 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 or 5V} <-> 센서 Vcc pin.
            • 주: 센서에 따라 전원 전압은 5V 또는 3.3V 일 수 있으니 확인 바람.

            • ESP8266/ESP32 개발보드 GND <-> 센서 GND
        • 실험 방법
          • Text 편집기에서 새 파일을 만들고 위 index.h 파일을 복사하여 Arduino IDE 프로그램(web_AJAX_DHT11_pie-chart_gauge-arduino.ino)과 동일한 폴더에 index.h 이름으로 저장한다.
          • Arduino IDE를 실행하고 "파일 -> 새 파일"을 클릭한다.
          • 윗 web_AJAX_DHT11_pie-chart_gauge-arduino.ino 프로그램을 프로그램 편집 창에 복사한다.
          • 무선 공유기의 ssid(STA_SSID), password(STA_PASSWORD)를 자신의 공유기 환경에 맞게 편집한다.
          • 사용하는 보드에 따라 Library(WiFi.h, WebServer.h or ESP8266WiFi.h, ESP8266WebServer.h) 설정을 편집한다.
          • 사용하는 보드에 따라 "WebServer server(80); or ESP8266WebServer server(80);" 설정을 편집하고 저장한다.
          • "툴 -> 보드: "보오드 이름" 에서 보드를 선택("NodeMCU-32S인 경우에는 "NodeMCU-32S" , ESP8266 NodeMCU인 경우에는 "NodeMCU 1.0(ESP-12E Module)) 한다.
          • "툴 -> 포트: "에서 COM Port(제어판에서 ESP에 연결된 Port 번호를 확인)를 선택 한다.
          • "스케치 -> 확인/컴파일"을 클릭하여 프로그램이 정상으로 컴파일되는지 확인한다.
          • "툴 -> 시리얼 모니터"를 실행하여 시리얼 모니터 창을 Open 한다.
          • "업 로드"를 실행 한다. 컴파일이 완료되고 Arduino IDE와 개발 보드 사이에 연결이 시작되면 FLASH Switch를 약 2초 동안 누른다.
          • 주: ESP8266 NodeMCU 개발보드를 사용하는 경우에는 FLASH Switch와 RST Switch를 누르지 않아도 자동으로 업 로드 된다.

          • 실험
            • 업로드가 완료되면 프로그램이 자동으로 실행되고 시리얼 모니터 창에 아래 예와 같이 WiFi 연결 메세지와 IP address가 아래 예와 같이 출력된다.
            • IP address: 192.168.0.21

            • 시리얼 모니터 창에서 IP Address(예: 192.168.0.21)를 확인한다. 자신의 WiFI Router(공유기)에 관리자로 접속하여 "고급설정 -> 네트워크 관리 -> 내부 네트워크 설정"에서 사용중인 IP 주소 정보 창에서 확인 하여도 된다.
            • PC(또는 휴대폰)의 웹 부라우저에서 ESP Web server에 연결(위 예에서 '192.168.0.21'이 ESP Web server의 IP Address 임)하면 윗 예와 같이 온도 측정 결과가 표시된다.
            • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
            • 실험: 프로그램이 실행되면 2초 간격으로 측정된 온도와 습도 값이 출력된다. 센서에 손가락을 대고 있으면 습도가 변동한다. 유사한 방법으로 온도를 변동 시키며 측정 결과와 비교한다.

            주: 개발이 완료되면 handleDHT()에서 온도와 습도를 시리얼 모니터에 출력하는 코드를 Comment 처리한다.

          • google chrome의 "DNS_PROBE_FINISHED_BAD_CONFIG" Error 문제 해결하기
            • WEb server를 반복하여 실험하는 경우 "DNS_PROBE_FINISHED_BAD_CONFIG" Error가 발생하여 Server 접속에 문제가 발생할 수 있다.

            • "DNS_PROBE_FINISHED_BAD_CONFIG" Error 가 발생하면 Chrome 개발자 도구 Console 창에 아래와 같은 Error message 가 출력된다.
            • crbug/1173575, non-JS module files deprecated.

              (anonymous) @ (index):5551

            • 문제 해결하기: DOS 명령창을 열고(> Command Prompt 상태에서) 아래 명령을 순서대로 실행한다.
            • ipconfig /release

              ipconfig /flushdns

              ipconfig /renew


    • ESP8266/ESP32 - d3.js Pie chart gauge - 관련 페이지 보기