ラズパイで 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を実行すること。これができると画像認識で運転アシストができる(かも)