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] 개발 환경 구축하기: 첫 번째 발걸음
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (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)
  • 인기 글

  • 태그

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

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

티스토리툴바