DIY 프로젝트에서 가장 사랑받는 온도 센서인 DS18B20을 활용해, 4개의 포인트를 동시에 측정하고 실시간 그래프로 시각화하는 시스템 구축 과정을 총정리해 드립니다.
1. 왜 DS18B20인가? (핵심 특징)
DS18B20은 일반적인 아날로그 센서와 달리 1-Wire 디지털 통신을 사용합니다.
- 고유 ID: 각 센서마다 전 세계에 단 하나뿐인 64비트 시리얼 번호가 내장되어 있어, 선 하나(병렬)에 수십 개의 센서를 연결해도 각각 구분할 수 있습니다.
- 정밀도: ±0.5°C의 오차 범위를 가지며, 9~12비트 분해능 설정이 가능합니다.
- 간편한 배선: VCC, GND, DATA 단 3개의 선만 있으면 됩니다.
2. 하드웨어 연결 가이드 (배선도 확인)

센서의 평평한 면을 바라볼 때 왼쪽부터 GND – DATA – VCC 순서입니다.
- 병렬 연결: 4개의 센서 DATA 핀을 모두 ESP32의 한 개 핀(예: GPIO 0)에 묶어서 연결합니다.
- 풀업 저항 필수: 데이터 안정성을 위해 VCC와 DATA 사이에 4.7kΩ 저항을 반드시 달아주어야 합니다. (10kΩ 사용 시 통신 불안정이 생길 수 있으니 10k 두 개를 병렬로 엮어 5k로 쓰는 것을 추천합니다.)
3. MicroPython 실시간 대시보드 구현
이번 프로젝트의 핵심은 **웹소켓(WebSocket)**을 이용한 실시간 데이터 전송입니다. Chart.js를 활용해 모바일에서도 보기 편한 대형 그래프를 구현했습니다.
주요 기능:
- 순서 고정: 센서 ID 스캔 후 코드에 고정하여, 센서 위치가 바뀌어도 데이터가 뒤섞이지 않게 설정.
- 모바일 최적화: 한 줄에 4개 카드가 나열되는 반응형 디자인.
- 자동 스케일: 0.1도의 미세한 변화도 잘 보이도록 Y축 범위를 실시간 최적화.
4. 자주 묻는 질문 (Troubleshooting)
- Q: 센서 4개가 같은 곳인데 왜 값이 다르죠?
- A: 모든 센서는 제조 공정상 미세한 오차가 있습니다. 표준 온도계와 비교하여 소프트웨어적으로 오프셋(Offset) 값을 가감해 보정하는 과정이 필요합니다.
- Q: 차트가 안 그려져요!
- A: 센서 ID 중복이나 스캔 오류일 확률이 높습니다.
ds.scan()을 통해 정확한 16진수 주소를 먼저 확인하세요.
- A: 센서 ID 중복이나 스캔 오류일 확률이 높습니다.
5. 마치며
DS18B20은 부화기 온도 조절, 안방/거실 환경 모니터링 등 활용도가 무궁무진합니다. 이번에 구축한 실시간 웹 대시보드 코드를 활용해 여러분만의 스마트 홈 시스템을 완성해 보세요!
📊 DS18B20 핵심 기술 사양 (Specification)
| 항목 | 상세 스펙 | 비고 |
|---|---|---|
| 측정 범위 | -55°C ~ +125°C | 광범위한 환경 대응 가능 |
| 정밀도 (Accuracy) | ±0.5°C | -10°C ~ +85°C 구간 기준 |
| 분해능 (Resolution) | 9비트 ~ 12비트 (선택 가능) | 기본 12비트 설정 권장 |
| 최소 측정 단위 | 0.0625°C | 12비트 설정 시 해상도 |
| 변환 시간 | 최대 750ms | 12비트 기준 (데이터 처리 속도) |
| 동작 전압 | 3.0V ~ 5.5V | ESP32(3.3V)와 완벽 호환 |
| 통신 방식 | 1-Wire (Single Bus) | 선 하나로 다중 연결 가능 |
| 고유 식별자 | 64-bit ROM Code | 공장 출하 시 부여된 고유 ID |
질문: 센서 몇개까지 거리는 얼마까지 병렬 연결 할 수 있나?
DS18B20의 가장 큰 장점이 **’줄줄이 사탕’**처럼 엮을 수 있다는 점이지만, 무한정 늘릴 수는 없습니다. 통신 방식(1-Wire)의 특성상 센서 개수와 거리는 서로 밀접하게 연결되어 있습니다.
1. 연결 가능한 센서 개수 (최대 몇 개?)
이론과 실제 사용 환경에는 차이가 있습니다.
- 이론적 한계: 고유 ID가 64비트이므로 거의 무한대에 가깝게 주소를 할당할 수 있습니다.
- 실제 권장 한계: 일반적인 마이크로컨트롤러(ESP32 등) 환경에서는 10~20개 정도가 안정적입니다.
- 이유: 센서가 늘어날수록 데이터 선의 전기적 부하(Capacitance)가 커져서 신호가 뭉개집니다.
- 해결: 센서가 20개 이상으로 많아지면 풀업 저항 값을 2.2kΩ 정도로 낮추어 신호를 강하게 잡아줘야 합니다.
2. 연결 가능한 거리 (얼마나 멀리?)
선이 길어질수록 저항과 노이즈가 발생하여 통신 속도가 떨어집니다.
- 일반적인 케이블 (전화선, 점퍼선): 약 5~10m까지는 무난합니다.
- 고급 케이블 (CAT5/6 랜선): 배선 방식만 최적화하면 50~100m까지도 가능합니다.
- 주의: 거리가 10m를 넘어가면 전압 강하가 일어나므로, 전원 공급 방식을 ‘기생 전원(Parasite Power)’이 아닌 **전용 3선 방식(VCC 별도 연결)**으로 사용해야 합니다.
3. 안정성을 높이는 배선 꿀팁 (중요!)
네트워크를 구성할 때 모양이 매우 중요합니다.
- 데이지 체인 (Daisy Chain) 추천: 메인 선 하나를 길게 빼고, 거기서 센서를 하나씩 징검다리처럼 연결하는 방식이 가장 안정적입니다.
- 스타(Star) 구조 지양: 한 지점에서 사방으로 선을 뻗는 방식은 신호 반사(Reflection) 현상 때문에 에러가 자주 발생합니다. 가급적 피하세요.
- 랜선(UTP) 활용: 거리가 멀다면 랜선의 꼬임 쌍선(Twisted Pair) 중 하나는 DATA, 하나는 GND로 묶어서 사용하면 노이즈 차단 효과가 탁월합니다.
💡 요약
- 센서 4~5개, 거리 5m 이내: 지금처럼 4.7kΩ 저항 하나로 충분합니다.
- 센서 20개 이상, 거리 20m 이상: 저항을 2.2kΩ으로 낮추고, 가급적 랜선을 사용해 데이지 체인 방식으로 연결하세요.

Python ds18b20_ex.py



답글 남기기
댓글을 달기 위해서는 로그인해야합니다.