[파이썬] SHT30 Modbus 온습도 센서(XY-MD02, SHA9D01 등) RS485 데이지 체인 완벽 가이드



스마트팜, 공장 자동화, 환경 모니터링 시스템에서는 하나의 통신 라인에 여러 개의 센서를 연결하는 멀티 드롭(Multi-drop) 구성이 자주 사용됩니다.

특히 SHT30 기반의 RS485 Modbus 센서(XY-MD02 등)는 가격이 저렴하고 사용이 쉬워 현장에서 매우 많이 사용됩니다.
하지만 단순히 선만 연결하면 통신 충돌, 데이터 깨짐, 응답 없음 등의 문제가 발생할 수 있습니다.

이번 글에서는 다음 내용을 실전 기준으로 정리합니다.

  • RS485 데이지 체인 결선 원리

  • Slave ID 설정 방법

  • 종단저항(Termination) 처리

  • Modbus 레지스터 구조

  • Python 데이터 수집 예제

  • 현장 구축 시 주의사항


1. RS485 데이지 체인(Daisy Chain)의 원리

RS485는 여러 장치를 하나의 버스(Bus)에 연결하는 통신 방식입니다.

핵심은 모든 장치를 한 줄(Line) 로 연결하는 것입니다.

데이지 체인 방식

PC/USB-RS485 컨버터
        │
        ├── 센서 1
        │
        ├── 센서 2
        │
        └── 센서 3

실제 배선은 아래처럼 이어집니다.

A(+) : 컨버터 → 센서1 → 센서2 → 센서3
B(-) : 컨버터 → 센서1 → 센서2 → 센서3
GND  : 공통 연결

2. 왜 스타(Star) 결선이 위험한가?

초보자가 가장 많이 하는 실수가 바로 스타 결선입니다.

잘못된 스타 결선 예시

             ┌── 센서1
컨버터 ──────┼── 센서2
             └── 센서3

이 방식은 다음 문제를 유발합니다.

  • 신호 반사(Reflection)

  • Echo 발생

  • 데이터 충돌

  • CRC 오류 증가

  • 통신 거리 감소

RS485는 기본적으로 하나의 긴 선로를 가정하고 설계된 통신 방식입니다.

따라서 반드시 아래처럼 구성해야 합니다.

올바른 데이지 체인

컨버터 ─ 센서1 ─ 센서2 ─ 센서3

3. 가장 중요한 작업: Slave ID 설정

왜 필요한가?

모든 센서는 공장 출하시 기본적으로 다음 상태입니다.

Slave ID = 1

즉, 여러 개를 바로 연결하면 모두 동시에 응답합니다.

결과:

  • 통신 충돌

  • 데이터 깨짐

  • 응답 불가

따라서 반드시 한 대씩 연결하여 ID를 변경해야 합니다.


4. SHT30 Modbus ID 설정 방법

Slave ID 저장 레지스터

레지스터 주소: 0x0101

Python 예제

client.write_register(
    address=0x0101,
    value=2,
    slave=1
)

의미:

현재 ID 1인 센서를
ID 2로 변경

5. 권장 ID 구성 예시

센서 위치Slave ID
입구1
중앙2
출구3

현장에서는 보통 위치 기준으로 번호를 부여합니다.


6. 실제 RS485 배선 방법

A/B 라인 연결

컨버터 A → 센서1 A → 센서2 A → 센서3 A
컨버터 B → 센서1 B → 센서2 B → 센서3 B

주의:

  • A는 끝까지 A끼리

  • B는 끝까지 B끼리

절대 교차되면 안 됩니다.


7. GND 연결은 왜 필요한가?

RS485는 차동(Differential) 신호 방식이라 A/B만으로도 동작할 수 있습니다.

하지만 실제 산업 환경에서는 장치 간 전위차가 발생할 수 있습니다.

그 결과:

  • 랜덤 통신 오류

  • CRC 에러

  • 응답 불안정

따라서 다음처럼 공통 GND를 연결하는 것이 매우 중요합니다.

컨버터 GND → 센서1 GND → 센서2 GND

8. 종단저항(Termination)의 역할

RS485 선로가 길어질수록 신호는 선 끝에서 반사됩니다.

이를 방지하기 위해 선로 끝에 종단저항을 추가합니다.

원리

종단저항은 선로의 특성 임피던스를 맞춰 신호 반사를 흡수합니다.

일반적으로:

120Ω 사용

9. 종단저항 연결 위치

매우 중요

종단저항은 선로 양 끝에만 넣습니다.

[컨버터] ---------------- [마지막 센서]
     120Ω                  120Ω

10. XY-MD02 계열 종단저항 연결 방법

대부분의 저가형 SHT30 Modbus 센서는 종단저항 점퍼가 없습니다.

따라서 직접 연결해야 합니다.

방법

마지막 센서의:

A 단자 ↔ B 단자

사이에 120Ω 저항을 연결합니다.


11. 스터브(Stub) 길이 주의

메인 버스에서 센서로 갈라지는 가지선을 Stub라고 합니다.

나쁜 예

메인선 ───────────────
          │
          │ 2m
          │
        센서

Stub가 길어지면 안테나처럼 동작하여 노이즈를 유발합니다.


12. 권장 Stub 길이

실무 권장:

30cm 이하

가능하면 메인 라인에 직접 붙이는 것이 가장 좋습니다.


13. 통신 케이블 선택

권장 케이블:

  • RS485 전용 케이블

  • 트위스트 페어(Twisted Pair)

  • 실드 케이블(Shielded Cable)

왜 꼬여 있어야 하나?

A/B 선이 서로 꼬여 있으면 외부 노이즈가 두 선에 동일하게 유입됩니다.

RS485 수신기는 두 선의 차이만 읽기 때문에 노이즈가 상쇄됩니다.


14. 전원 공급 시 주의사항

센서 수가 많아지면 말단에서 전압 강하가 발생합니다.

특히:

  • 5V 사용 시

  • 긴 거리 배선

  • 얇은 케이블

에서 문제가 심해집니다.

권장 사항

DC 12V ~ 24V 사용 권장

그리고 각 센서 입력 허용 전압을 반드시 확인하세요.


15. SHT30 레지스터 구조

대부분의 XY-MD02 계열은 아래 구조를 사용합니다.

데이터주소설명
온도0x0000값 / 10
습도0x0001값 / 10

예:

읽은 값: 253
실제 온도: 25.3℃

16. Python 멀티 드롭 데이터 수집 예제

from pymodbus.client import ModbusSerialClient

client = ModbusSerialClient(
    port='COM3',
    baudrate=9600,
    parity='N',
    stopbits=1,
    bytesize=8,
    timeout=1
)

client.connect()

sensor_ids = [1, 2, 3]

for s_id in sensor_ids:

    response = client.read_holding_registers(
        address=0x0000,
        count=2,
        slave=s_id
    )

    if not response.isError():

        temp = response.registers[0] / 10.0
        humi = response.registers[1] / 10.0

        print(
            f"[센서 {s_id}] "
            f"온도: {temp:.1f}℃, "
            f"습도: {humi:.1f}%"
        )

client.close()

17. 통신이 안 될 때 체크리스트

① A/B 반전 여부

가장 흔한 문제입니다.

A ↔ B 교차 여부 확인

② 모든 센서 ID 중복 여부

동일 ID가 존재하면 충돌 발생.


③ 종단저항 과다 사용 여부

종단저항은:

양 끝만 사용

중간 센서마다 넣으면 신호가 약해집니다.


④ USB-RS485 컨버터 품질

저가형 CH340 계열은 노이즈 환경에서 불안정할 수 있습니다.

가능하면:

  • FTDI

  • CP2102

  • 산업용 컨버터

사용 권장.


18. 실무 팁

센서 개수가 많다면?

10대 이상이면:

  • 전원 분리

  • 리피터 사용

  • 통신 속도 하향

을 고려하세요.


긴 거리라면?

100m 이상에서는:

9600bps 이하 권장

속도를 낮출수록 안정성이 올라갑니다.


마무리

RS485 시스템의 안정성은 단순히 코드보다 배선 품질에 훨씬 크게 좌우됩니다.

특히 핵심은 다음 4가지입니다.

  • 데이지 체인 유지

  • Slave ID 중복 제거

  • 종단저항 정확히 처리

  • Stub 최소화

이 기본 원칙만 지켜도 RS485 기반 환경 모니터링 시스템의 안정성은 크게 향상됩니다.

스마트팜, PLC, 산업 자동화, IoT 환경 구축 시 반드시 익혀야 하는 핵심 개념입니다.

댓글

이 블로그의 인기 게시물

공압 속도 제어: 미터인 vs 미터아웃

[PLC] 센서 NPN, PNP 출력 타입별 결선방법 (OMRON E2E-X 시리즈 3선식 배선)

NPN, PNP 트랜지스터 차이점

[PLC] PLC 아날로그 입출력 기본

사각형의 넓이 공식의 증명

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

[PLC] 서보 모터 브레이크 결선, 왜 릴레이 터미널을 써야 할까?

[투자] ETF 투자 가이드 : 카테고리별 ETF 선택 전략

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

[PLC] 릴레이와 전자 접촉기 (MC)