- MQTT와 Node-RED 개발 환경를 이용한 DHT11 온습도 센서
- DHT11 센서의 온습도 값을 MQTT에 게시(Publish)하기
- Node-RED Dashboard
- MQTT와 Node-RED 개발 환경를 이용한 DHT11 온습도 센서 관련 페이지 보기
- 과제 개요
- 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 Broker
- Node-RED Dashboard
Node-RED Tool과 MQTT Broker를 사용하여 DHT11 센서의 온도와 습도를 읽어 Web 브라우저(Dashboard)에 출력하는 시스템 예
참고자료: 온도/습도 센서(DHT11/DHT22) 모듈
참고자료: ESP8266/ESP32 MQTT - Arduino
참고자료: Raspberry Pi와 Node-RED
- 과제에 필요한 준비
- Hardware
- DHT11 온습도 센서: 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.
- ESP8266/ESP32: DHT11 센서의 온습도 값을 읽어 MQTT Broker에 게시를 요청한다.
- Raspberry Pi(MicroSD Card(16GB 이상)): Mosquitto Broker와 Node-RED Server를 실행한다.
- Software
- Node-RED: Raspberry Pi에 설치
- Mosquitto Broker: Raspberry Pi에 설치
- PubSubClient Library: Arduino IDE에 설치
- PubSubClient Library 설치하기
- Arduino reference libraries 페이지에서 "PubSubClient Library(pubsubclient-master.zip)"를 다운로드 한다.
- Arduino IDE에서 "스케치 -> 라이브러리 포함하기 -> .zip 라이브러리 추가..."를 실행하면 검색 창이 열린다.
- 검색 창에서 "pubsubclient-master.zip"을 검색하여 열기를 실행하면 스케치북 위치 폴더에 PubSubClient Library가 설치된다.
- "스케치북 위치 폴더" 위치는 "파일 -> 환경설정"을 실행하면 열리는 환경설정 창에서 확인할 수있다.
참고자료: Mosquitto Broker 설치하기
MQTT 메시징을 위한 클라이언트 라이브러리이다. MQTT는 소형 장치에 적합한 메시징 프로토콜이다. PubSubClient Library를 사용하면 MQTT에 메시지를 보내고 받을 수 있다.
- MQTT 사용을 위한 DHT11 센서 프로그램: MQTT_DHT11-Node-RED.ino
- Node-RED 작업공간에 플로우 만들고 설정하기
- Node-RED 작업공간에 Node 배치하기
- 아래와 같은 명령으로 Node-RED 서버에 연결한다.
- Web 브라우저의 팔레트(Palette) 창에서 mqtt node와 gauge node를 Drag하여 아래 예와 같이 작업공간(Workspace)에 배치한다.
- 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"으로 설정하고 "완료" 버튼을 클릭한다.
- gauge node 속성 설정하기
- Tab 추가하기: Tab은 서로 다른 Page에 출력된다.
- 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를 원하는 색상으로 설정하고 "완료" 버튼을 클릭한다.
- Node를 연결하기
- 아래와 같이 Node를 연결(Wire)한다.
- "배포하기" 버튼을 클릭하여 배포(Deploy)하기를 실행한다.
- MQTT 를 사용한 메세지 전달과 Node-RED Dashboard를 이용한 DHT11 온습도 센서 실험
- 실험을 위한 준비
- 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초 동안 누른다.
- Upload 가 완료되면 "툴 -> 시리얼 모니터"를 실행하여 시리얼 모니터 창을 Open 한다.
- 실험
- "업 로드"가 완료되면 프로그램이 자동으로 실행된다.
- 시리얼 모니터 창에서 MQTT 연결 메세지을 확인(경우에 따라 1 - 5Sec 정도 소요됨)한다.
- 프로그램이 실행되면 온도와 습도 측정 결과가 1초 간격으로 시리얼 모니터 창에 출력된다.
- 아래와 같은 명령으로 Node-RED 서버의 Dashboard에 연결한다.
- Web 브라우저에 위 "Node-RED Dashboard에 온도와 습도 Gauge를 출력한 예"와 같이 온도와 습도가 표시되는지 확인한다.
- 온도와 습도를 변동(센서에 손가락을 대고 있으면 온도와 습도가 변동함) 시키며 실험한다.
Node-RED 서버는 MQTT에 게시된 DHT11 센서의 온도 및 습도 값를 읽어 Node-RED Dashboard에 표시(출력)한다.
참고자료: Raspberry Pi와 Node-RED
참고자료: Raspberry Pi와 Node-RED Dashboard
http://raspberry-pi-ip-address:1880
mqtt Node와 gauge Node 배치 예
mqqt in node 설정(편집) 예
Tab과 Group을 추가하는 Dashboard 창 예
Node-RED window의 우측에서 "dashbord"를 클릭하면 Tab과 Page를 편집하는 dashbord 창이 열린다. 만약 "dashbord" 버튼이 보이지 않으면 메뉴 확장 버튼(아래 쪽 화살표)를 클릭하고 "Dashbord"를 클릭한다.
gauge node 설정(편집) 예
Node 배치와 설정 후 node 사이 연결을 실행한 예
Node-RED Dashboard에 온도와 습도 Gauge를 출력한 예
아래 Sensor Library는 한번만 설치하면 되기 때문에 다른 예에서 설치하였으면 다시 설치할 필요가 없다.
주: ESP8266 NodeMCU 개발보드를 사용하는 경우에는 FLASH Switch와 RST Switch를 누르지 않아도 자동으로 업 로드 된다.
http://raspberry-pi-ip-address:1880/ui
- ESP8266/ESP32 센서와 제어모듈
- ESP8266/ESP32 MQTT - Arduino
- Raspberry Pi와 Node-RED
- Raspberry Pi와 Node-RED Dashboard