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

DHT11-MQTT-Node-RED-arduino

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
    • Mosquitto Broker: Raspberry Pi에 설치
    • PubSubClient Library: Arduino IDE에 설치
      • MQTT 메시징을 위한 클라이언트 라이브러리이다. MQTT는 소형 장치에 적합한 메시징 프로토콜이다. PubSubClient Library를 사용하면 MQTT에 메시지를 보내고 받을 수 있다.

      • PubSubClient Library 설치하기
        • Arduino reference libraries 페이지에서 "PubSubClient Library(pubsubclient-master.zip)"를 다운로드 한다.
        • Arduino IDE에서 "스케치 -> 라이브러리 포함하기 -> .zip 라이브러리 추가..."를 실행하면 검색 창이 열린다.
        • 검색 창에서 "pubsubclient-master.zip"을 검색하여 열기를 실행하면 스케치북 위치 폴더에 PubSubClient Library가 설치된다.
        • "스케치북 위치 폴더" 위치는 "파일 -> 환경설정"을 실행하면 열리는 환경설정 창에서 확인할 수있다.
  • MQTT 사용을 위한 DHT11 센서 프로그램
    • MQTT 사용을 위한 DHT11 센서 프로그램: MQTT_DHT11-Node-RED.ino

  • 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를 출력한 예

      • 실험을 위한 준비
        • Sensor Library 설치하기
          • 아래 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): ESP8266/ESP32 개발보드 또는 센서 모듈에 Pull up 저항이 내장된 경우 생략하여도됨.
          • ESP8266/ESP32 개발보드 VDD(3.3V or 5V) <-> 센서 Vcc pin. 본인이 사용하는 센서의 공급 전압을 확인 바람.
          • ESP8266/ESP32 개발보드 GND <-> 센서 GND
      • 실험 방법
        • Arduino IDE를 실행하고 "파일 -> 새 파일"을 클릭한다.
        • 윗 프로그램(MQTT_DHT11-Node-RED.ino)을 프로그램 편집 창에 복사한다.
        • Arduino IDE의 편집 창에서 본인의 무선 공유기 연결을 위한 네트워크 자격 증명(ssid와 password)과 브로커(mqtt_server) IP 주소(공유기에서 브로커(mqtt_server)가 설치된 Raspberry Pi IP 주소를 확인)를 설정한다.
        • 사용하는 보드에 따라 Library(WiFi.h or ESP8266WiFi.h) 설정을 편집하고 저장한다.
        • "툴 -> 보드: "보오드 이름" 에서 보드를 선택("NodeMCUS-32인 경우에는 "NodeMCU-32S" , ESP8266 NodeMCU인 경우에는 "NodeMCU 1.0(ESP-12E Module)) 한다.
        • "툴 -> 포트: "에서 COM Port(제어판에서 ESP에 연결된 Port 번호를 확인)를 선택 한다.
        • "스케치 -> 확인/컴파일"을 클릭하여 프로그램이 정상으로 컴파일되는지 확인한다.
        • "업 로드"를 실행 한다. 컴파일이 완료되고 Arduino IDE와 개발 보드 사이에 연결이 시작되면 FLASH Switch를 약 2초 동안 누른다.
        • 주: ESP8266 NodeMCU 개발보드를 사용하는 경우에는 FLASH Switch와 RST Switch를 누르지 않아도 자동으로 업 로드 된다.

        • Upload 가 완료되면 "툴 -> 시리얼 모니터"를 실행하여 시리얼 모니터 창을 Open 한다.
        • 실험
          • "업 로드"가 완료되면 프로그램이 자동으로 실행된다.
          • 시리얼 모니터 창에서 MQTT 연결 메세지을 확인(경우에 따라 1 - 5Sec 정도 소요됨)한다.
          • 프로그램이 실행되면 온도와 습도 측정 결과가 1초 간격으로 시리얼 모니터 창에 출력된다.
          • 아래와 같은 명령으로 Node-RED 서버의 Dashboard에 연결한다.
          • http://raspberry-pi-ip-address:1880/ui

          • Web 브라우저에 위 "Node-RED Dashboard에 온도와 습도 Gauge를 출력한 예"와 같이 온도와 습도가 표시되는지 확인한다.
          • 온도와 습도를 변동(센서에 손가락을 대고 있으면 온도와 습도가 변동함) 시키며 실험한다.

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