Node-RED로 XY-MD02 온습도 센서 실시간 모니터링하기

2025. 5. 29. 11:06·하드웨어
반응형

안녕하세요! 오늘은 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)에서:

  1. ☰ → 팔레트 관리
  2. 설치 탭 선택
  3. 다음 패키지들 검색 후 설치:
    • 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 노드 설정

  1. 팔레트에서 Modbus Getter 노드를 워크스페이스로 드래그
  2. 노드를 더블클릭하여 설정:
// 기본 설정
Unit-Id: 1              // 센서 기본 주소
FC: FC 4 (Read Input Registers)
Address: 1        
Quantity: 2             // 습도, 온도 2개 레지스터

Modbus 서버 설정

  1. Server 옆 연필 아이콘 클릭
  2. 새 서버 생성:
// 서버 설정
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 구성 (선택사항)

  1. Gauge 노드 2개 추가 (온도, 습도용)
  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 시스템을 만들 수 있다는 것이 정말 놀랍습니다.
이 시스템을 기반으로 더 많은 센서를 추가하거나, 제어 기능을 넣어서 완전한 스마트홈 시스템으로 발전시킬 수 있습니다. 상상력이 여러분의 유일한 한계입니다! 💪


💬 프로젝트 결과를 공유해주세요!

  • 센서 설치는 성공적이었나요?
  • 어떤 용도로 활용하고 계신가요?
  • 추가로 연결하고 싶은 센서가 있다면 댓글로 알려주세요!

🔗 참고 자료

  • Node-RED 공식 문서
  • Modbus 프로토콜 가이드
  • XY-MD02 매뉴얼 다운로드

#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
'하드웨어' 카테고리의 다른 글
  • RS485 통신 완전 정복: 산업용 통신의 표준
  • 라즈베리파이 GPIO 완전 정복: 기초부터 8채널 릴레이 제어까지
  • [아두이노&라즈베리파이 완전정복 #4] 전자공학 기초: 알아두면 쓸모있는 기본 지식
  • [아두이노&라즈베리파이 완전정복 #3] 개발 환경 구축하기: 첫 번째 발걸음
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (727)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (18)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    C#
    appdevelopment
    rtsp
    programming101
    Python
    ipcamera
    스크립트 실행 순서
    파이썬
    learntocode
    cv2
    긴유통기한우유
    devlife
    codingtips
    unity
    믈레코비타멸균우유
    스크립트 실행
    리뷰이관
    스마트스토어리뷰
    쇼핑몰리뷰
    list
    상품 리뷰 크롤링
    셀레니움
    라떼우유
    유니티
    리뷰관리
    codingcommunity
    카페24리뷰이관
    programmerlife
    카페24리뷰
    리스트
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
Node-RED로 XY-MD02 온습도 센서 실시간 모니터링하기
상단으로

티스토리툴바