カテゴリー
Arduino PlatformIO ラズベリーパイ

天気予報チェッカの作成

今年のゴールデンウィークのオモチャは、Raspberry Pi Picoでした。

作ろうと思ったのは、天気予報のデータを自動取得して、翌日の天気で深夜電力による蓄電量を決め、EchonetTimerに設定するというものです。(今は、手作業でブラウザから設定。)

  • 翌日が晴れなら、深夜電力による充電は抑えめにする。
  • 翌日が雨などで十分な日照が得られそうにない場合は、深夜電力でしっかり充電する。

まずは、天気予報データをRaspberry Pi Picoで取得し、LCDに天気情報表示してみようと思いました。下の写真は(表示部分のみの)完成状態です。

日付の下に表示している3桁の数字(211と101)が天気コードです。

次の目標は、この天気コードと日付を組み合わせて、蓄電量を自動算出することです。

天気データの表示
4種類のボードの組み合わせとなっています。
3Dプリンタで作成したケースに入れた状態です。

課題の抽出

3点ほど、解決する必要のある課題が見つかりました。(これだけでゴールデンウィークが潰れました。😢)

  1. イーサネットHAT液晶モジュールHATを同時接続したいが、消費するGPIOピンが重複している。
    • イーサネットHATのSPI通信用GPIO(16~21)が、液晶モジュールHATのボタン群と被っているので、どちらかのピンをずらす必要がある。
  2. 天気に関する情報は気象庁サイトで公開されているが、httpsアクセス(SSL通信)を行う必要があり、証明書の解決が必要となる。
  3. 天気アイコン(透過png形式)をそのまま16ビットBMP変換して液晶モジュールに表示させると、背景色だけ白色になってしまう。(LCD全体は背景が黒色、アイコン周辺だけ背景が白色となってしまい、見栄えがよくない)

各課題の解決

1. イーサネットHATと液晶モジュールHATの共存(ピンレイアウトの変換)
  • ピンレイアウト変換基板を作成しました。(裏面をパターンカットして、他のピンに接続し直す)
2. 天気予報データの取得方法(Arduino環境でのSSL通信)
  1. BareSSL Trust Anchors Generatorに気象庁サイトのURL(www.jma.go.jp)を入力すると、C言語形式のテキストが作成される。(コピペして、ヘッダファイルとして保存する。)
  2. ヘッダファイルで定義されている、TAs値(証明書データ)とTAs_NUM値を使ってSSLClientインスタンスを作成できる。
    EthernetClient ecl;
    SSLClient cl(ecl, TAs, (size_t)TAs_NUM, 0);
    HttpClient hcl = HttpClient(cl,"www.jma.go.jp", 443); // ポート443を指定して、httpsアクセス
    int res = hcl.get("/bosai/forecast/data/forecast/110000.json");
3. 天気アイコン(透過png形式)をイイ感じの表示用データに変換する手順
  1. アイコン画像をポジネガ反転(透過部分はそのまま)する。
  2. ペイントで読み込むと、背景色が(透過部分のため)白の状態で取り込まれる。
  3. 24ビットBMP形式で保存する。
  4. BMPファイルを、データ化ツール(Image2Lcd)で読み込ませる。
    • BitsPixelを「16bit TrueColor」に、「Reverse color」にチェックを入れる。(ネガポジ反転するため、背景色が黒色に戻る)
  5. この状態で「Save」すると、C言語形式のヘッダファイルを作成できる。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA