5주차 보고서 - l3ye/DoHeon-embedded-system GitHub Wiki
Node RED 란?
정의
- Node-RED는 시각적으로 IoT(사물인터넷)와 데이터 흐름을 설계할 수 있는 프로그래밍 도구.
- 블록을 연결하듯 프로그램을 만드는 환경
- JavaScript(Node.js) 기반,브라우저에서 GUI로 흐름(flow) 설계,IoT, API, 데이터 처리, 자동화 등에 활용 가능
특징
- 시각적 프로그래밍: 코드를 직접 치지 않고 노드(node)와 선(flow) 연결만으로 프로그램 설계 가능
- IoT 친화적: 센서, 액추에이터, MQTT, HTTP, WebSocket 등과 쉽게 연결 가능
- 확장성: 수많은 커뮤니티 노드 활용 가능 (예: 카메라, 날씨 API, 데이터베이스 연결)
- 실시간 실행 및 디버깅: 흐름을 바로 실행하고, 데이터가 어떻게 흐르는지 확인 가능
구조
- 노드(Node): 기능 단위 (센서 읽기, 데이터 처리, 전송 등)
- 플로우(Flow): 노드 연결로 만든 작업 과정
- 디버그 패널: 데이터 흐름 확인
활용 예시
- 집안 IoT 자동화: 온도·조도에 따라 조명 자동 켜기/끄기
- 센서 데이터 모니터링: MQTT로 수집한 센서값 시각화
- API 연동: 날씨 데이터를 가져와 장치를 제어
Node - RED 설치
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) 라즈베리파이 터미널에 입력
설치 이후 설정법
- 설치 이후 실행
- dashboard 설치
설치 완료
Node-Red 실습
과제1 웹 API를 활용한 실시간 날씨 정보 표시기 (OpenWeatherMap API키 이용)
-
OpenWeatherMap 에 들어가 api키 받아 오기
-
최종 완성본
- 도시 입력
- API URL 생성
- OpenWeatherMap API 호출
- 데이터 가공
- 실시간 날씨
- 결과
과제2 사용자 지정 타이머 및 카운트다운 알림 시스템
- 최종 완성본
- 타이머 시간 설정
- 시간 값 저장
- 타이머 시작
- 지연 시간 설정
- 카운트다운
- 알림 메시지 생성
- 타이머 종료 알림
- 결과
과제3 텍스트 문장 자동 대문자 변환 및 문자열 필터링
- 완성본
- 원본 문장 입력
- 대문자 변환
- 경고/성공 메시지 생성
- 변환 결과 출력
- 결과
과제4 DHT11 실습
dht 연결 1번 VCC → 라즈베리파이 3.3V 2번 DATA → GPIO4 4번 GND → 라즈베리파이 GND
지피티를 이용한 코드
[
{
"id": "inject_timer",
"type": "inject",
"z": "dht_flow",
"name": "2초마다 트리거",
"props": [],
"repeat": "2",
"crontab": "",
"once": true,
"onceDelay": "1",
"x": 150,
"y": 100,
"wires": ["dht_read"](/l3ye/DoHeon-embedded-system/wiki/"dht_read")
},
{
"id": "dht_read",
"type": "rpi-dht22",
"z": "dht_flow",
"name": "DHT11 읽기",
"topic": "",
"dht": "11",
"pin": "4",
"x": 380,
"y": 100,
"wires": ["function_parse", "debug_node"](/l3ye/DoHeon-embedded-system/wiki/"function_parse",-"debug_node")
},
{
"id": "function_parse",
"type": "function",
"z": "dht_flow",
"name": "데이터 분리",
"func": "// msg.payload = {temperature: xx, humidity: yy}\nvar temp = msg.payload.temperature;\nvar hum = msg.payload.humidity;\nreturn [{payload: temp}, {payload: hum}];",
"outputs": 2,
"x": 600,
"y": 100,
"wires": ["ui_gauge_temp"], ["ui_gauge_hum"](/l3ye/DoHeon-embedded-system/wiki/"ui_gauge_temp"],-["ui_gauge_hum")
},
{
"id": "ui_gauge_temp",
"type": "ui_gauge",
"z": "dht_flow",
"name": "온도 게이지",
"group": "dashboard_group",
"order": 1,
"width": 6,
"height": 2,
"gtype": "gage",
"title": "온도(℃)",
"label": "℃",
"format": "{{value}}",
"min": 0,
"max": 50,
"x": 820,
"y": 80,
"wires": []
},
{
"id": "ui_gauge_hum",
"type": "ui_gauge",
"z": "dht_flow",
"name": "습도 게이지",
"group": "dashboard_group",
"order": 2,
"width": 6,
"height": 2,
"gtype": "gage",
"title": "습도(%)",
"label": "%",
"format": "{{value}}",
"min": 0,
"max": 100,
"x": 820,
"y": 140,
"wires": []
},
{
"id": "debug_node",
"type": "debug",
"z": "dht_flow",
"name": "DHT 디버그",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"x": 600,
"y": 180,
"wires": []
},
{
"id": "dashboard_group",
"type": "ui_group",
"z": "",
"name": "센서 데이터 그룹",
"tab": "dashboard_tab",
"order": 1,
"disp": true,
"width": "6",
"collapse": false
},
{
"id": "dashboard_tab",
"type": "ui_tab",
"z": "",
"name": "DHT11 대시보드",
"icon": "dashboard",
"order": 1,
"disabled": false,
"hidden": false
}
]
이유모를 오류인지 무한 로딩돼서 안됐다.........................나중에 다시 해봐야겠음.