サンプル(Pythonコード)

ラズパイで python コードのアプリを作ってみよう

天気予報アプリを作ってみる。

OpenMeteoという無料APIサービスを呼び出して、今日の最高気温を取得してみる。まずは下記URLをコピーしてWEBブラウザで開いてみよう。

https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823&daily=temperature_2m_max&timezone=Asia/Tokyo

何かテキストが表示されたよね。

{"latitude":35.7,"longitude":139.6875,"generationtime_ms":0.028848648071289062,"utc_offset_seconds":32400,"timezone":"Asia/Tokyo","timezone_abbreviation":"GMT+9","elevation":48.0,"daily_units":{"time":"iso8601","temperature_2m_max":"°C"},"daily":{"time":["2025-04-12","2025-04-13","2025-04-14","2025-04-15","2025-04-16","2025-04-17","2025-04-18"],"temperature_2m_max":[19.2,13.9,20.0,18.0,20.7,24.5,24.7]}}

よく読むと東京で4/12は19.2度, 4/13の予想が13.9度と続いている。

ブラウザURLもよく読んでみよう 緯度35.6 経度139.6 の東京の最高気温のフォーキャスト(予報)を聞いている。

新しいファイルを作る

nano weather.py

プログラムは下記コード

import requests

url = f"https://api.open-meteo.com/v1/forecast?latitude=35.6785&longitude=139.6823&daily=temperature_2m_max&timezone=Asia/Tokyo"
response = requests.get(url)
if response.status_code == 200:
    data = response.json()
    daily = data["daily"]
    max_temp = daily["temperature_2m_max"][0]
    print(f"今日の最高気温: {max_temp}°C")
else:
    print("天気情報を取得できませんでした。")

プログラムを保存したらターミナルで実行する

python weather.py

少し改造する。[0]を[1]にする。[今日]を[明日]に書き換え

    max_temp = daily["temperature_2m_max"][1]
    print(f"明日の最高気温: {max_temp}°C")

再実行する

最低気温を追加する

URLの一部を改造する。最低気温[,temperature_2m_min]を追加する。

(改造前)
daily=temperature_2m_max&timezone=Asia/Tokyo"

(改造後)
daily=temperature_2m_max,temperature_2m_min&timezone=Asia/Tokyo"

調べて表示する

        min_temp = daily["temperature_2m_min"][1]
        print(f"明日の最低気温: {min_temp}°C")

実行する

雨を予測する

URLに降水量[,precipitation_sum]を追加する

(改造前)
daily=temperature_2m_max,temperature_2m_min&timezone=Asia/Tokyo”


(改造後)
daily=temperature_2m_max,temperature_2m_min,precipitation_sum&timezone=Asia/Tokyo”

調べて表示する

        precipitation = daily["precipitation_sum"][1]        
        print(f"降水量: {precipitation} mm")

実行する

コツがわかってきたよね。これも出来る?

風の強さ: ,wind_speed_10m_max
調べる: max_wind_speed = daily[“wind_speed_10m_max”][0]
表示する: print(f”最大風速: {max_wind_speed} m/s”)

いよいよお天気予報

最後は長いので新しいファイルをつくってコードをコピーしようか。

nano weather2.py

コード

import requests

def get_weather_with_code(latitude, longitude):
    url = f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}&daily=weathercode&timezone=Asia/Tokyo"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        daily = data["daily"]
        weather_code = daily["weathercode"][0]
        weather_description = interpret_weather_code(weather_code)
        print(f"今日の天気コード: {weather_code}")
        print(f"今日の天気: {weather_description}")
    else:
        print("天気情報を取得できませんでした。")

def interpret_weather_code(code):
    weather_codes = {
        0: "快晴",
        1: "晴れ",
        2: "晴れ時々曇り",
        3: "曇り",
        45: "霧",
        48: "霧(着氷霧)",
        51: "霧雨(弱い)",
        53: "霧雨(中程度)",
        55: "霧雨(強い)",
        61: "弱い雨",
        63: "中程度の雨",
        65: "強い雨",
        71: "弱い雪",
        73: "中程度の雪",
        75: "強い雪",
        95: "雷雨",
        96: "激しい雷雨(雹を伴う可能性あり)",
        99: "非常に激しい雷雨(雹を伴う可能性あり)"
    }
    return weather_codes.get(code, "不明な天気コード")

# 東京の緯度と経度
latitude = 35.6785
longitude = 139.6823

get_weather_with_code(latitude, longitude)

実行してみて。

トライ:明日の天気は?

まとめ

今日やったことは、VS codeを使って、ノートPCからラズパイのファイル操作とプログラミングができた。

今日できなかったことは、最新のVS code (v1.99)からはラズパイにSSH接続ができない(要調査|アップデート待ち)。

次にやりたいことは、広角カメラに交換して、python の画像認識AIを実行すること。これができると画像認識で運転アシストができる(かも)


コメントを残す