ESP8266과 DHT22 온습도 센서로 와이파이 기상 관측소 만들기
부품 및 소모품
| 부품 |
수량 |
| ESP8266 ESP-01 모듈 |
1 |
| DHT22 온습도 센서 |
1 |
| 브레드보드 |
1 |
| 점퍼 와이어 |
1 |
| UDOO USB/시리얼 디버그 모듈 (또는 FTDI 어댑터) |
1 |
| 아두이노 우노 (ESP8266 프로그래밍용) |
1 |
프로젝트 소개
오랜 기간 야외 기상 데이터를 자동으로 수집해 스프레드시트에 기록하고 싶어서 소형 기상 관측소를 직접 제작했습니다. 단순히 재미로 시작한 프로젝트지만, 지역 농업 환경 모니터링에도 활용할 수 있겠다는 생각이 들었습니다.
1단계: 하드웨어 준비
준비된 부품들
2단계: ESP8266 펌웨어 업로드
아두이노 우노를 USB-시리얼 변환기로 이용해 ESP8266에 스케치를 업로드합니다. 주의: 이렇게 하면 ESP8266의 순정 펌웨어가 지워집니다. 복구하려면 별도 과정이 필요하니 참고하세요.
ESP8266 프로그래밍 연결도
3단계: DHT22 센서 연결
DHT22 센서 브레드보드 연결
상세 회로도
배선 상세
4단계: ThingSpeak 채널 통신 확인
미리 생성해 둔 ThingSpeak 채널과 정상적으로 통신하는지 확인합니다. 채널 작성 API 키와 채널 번호가 필요합니다.
ThingSpeak 채널 설정 화면
데이터 전송에 필수적인 코드 라인:
#include <ThingSpeak.h>
unsigned long myChannelNumber = 167xxx;
const char * myWriteAPIKey = "VXXXXV86RWRXX9Y";
ThingSpeak.writeField(myChannelNumber, 1, h, myWriteAPIKey); // 습도
delay(20000);
ThingSpeak.writeField(myChannelNumber, 2, t, myWriteAPIKey); // 온도
delay(20000);
5단계: 전원 공급 고려사항
ESP8266은 순간적으로 많은 전류를 소모합니다. PC USB 포트만으로는 부족할 수 있으니 외부 전원(예: 3.3V 레귤레이터 또는 리튬 배터리)을 병행해 안정적으로 공급하세요.
외부 전원 병행 연결 예시
6단계: 센서 확장 아이디어
ThingSpeak 무료 채널은 최대 8개 필드까지 기록 가능합니다. 기압계(BMP280 등), 풍속계, 토양 수분 센서 등을 추가해 더 풍부한 기상 데이터를 수집해 보세요.
완성 코드 (temphumwifi.ino)
#include <ThingSpeak.h>
#include <DHT.h>
#include <ESP8266WiFi.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned long myChannelNumber = 167319;
const char * myWriteAPIKey = "XXXP9V86RWR7R9Y";
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
WiFiClient client;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
dht.begin();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Humidity: ");
Serial.println(h);
Serial.print("Temperature: ");
Serial.println(t);
delay(2000);
ThingSpeak.writeField(myChannelNumber, 1, h, myWriteAPIKey);
delay(20000);
ThingSpeak.writeField(myChannelNumber, 2, t, myWriteAPIKey);
delay(20000);
}
회로도
ESP8266 + DHT22 + ThingSpeak 전체 회로도