반응형
안녕하세요! 오늘은 Node-RED를 사용해서 XY-MD02 온습도 센서 모듈로부터 데이터를 받아와 실시간으로 모니터링하는 시스템을 구축해보겠습니다. 🌡️💧
많은 분들이 온습도 데이터를 수집하고 싶어하지만 복잡한 프로그래밍 때문에 망설이곤 합니다. 하지만 Node-RED를 사용하면 드래그 앤 드롭만으로도 전문적인 IoT 모니터링 시스템을 만들 수 있습니다!
🎯 이 프로젝트에서 배울 내용
- XY-MD02 온습도 센서 모듈 이해
- Node-RED 기본 개념과 설치
- Modbus 통신을 통한 센서 데이터 수집
- 실시간 데이터 시각화
- 알림 및 로그 시스템 구축
📋 필요한 준비물
하드웨어
✅ XY-MD02 온습도 센서 모듈
✅ RS485 to USB 컨버터 (또는 RS485 HAT)
✅ 라즈베리파이 4 (또는 PC)
✅ 전원 공급 장치 (12V/24V)
✅ 연결 케이블 (4선)
소프트웨어
✅ Node-RED 설치
✅ node-red-contrib-modbus 패키지
✅ 웹 브라우저 (크롬 권장)
🔧 XY-MD02 센서 모듈 이해하기
XY-MD02 특징
- 측정 범위: 온도 -40, 습도 100%RH
- 정확도: 온도 ±0.3℃, 습도 ±2%RH
- 통신 방식: Modbus RTU (RS485)
- 전원: DC 12~24V
- 응답 시간: 2초 이내
핀 연결 정보
빨강 (VCC) → 12~24V 전원
검정 (GND) → 전원 그라운드
노랑 (A+) → RS485 A+
파랑 (B-) → RS485 B-
Modbus 레지스터 주소
주소 0x0000: 온도 값 (실제값 × 10)
주소 0x0001: 습도 값 (실제값 × 10)
🛠️ Node-RED 설치 및 설정
라즈베리파이에 Node-RED 설치
# 시스템 업데이트
sudo apt update && sudo apt upgrade -y
# Node-RED 설치 스크립트 실행
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
# 자동 시작 설정
sudo systemctl enable nodered.service
# Node-RED 시작
sudo systemctl start nodered.service
Windows/Mac에 Node-RED 설치
# Node.js 설치 후
npm install -g --unsafe-perm node-red
# Node-RED 실행
node-red
필수 패키지 설치
Node-RED 관리 페이지(http://localhost:1880)에서:
- ☰ → 팔레트 관리
- 설치 탭 선택
- 다음 패키지들 검색 후 설치:
node-red-contrib-modbus
node-red-dashboard
node-red-node-email
(선택사항)
🔌 하드웨어 연결하기
RS485 to USB 컨버터 사용시
XY-MD02 → RS485 컨버터 → 컴퓨터
VCC (빨강) → 12V 전원
GND (검정) → 전원 GND
A+ (노랑) → A+
B- (파랑) → B-
USB → USB 포트
라즈베리파이 RS485 HAT 사용시
XY-MD02 → RS485 HAT → 라즈베리파이
VCC (빨강) → 12V 전원
GND (검정) → 전원 GND
A+ (노랑) → A+
B- (파랑) → B-
🎨 Node-RED 플로우 구성하기
1단계: 기본 Modbus 읽기 플로우
Modbus Getter 노드 설정
- 팔레트에서 Modbus Getter 노드를 워크스페이스로 드래그
- 노드를 더블클릭하여 설정:
// 기본 설정
Unit-Id: 1 // 센서 기본 주소
FC: FC 4 (Read Input Registers)
Address: 1
Quantity: 2 // 습도, 온도 2개 레지스터
Modbus 서버 설정
- Server 옆 연필 아이콘 클릭
- 새 서버 생성:
// 서버 설정
Type: Serial
Serial Port: /dev/ttyUSB0 // 또는 COM 포트
Baud Rate: 9600
Data Bits: 8
Parity: none
Stop Bits: 1
2단계: 데이터 파싱 플로우
Function 노드로 데이터 변환
Function 노드를 추가하고 다음 코드 입력:
if (msg.payload && Array.isArray(msg.payload)) {
var humidity = msg.payload[1] / 10; // 두 번째 레지스터 (습도)
var temperature = msg.payload[0] / 10; // 첫 번째 레지스터 (온도)
msg.payload = {
온도: temperature + '°C',
습도: humidity + '%',
측정시간: new Date().toLocaleString('ko-KR', {
timeZone: 'Asia/Seoul',
dateStyle: 'full',
timeStyle: 'medium'
})
};
return msg;
} else {
// 오류 처리
msg.payload = {
error: "Invalid data received",
raw: msg.payload
};
return msg;
}
3단계: 시각화 및 출력
Debug 노드
- Debug 노드를 연결하여 데이터 확인
- 사이드바의 디버그 탭에서 실시간 데이터 모니터링
Dashboard 구성 (선택사항)
- Gauge 노드 2개 추가 (온도, 습도용)
- 각각 설정:
// 온도 게이지
Group: 새 그룹 "환경 모니터링"
Min: -10, Max: 50
Value: {{msg.payload.temperature}}
// 습도 게이지
Group: 같은 그룹
Min: 0, Max: 100
Value: {{msg.payload.humidity}}
📊 완성된 플로우 예시
전체 플로우 구성:
[Inject] → [Modbus Getter] → [Function] → [Debug]
↓ ↓
[1초마다 반복] [파싱] → [Dashboard]
주기적 데이터 수집
Inject 노드 설정:
- Repeat: interval
- every: 5 seconds (5초마다)
- Payload: timestamp
🚨 문제 해결 가이드
연결 문제
❌ 문제: "Error: Port not found"
✅ 해결:
- lsusb 또는 장치 관리자에서 포트 확인
- 권한 설정: sudo chmod 666 /dev/ttyUSB0
- 드라이버 재설치
통신 문제
❌ 문제: "Modbus exception"
✅ 해결:
- 센서 전원 확인 (12V 이상)
- 배선 재확인 (A+, B- 뒤바뀜 확인)
- Unit-Id 확인 (기본값: 1)
- Baud Rate 확인 (기본값: 9600)
데이터 오류
❌ 문제: 이상한 값 출력
✅ 해결:
- 레지스터 순서 확인 (습도가 첫 번째)
- 10으로 나누기 확인 (센서가 10배 값 전송)
- 바이트 순서 확인
🔧 고급 기능 추가하기
1. 알림 시스템
온도나 습도가 설정값을 벗어날 때 알림:
// Function 노드에 추가
if (temperature > 30 || humidity > 80) {
msg.alert = {
level: "warning",
message: `주의: 온도 ${temperature}°C, 습도 ${humidity}%`
};
}
return msg;
2. 데이터 로깅
File 노드로 CSV 파일에 저장:
// Function 노드에서 CSV 형식으로 변환
var csvLine = `${new Date().toISOString()},${temperature},${humidity}\n`;
msg.payload = csvLine;
msg.filename = "/home/pi/sensor_data.csv";
return msg;
3. 웹 대시보드
Node-RED Dashboard를 사용한 실시간 모니터링:
- http://localhost:1880/ui 접속
- 실시간 차트, 게이지, 알림 표시
4. 원격 모니터링
MQTT 브로커 연결로 원격지 모니터링:
// MQTT 노드 설정
Server: broker.hivemq.com
Topic: home/sensors/temperature
Topic: home/sensors/humidity
📈 데이터 활용 아이디어
스마트홈 연동
- 습도가 높으면 제습기 자동 작동
- 온도가 낮으면 히터 자동 켜기
- 창문 개폐 알림 시스템
농업/원예 응용
- 온실 환경 자동 제어
- 식물 성장 환경 최적화
- 병해충 발생 예측
산업 현장 모니터링
- 창고 환경 관리
- 서버실 온습도 감시
- 제조 공정 품질 관리
💡 성능 최적화 팁
통신 안정성 향상
// 재시도 로직 추가
var retryCount = context.get('retryCount') || 0;
if (msg.payload.error && retryCount < 3) {
context.set('retryCount', retryCount + 1);
// 재시도 로직
} else {
context.set('retryCount', 0);
}
데이터 필터링
// 급격한 변화 필터링
var lastTemp = context.get('lastTemp') || temperature;
if (Math.abs(temperature - lastTemp) > 5) {
// 급격한 변화 감지, 재측정 요청
return null;
}
context.set('lastTemp', temperature);
마무리하며 🎉
축하합니다! 이제 여러분은 전문적인 IoT 온습도 모니터링 시스템을 구축했습니다.
Node-RED의 강력함을 경험해보셨나요? 복잡한 코딩 없이도 드래그 앤 드롭만으로 실용적인 IoT 시스템을 만들 수 있다는 것이 정말 놀랍습니다.
이 시스템을 기반으로 더 많은 센서를 추가하거나, 제어 기능을 넣어서 완전한 스마트홈 시스템으로 발전시킬 수 있습니다. 상상력이 여러분의 유일한 한계입니다! 💪
💬 프로젝트 결과를 공유해주세요!
- 센서 설치는 성공적이었나요?
- 어떤 용도로 활용하고 계신가요?
- 추가로 연결하고 싶은 센서가 있다면 댓글로 알려주세요!
🔗 참고 자료
#NodeRED #IoT #온습도센서 #XYMD02 #Modbus #실시간모니터링 #스마트홈 #라즈베리파이 #자동화 #센서프로젝트
'하드웨어' 카테고리의 다른 글
RS485 통신 완전 정복: 산업용 통신의 표준 (4) | 2025.05.30 |
---|---|
라즈베리파이 GPIO 완전 정복: 기초부터 8채널 릴레이 제어까지 (0) | 2025.05.30 |
[아두이노&라즈베리파이 완전정복 #4] 전자공학 기초: 알아두면 쓸모있는 기본 지식 (3) | 2025.05.26 |
[아두이노&라즈베리파이 완전정복 #3] 개발 환경 구축하기: 첫 번째 발걸음 (2) | 2025.05.25 |
[아두이노&라즈베리파이 완전정복 #2] 아두이노 vs 라즈베리파이: 어떤 것을 선택해야 할까? (3) | 2025.05.24 |