- 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 - MicroPython
참고자료: Raspberry Pi와 Node-RED
- 과제에 필요한 준비
- Hardware
- DHT11 온습도 센서: 측정한 온도/습도 값을 디지털 데이터로 변환하여 Single-Wire 통신 프로토콜로 출력한다.
- ESP8266/ESP32: DHT11 센서의 온습도 값을 읽어 MQTT Broker에 게시를 요청한다.
- Raspberry Pi(MicroSD Card(16GB 이상)): Mosquitto Broker와 Node-RED Server를 실행한다.
- Software
- Python 3
- Mosquitto Broker: Raspberry Pi에 설치
- umqtttsimple library: 아래 "umqtttsimple Library 설치하기" 참고요.
- Node-RED: Raspberry Pi에 설치
참고자료: Mosquitto Broker 설치하기
- umqtttsimple library 만들기
- 아래에서 umqttsimple library를 다운로드 하여 저장(umqttsimple.py)한다.
- umqtttsimple library를 ESP32/ESP8266에 설치하기
- 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)한다.
ESP 개발보드에 umqtttsimple library를 설치한다.
umqttsimple library: umqttsimple.py
umqtttsimple library가 설치되어 경우에는 다시 설치할 필요가 없다.
- MQTT 사용을 위한 DHT11 센서 프로그램: MQTT_DHT11-Node-RED.py
- 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 온습도 센서 실험
- 실험을 위한 준비
- 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에 연결한다.
- 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를 출력한 예
http://raspberry-pi-ip-address:1880/ui
개발이 완료되면 while 내의 print 문을 Comment 처리한다.
- MicroPython의 이해와 개발 환경
- ESP8266/ESP32 센서와 제어모듈
- ESP8266/ESP32 MQTT - MicroPython
- Raspberry Pi와 Node-RED
- Raspberry Pi와 Node-RED Dashboard