Home IoT Hub Series · 06
[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서
![[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서 대표 이미지](/iot-lab/assets/outside-temperature-dht22-hero.png)
이 글은 2편: 두뇌 만들기에서 구축한 중앙 NodeMCU 서버에 연결되는 우리집 IoT 허브 구성 문서입니다. 베란다나 창가 외기 온도를 측정해 실내 온습도와 비교할 수 있게 하는 외부 환경 노드입니다. 수집된 데이터는 로컬 무선망
IoT_Hub_Net을 통해 중앙 서버의 3번 바깥 온도 슬롯(/set?no3=값)을 갱신하며, 20채널 스마트홈 통합 컨트롤러의 판단 근거로 사용됩니다.[5편] 냉장고가 제대로 돌고 있는지 눈으로 확인하자. 이번에는 바깥(베란다) 온도를 측정한다. 3편과 코드가 거의 같다. DHT22 + D1 Mini 조합. 바뀌는 건 슬롯 번호뿐이다.
준비물과 가격
| 부품 | 수량 | 개당 가격 |
|---|---|---|
| Wemos D1 Mini (ESP8266) | 1개 | 2,000원 |
| DHT22 온습도 센서 | 1개 | 2,000원 |
| 점퍼 와이어 3개 | — | — |
| 합계 | 4,000원 |
핀 연결
| 센서/모듈 | 보드 연결 |
|---|---|
| VCC | 3.3V |
| DATA | D1 (GPIO5) |
| GND | GND |
3편과 동일: DHT22 VCC→3.3V, DATA→D1(GPIO5), GND→GND.
선행 작업
DHT sensor library by Adafruit 설치.
전체 코드
3편 코드에서 슬롯 번호만 3번으로 바꾸고, 습도는 버렸다. 바깥 온도는 서서히 변하니 30초 간격이면 충분하다.
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <DHT.h> const char* ssid = "IoT_Hub_Net"; const char* password = "iothub1234"; const char* hubURL = "http://192.168.1.1"; #define DHTPIN 5 #define DHTTYPE DHT22 #define INTERVAL 30000 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); dht.begin(); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Connecting to IoT_Hub_Net"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nConnected! IP: " + WiFi.localIP().toString()); } void loop() { float temp = dht.readTemperature(); if (isnan(temp)) { Serial.println("Read failed"); delay(2000); return; } Serial.print("Outside: "); Serial.print(temp); Serial.println(" C"); WiFiClient client; HTTPClient http; String url = String(hubURL) + "/set?no3=" + String(temp); http.begin(client, url); http.GET(); http.end(); Serial.println("HTTP -> " + url); delay(INTERVAL); }
업로드 및 확인
시리얼 모니터에서 Outside: 18.5 C가 표시되고, 두뇌 OLED 3번 Outside Temp 슬롯에 값이 표시되는지 확인합니다. 베란다 설치 시 직사광선과 빗물이 센서에 직접 닿지 않도록 주의합니다.
시리얼 모니터
업로드가 끝나면 Arduino IDE의 툴 → 시리얼 모니터를 열고 보드레이트를 115200으로 맞춥니다. 다음은 정상 동작을 확인하기 위한 시리얼 모니터 출력 예시입니다. 이 로그는 실제 캡처가 아니라, 외부 온도 노드가 3번 슬롯으로 값을 보내는지 확인하는 시리얼 모니터 출력 예시입니다.
[BOOT] Home IoT Node #06 - Outside temperature [WIFI] RSSI=-61 dBm, connected [SENSOR] outside_temp=29.1C humidity=64.0% [FILTER] sunlight_guard=PASS, value accepted [HTTP] GET /set?no3=29.1 [HUB] 200 OK - slot no3 updated [POWER] usb extension mode, next sample in 300000 ms
Connected또는connected가 보이면 Wi-Fi 연결 단계는 통과한 것입니다.HTTP 200또는200 OK가 보이면 두뇌 서버에 값이 전달된 것입니다.- 값이 갱신되지 않으면 먼저 URL의 슬롯 번호와 센서 배선을 함께 확인합니다.
다음 글 예고
욕실 습도 센서. 또 DHT22, 이번엔 습도만 19번으로.
DHT22로 실외·베란다 온습도 200% 활용하기
실내 센서 하나만으로도 집이 똑똑해지지만, DHT22를 실외(베란다·창밖)에 하나 더 두는 순간 활용 폭이 완전히 달라집니다. 핵심은 '실내값 하나'가 아니라 실내외 차이를 볼 수 있게 된다는 점입니다. 배선·핀맵·코드·슬롯 번호는 앞 장에서 다뤘으니, 여기서는 오직 '어디에 두고 무엇에 쓰느냐'만 짚습니다.
안 될 때 체크포인트
이 노드는 코드만 보면 짧아 보일 수 있지만, 실제 집에 붙이면 센서 위치·전원·무선망·노이즈 때문에 값이 쉽게 흔들립니다. 아래 항목은 두뇌 서버에 잘못된 판단 근거가 들어가지 않도록 현장에서 먼저 점검할 내용입니다.
| 증상 | 가능한 원인 | 현장 해결 방법 |
|---|---|---|
| 한낮에 40℃ 이상으로 튐 | 직사광선이 센서 하우징을 직접 가열함 | 흰색 차광 커버나 간단한 백엽상 구조를 씌우고 벽면 복사열을 받지 않는 그늘에 둡니다. |
| 비 온 뒤 값이 이상함 | 센서 필터에 물방울이 맺혀 온습도 보정이 틀어짐 | 완전 밀폐가 아니라 아래쪽 통풍구가 있는 방수 커버를 쓰고, 빗물이 직접 닿지 않게 위에서 가립니다. |
| 겨울 새벽에 노드가 재부팅됨 | 저온에서 보조배터리 전압이 떨어지거나 USB 전원이 부족함 | 외부 노드는 가능하면 창틀 틈으로 Micro USB 연장선을 빼 상시 전원을 공급합니다. |
| 집 안 공유기와 연결이 자주 끊김 | 베란다 샷시와 벽체가 2.4GHz 신호를 감쇠시킴 | 두뇌 AP 또는 공유기와 같은 쪽 창가에 배치하고, 실패한 측정값은 서버에 보내지 않도록 합니다. |
이렇게 씁니다 (활용 방안)
- 환기 타이밍 판단: 실외 습도가 실내보다 낮은 시간대에만 창문을 열도록 알림을 받으면, 장마철에 습기를 더 들이는 실수를 막습니다.
- 결로·곰팡이 예측: 실내 온도와 실외 이슬점을 비교하면 창문·벽면 결로를 미리 경고할 수 있습니다. 겨울철 북측 방 곰팡이 대응에 특히 유용합니다.
- 빨래 건조 지수: 실외 온도·습도로 '오늘 밖에 널면 마를까'를 판단합니다. 습도 85% 이상이면 실내 건조로 전환하는 알림이 실용적입니다.
- 베란다 식물 보호: 겨울 새벽 최저기온을 기록해 두면 화분 냉해 한계선을 넘기 전에 안으로 들일 수 있습니다.
- 에어컨 실외기·냉난방 효율: 실외기 주변이 과열되면 효율이 떨어지므로, 실외 기온 대비 이상 고온을 감지해 통풍 문제를 알아챌 수 있습니다.
추천 설치 장소 (그리고 피할 곳)
- 북측 벽·처마 밑 그늘이 최적입니다. 하루 종일 직사광선이 닿지 않아 '기온'을 재지 '햇빛에 달궈진 케이스 온도'를 재지 않습니다.
- 바닥에서 1.2~1.5m 높이, 벽에서 5cm 이상 띄우세요. 벽 복사열과 바닥 지열을 피할 수 있습니다.
- 피할 곳: 직사광선, 에어컨 실외기 토출구, 비가 직접 들이치는 난간, 실내 환기구·주방 후드 배출구 바로 앞. 모두 실제 바깥 공기와 다른 값을 줍니다.
실전 팁 · 주의점
- 방수는 필수, 밀폐는 금물: DHT22는 방수가 아닙니다. 위는 막고 아래·옆은 통기되는 '백엽상' 구조(스티븐슨 스크린)로 감싸세요. 완전 밀폐하면 습도가 영영 안 변합니다.
- 응답 지연을 감안: 옥외는 바람·복사 때문에 값이 출렁입니다. 5~10분 이동평균으로 부드럽게 보정하면 오판이 줄어듭니다.
- 극저온 정확도: DHT22 공식 동작 범위는 -40도까지지만, 영하 20도 이하에서는 습도 오차가 커집니다. 한겨울 최저값은 참고치로만 사용합니다.
- 아침 결로 주의: 새벽 이슬로 센서 표면에 물이 맺히면 습도가 한동안 99%에 붙습니다. 고장이 아니라 정상 회복 과정이니, '지속 99%'와 '일시 99%'를 구분합니다.
- 배선 길이: 실외까지 선을 길게 빼면 전압 강하로 값이 튑니다. 3m를 넘으면 풀업 저항을 4.7k에서 조금 낮추거나 차폐선을 사용합니다.
자주 묻는 질문
Q. 실외 습도가 항상 99%로 나옵니다. 고장인가요?
아침이라면 대부분 결로입니다. 해가 나고 1~2시간 뒤에도 99%면 물이 케이스 안에 고인 것이니, 통기 구조를 손봅니다.
Q. 방수 하우징을 사서 완전히 밀봉했는데 습도가 안 변해요.
당연합니다. 습도는 공기가 드나들어야 측정됩니다. 아래쪽에 통기구를 뚫거나 반투습 멤브레인(고어텍스류)을 사용합니다.
Q. 실내 센서와 실외 센서 값 차이가 큰데 정상인가요?
정상입니다. 오히려 그 '차이'가 이 구성의 핵심 가치입니다. 결로 예측·환기 판단은 모두 실내외 차이에서 나옵니다.
이 글은 2편의 중앙 두뇌 서버와 3~19편의 분산 엣지 노드가 함께 구성하는 20채널 홈 IoT 시스템의 일부입니다. 필요한 편으로 이동해 슬롯과 센서 흐름을 함께 확인합니다.
[1편] 우리집 IoT 허브 전체 그림[2편] 중앙 두뇌 서버 만들기 · 슬롯 1~20[3편] 집 안 온습도, 감으로 보지 말고 숫자로 보자 · 슬롯 1·2[4편] 문 닫았나 계속 신경 쓰일 때 · 슬롯 9[5편] 냉장고가 제대로 돌고 있는지 눈으로 확인하자 · 슬롯 12[6편] 창문 열어도 될까? · 슬롯 3[7편] 욕실 곰팡이 생기기 전에 습도부터 잡자 · 슬롯 19[8편] 보일러가 실제로 도는지 배관 온도로 확인하자 · 슬롯 5·17[9편] 외출했는데 가스레인지가 켜져 있지 않을까? · 슬롯 6[10편] 가스 냄새가 나기 전에 먼저 경고받자 · 슬롯 7[11편] 집을 비웠을 때 불꽃 징후를 먼저 잡자 · 슬롯 8[12편] 머리가 멍한 이유가 공기 때문인지 확인하자 · 슬롯 13·14[13편] 전기세 무지 나오네, 이번 기회에 눈으로 보자 · 슬롯 15[14편] 물 새는지, 얼마나 쓰는지 숫자로 보자 · 슬롯 16[15편] 비 오는 줄 모르고 창문 열어두지 않게 · 슬롯 18[16편] 불 껐나, 문 잠갔나 한 번에 확인하자 · 슬롯 11·10[17편] 리모컨 없이 에어컨을 IoT 허브에서 제어하자 · 슬롯 4[18편] 강아지 밥그릇이 비었는지 눈으로 보자 · 슬롯 20[19편] 사람 있을 때만 시원하게, 없을 땐 아끼자 · 슬롯 1·4[20편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체