[스마트홈] 외부 기상 정보를 디스플레이에! OpenWeather API
안녕하세요! 오늘은 마이크로파이썬을 활용해 인터넷에서 실시간 기상 데이터를 가져오는 방법을 알아보겠습니다. 센서가 없어도 Wi-Fi만 연결되어 있다면 OpenWeather API를 통해 내 동네의 온도와 습도를 정확하게 받아올 수 있습니다.

밖 3.6°C 50% (외부 온습도 From OpenWeather)
안 21.4°C 51% (장치센서 온습도)
1. 준비물
- 하드웨어: ESP32-C3 (OLED 디스플레이가 연결된 상태)
- API Key: OpenWeather 공식 사이트에서 무료 회원가입 후 발급받은 API Key
- 환경: MicroPython이 설치된 개발 환경 (Thonny 등)
2. OpenWeather API 호출 주소 확인하기
우리는 urequests 라이브러리를 통해 JSON 데이터를 받아올 겁니다. API 호출 주소는 다음과 같은 형식입니다.
- units=metric: 섭씨 온도로 받기 위해 반드시 추가해야 합니다.
3. 마이크로파이썬 코드 구현
아래 코드는 Wi-Fi에 접속한 뒤, API 데이터를 분석하여 온도와 습도를 추출하는 핵심 코드입니다.
Python “openweather.py”
import network
import urequests
import time
import machine
SSID = "WiFi_ssid"
PASSWORD = "WiFi_password"
CITY = "Daejeon"
API_KEY = "API_KEY"
URL = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}&units=metric"
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to WiFi...')
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print('WiFi Connected:', wlan.ifconfig())
def get_weather():
try:
response = urequests.get(URL)
if response.status_code == 200:
data = response.json()
temp = data['main']['temp']
humi = data['main']['humidity']
weather_desc = data['weather'][0]['description']
print(f"CITY: {CITY}")
print(f"temp: {temp}°C")
print(f"humi: {humi}%")
print(f"weather_desc: {weather_desc}")
return temp, humi
else:
print("Error:", response.status_code)
except Exception as e:
print("Failed to get data:", e)
finally:
response.close()
def test():
while True:
temp, humi = get_weather()
print( temp, humi )
time.sleep(300)
connect_wifi()
if __name__ == "__main__":
test()
4. 코드 포인트 설명
urequests라이브러리: 파이썬의requests와 유사하지만 메모리가 적은 마이크로컨트롤러에 최적화된 라이브러리입니다.- JSON 파싱: API 응답은 복잡한 딕셔너리 형태입니다.
data['main']['temp']처럼 계층적으로 접근하여 필요한 값만 쏙쏙 뽑아내는 것이 중요합니다. - 데이터 주기: 날씨는 초 단위로 변하지 않으므로,
time.sleep()을 이용해 적절한 간격(5~10분)으로 데이터를 요청하는 것이 매너입니다.
5. 일석삼조! 단순한 날씨 알리미를 넘어 ‘스마트 홈 허브’로
단순히 외부 날씨만 보여주는 건 조금 아쉽죠? 기능을 한 뼘 더 확장하면 내 방의 중심을 잡는 **’스마트 홈 통합 제어기’**가 탄생합니다. 제가 구상한 일석삼조의 기능은 이렇습니다.
- 실시간 날씨 대시보드: OpenWeather API를 통해 외부 온습도를 디스플레이에 선명하게 출력합니다.
- 방 온습도 데이터: 홈 웹서버에 내 방의 온습도 데이타를 제공하여, 스마트폰이나 PC에서 언제든 확인할 수 있게 합니다.
- 만능 IR 컨트롤러: IR LED를 추가해 에어컨, TV 등 가전제품을 제어합니다. 밖에서 홈 웹 서버에 접속해 미리 에어컨을 켜두는 것도 가능해지죠!