본문으로 건너뛰기
micro2iot.com
micro2iot.com
  • 홈
  • About
  • 홈
  • About
닫기

검색

Subscribe
스마트홈

[스마트홈] 외부 기상 정보를 디스플레이에! OpenWeather API

By enthfl@gmail.com
2026-02-03 2 Min Read
0

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

오후 6:28:08 (시간)
밖 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 호출 주소는 다음과 같은 형식입니다.

https://api.openweathermap.org/data/2.5/weather?q={도시이름}&appid={내API키}&units=metric
  • 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. 코드 포인트 설명

  1. urequests 라이브러리: 파이썬의 requests와 유사하지만 메모리가 적은 마이크로컨트롤러에 최적화된 라이브러리입니다.
  2. JSON 파싱: API 응답은 복잡한 딕셔너리 형태입니다. data['main']['temp'] 처럼 계층적으로 접근하여 필요한 값만 쏙쏙 뽑아내는 것이 중요합니다.
  3. 데이터 주기: 날씨는 초 단위로 변하지 않으므로, time.sleep()을 이용해 적절한 간격(5~10분)으로 데이터를 요청하는 것이 매너입니다.

5. 일석삼조! 단순한 날씨 알리미를 넘어 ‘스마트 홈 허브’로

단순히 외부 날씨만 보여주는 건 조금 아쉽죠? 기능을 한 뼘 더 확장하면 내 방의 중심을 잡는 **’스마트 홈 통합 제어기’**가 탄생합니다. 제가 구상한 일석삼조의 기능은 이렇습니다.

  1. 실시간 날씨 대시보드: OpenWeather API를 통해 외부 온습도를 디스플레이에 선명하게 출력합니다.
  2. 방 온습도 데이터: 홈 웹서버에 내 방의 온습도 데이타를 제공하여, 스마트폰이나 PC에서 언제든 확인할 수 있게 합니다.
  3. 만능 IR 컨트롤러: IR LED를 추가해 에어컨, TV 등 가전제품을 제어합니다. 밖에서 홈 웹 서버에 접속해 미리 에어컨을 켜두는 것도 가능해지죠!
작성자

enthfl@gmail.com

Follow Me
다른 기사
Previous

[스마트홈] 리튬 이온 배터리 전압 측정하기 (분압 저항 & 마이크로파이썬)

댓글 없음! 첫 댓글을 남겨보세요.

답글 남기기 응답 취소

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Recent Posts

  • [스마트홈] 외부 기상 정보를 디스플레이에! OpenWeather API
  • [스마트홈] 리튬 이온 배터리 전압 측정하기 (분압 저항 & 마이크로파이썬)
  • [TIP] 브레드보드 비호환 부품, ‘연장 핀’ 개조로 편하게 사용하기!
  • [FUN] ESP32-C3와 ESP-NOW로 완성한 RC카 소개🏎️
  • [스마트홈] 모니터링 & 리모콘 화면

Recent Comments

보여줄 댓글이 없습니다.
Copyright 2026 — micro2iot.com. All rights reserved. Blogsy WordPress Theme