Home IoT Hub Series · 06

[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서

[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서 대표 이미지
시스템 아키텍처 및 데이터 파이프라인 안내
이 글은 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원

핀 연결

[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서 배선도
센서/모듈보드 연결
VCC3.3V
DATAD1 (GPIO5)
GNDGND

3편과 동일: DHT22 VCC→3.3V, DATA→D1(GPIO5), GND→GND.

선행 작업

DHT sensor library by Adafruit 설치.

전체 코드

3편 코드에서 슬롯 번호만 3번으로 바꾸고, 습도는 버렸다. 바깥 온도는 서서히 변하니 30초 간격이면 충분하다.

[6편] 창문 열어도 될까? 집 밖 온도를 직접 재는 베란다 IoT 센서 - 전체 코드
#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번으로.

준비물: Wemos D1 Mini (2,000원), DHT22 (2,000원)

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. 실내 센서와 실외 센서 값 차이가 큰데 정상인가요?
정상입니다. 오히려 그 '차이'가 이 구성의 핵심 가치입니다. 결로 예측·환기 판단은 모두 실내외 차이에서 나옵니다.

우리집 IoT HUB 20슬롯 시스템 맵

이 글은 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편] 집 안 상태가 한 화면에 보이기 시작했다 · 슬롯 전체