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

python-dht11-mqtt-node-red

ESP8266/ESP32 DHT11 MQTT - Node-RED
ESP8266/ESP32 DHT11 온습도 센서 - MQTT와 Node-RED 이용


  • MQTT와 Node-RED 개발 환경를 이용한 DHT11 온습도 센서
    • 과제 개요
      • Node-RED Tool과 MQTT Broker를 사용하여 DHT11 센서의 온도와 습도를 읽어 Web 브라우저(Dashboard)에 출력하는 시스템 예

      • ESP32/ESP8266은 DHT11 센서에서 온도 및 습도 값을 읽어 MQTT Broker에 게시(Publish)를 요청한다.
      • 온도 측정 값은 MQTT Broker의 esp/dht/temperature 주제(Topic)에 게시된다.
      • 습도 측정 값은 MQTT Broker의 esp/dht/humidity 주제(Topic)에 게시된다.
      • Node-RED는 MQTT Broker의 esp/dht/temperature와 esp/dht/humidity 주제(Topic)를 구독( subscrib)하여,
      • Node-RED Dashboard의 온도와 습도 Gauge에 각각 출력(표시)한다.
    • 필요한 배경 지식

  • DHT11 센서의 온습도 값을 MQTT에 게시(Publish)하기
    • 과제에 필요한 준비
      • Hardware
        • DHT11 온습도 센서: 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.
        • ESP8266/ESP32: DHT11 센서의 온습도 값을 읽어 MQTT Broker에 게시를 요청한다.
        • Raspberry Pi(MicroSD Card(16GB 이상)): Mosquitto Broker와 Node-RED Server를 실행한다.
    • Software
  • umqtttsimple Library 설치하기
    • ESP 개발보드에 umqtttsimple library를 설치한다.

    • umqtttsimple library 만들기
      • 아래에서 umqttsimple library를 다운로드 하여 저장(umqttsimple.py)한다.
      • umqttsimple library: umqttsimple.py

    • umqtttsimple library를 ESP32/ESP8266에 설치하기
      • umqtttsimple library가 설치되어 경우에는 다시 설치할 필요가 없다.

      • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
      • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
      • Thonny IDE의 "파일 -> 열기"를 실행하여 umqttsimple library(umqttsimple.py) 파일을 Open 한다.
      • Thonny IDE의 파일 메뉴 "...(으)로 저장"을 사용하여 umqttsimple.py 파일을 "MicroPython 장치"에 저장(Upload)한다.
  • MQTT 사용을 위한 DHT11 센서 프로그램
    • MQTT 사용을 위한 DHT11 센서 프로그램: MQTT_DHT11-Node-RED.py

  • Node-RED Dashboard
    • Node-RED 서버는 MQTT에 게시된 DHT11 센서의 온도 및 습도 값를 읽어 Node-RED Dashboard에 표시(출력)한다.

      참고자료: Raspberry Pi와 Node-RED

      참고자료: Raspberry Pi와 Node-RED Dashboard

    • Node-RED 작업공간에 플로우 만들고 설정하기
      • Node-RED 작업공간에 Node 배치하기
        • 아래와 같은 명령으로 Node-RED 서버에 연결한다.
        • http://raspberry-pi-ip-address:1880

        • Web 브라우저의 팔레트(Palette) 창에서 mqtt node와 gauge node를 Drag하여 아래 예와 같이 작업공간(Workspace)에 배치한다.
        • mqtt Node와 gauge Node 배치 예

      • MQTT node 속성 설정하기
        • 위에 있는 MQTT node를 Double click 하여 MQTT node 편집창을 연다.
        • Server를 "localhost:1883"으로 설정한다.
        • Topic를 "esp/dht/temperature"으로 설정하고 "완료" 버튼을 클릭한다.
        • 아래에 있는 MQTT node를 Double click 하여 MQTT node 편집창을 연다.
        • Server를 "localhost:1883"으로 설정한다.
        • Topic를 "esp/dht/humidity"으로 설정하고 "완료" 버튼을 클릭한다.
        • mqqt in node 설정(편집) 예

      • gauge node 속성 설정하기
        • Tab과 Group을 추가하는 Dashboard 창 예

        • Tab 추가하기: Tab은 서로 다른 Page에 출력된다.
        • Node-RED window의 우측에서 "dashbord"를 클릭하면 Tab과 Page를 편집하는 dashbord 창이 열린다. 만약 "dashbord" 버튼이 보이지 않으면 메뉴 확장 버튼(아래 쪽 화살표)를 클릭하고 "Dashbord"를 클릭한다.

          • dashbord 창에서 "+tab"을 클릭하면 Tab이 추가 된다.
          • 추가된 Tab이 있는 위치에 마우스를 가져가면 "edit" 버튼이 보이게 된다. "edit" 버튼을 클릭하면 Tab 속성 편집 창이 열린다.
          • Tab 속성 편집 창에서 Tab Name을 입력하고 "변경"을 클릭한다. Tab Name 예: Home
        • Group 추가하기: Group은 동일 Page에 구분되어 출력된다.
          • 추가된 Tab이 있는 위치에 마우스를 가져가면 "+group" 버튼이 보이게 된다. "+group" 버튼을 클릭하면 새로운 Group이 추가된다.
          • 추가된 Group이 있는 위치에 마우스를 가져가면 "edit" 버튼이 보이게 된다. "edit" 버튼을 클릭하면 "dashboard group의 노드 수정" 창이 열린다.
          • Group 속성 편집 창에서 Group Name을 입력한다. Group Name 예: DHT
          • "dashboard group의 노드 수정" 창의 Tab 선택 줄에서 Tab을 선택한다. 이 예에서는 위에서 생성한 Home Tab을 선택한다.
          • "변경"을 클릭하면 설정이 저장된다.
        • Temperature gauge의 노드 수정하기
          • 플로우 편집 창에서 첫번 째 gauge 노드를 Double click하면 "gauge의 노드 수정" 창이 열린다.
          • Group를 "[Home]DHT"으로 선택한다. Tab name이 Home 이고 Group name 이 DHT 인 경우이다.
          • Label를 "Temperature"으로 설정한다.
          • Range를 min: -10 , max: 40으로 설정한다.
          • Unit에 온도 표시 문자를 입력한다.
          • Colour gradient를 원하는 색상으로 설정하고 "완료" 버튼을 클릭한다.
        • Temperature gauge의 노드 수정하기
          • 두번째 gauge Node를 Double click 하여 gauge node 편집창을 연다.
          • Group를 "[Home]DHT"으로 설정한다. Tab name이 Home 이고 Group name 이 DHT 인 경우이다.
          • Label를 "Humidity"으로 설정한다.
          • Range를 min: 10 , max: 100으로 설정한다.
          • Unit에 습도 표시 문자(예: %)를 입력한다.
          • Colour gradient를 원하는 색상으로 설정하고 "완료" 버튼을 클릭한다.

          gauge node 설정(편집) 예

      • Node를 연결하기
        • 아래와 같이 Node를 연결(Wire)한다.
        • Node 배치와 설정 후 node 사이 연결을 실행한 예

      • "배포하기" 버튼을 클릭하여 배포(Deploy)하기를 실행한다.
    • MQTT 를 사용한 메세지 전달과 Node-RED Dashboard를 이용한 DHT11 온습도 센서 실험
      • Node-RED Dashboard에 온도와 습도 Gauge를 출력한 예

      • 실험을 위한 준비
        • ESP8266/ESP32 개발보드와 센서 모듈 연결
          • ESP8266/ESP32 개발보드 Data input pin(GPIO14) <-> 센서의 data pin
          • Data input line Pull up 저항(1K - 10K): ESP8266/ESP32 개발보드 또는 센서 모듈에 Pull up 저항이 내장된 경우 생략하여도됨.
          • ESP8266/ESP32 개발보드 VDD(3.3V} <-> 센서 Vcc pin
          • ESP8266/ESP32 개발보드 GND <-> 센서 GND
      • 위 "umqtttsimple library 설치하기"를 참고하여 개발보드에 umqtttsimple library를 설치 한다. umqtttsimple library는 보드에 한번만 설치하면 됨.
      • MQTT_DHT11-Node-RED.py 프로그램을 다운로드하여 저장 한다.
      • 실험 방법
        • Thonny IDE를 실행하고 Thonny IDE의 사용 환경(Thonny 실행에 사용할 장치와 COM Port 선택)이 바르게 되어 있는지 확인한다.
        • Thonny IDE의 Python shell 창에 prompt( >>> )가 출력되었는 확인한다.
        • Thonny IDE의 "파일 -> 열기"를 실행하여 프로그램 파일(MQTT_DHT11-Node-RED.py)을 Open 한다.
        • Thonny IDE의 Scripts 편집 창 프로그램에서 본인의 무선 공유기 연결을 위한 네트워크 자격 증명(ssid와 password)과 브로커(mqtt_server) IP 주소(공유기에서 브로커(mqtt_server)가 설치된 Raspberry Pi IP 주소를 확인)를 설정하고 "이 컴퓨터"에 저장한다.
        • 실험
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고 프로그램이 실행된다.
          • Thonny IDE의 Python shell 창에서 MQTT 연결 메세지을 확인(경우에 따라 1 - 5Sec 정도 소요됨)한다.
          • 아래와 같은 명령으로 Node-RED 서버의 Dashboard에 연결한다.
          • http://raspberry-pi-ip-address:1880/ui

          • Web 브라우저에 위 "Node-RED Dashboard에 온도와 습도 Gauge를 출력한 예"와 같이 온도와 습도가 표시되는지 확인한다.

          개발이 완료되면 while 내의 print 문을 Comment 처리한다.


  • MQTT와 Node-RED 개발 환경를 이용한 DHT11 온습도 센서 관련 페이지 보기