今年のゴールデンウィークのオモチャは、Raspberry Pi Picoでした。
作ろうと思ったのは、天気予報のデータを自動取得して、翌日の天気で深夜電力による蓄電量を決め、EchonetTimerに設定するというものです。(今は、手作業でブラウザから設定。)
- 翌日が晴れなら、深夜電力による充電は抑えめにする。
- 翌日が雨などで十分な日照が得られそうにない場合は、深夜電力でしっかり充電する。
まずは、天気予報データをRaspberry Pi Picoで取得し、LCDに天気情報表示してみようと思いました。下の写真は(表示部分のみの)完成状態です。
日付の下に表示している3桁の数字(211と101)が天気コードです。
次の目標は、この天気コードと日付を組み合わせて、蓄電量を自動算出することです。
課題の抽出
3点ほど、解決する必要のある課題が見つかりました。(これだけでゴールデンウィークが潰れました。😢)
- イーサネットHATと液晶モジュールHATを同時接続したいが、消費するGPIOピンが重複している。
- イーサネットHATのSPI通信用GPIO(16~21)が、液晶モジュールHATのボタン群と被っているので、どちらかのピンをずらす必要がある。
- イーサネットHATのSPI通信用GPIO(16~21)が、液晶モジュールHATのボタン群と被っているので、どちらかのピンをずらす必要がある。
- 天気に関する情報は気象庁サイトで公開されているが、httpsアクセス(SSL通信)を行う必要があり、証明書の解決が必要となる。
- 天気予報データは、気象庁サイト(埼玉県の場合)からjson形式のテキストとして取得できます。
- 天気アイコンは、気象庁サイト(晴れの場合)からpng形式の画像データとして取得できます。
- 天気アイコン(透過png形式)をそのまま16ビットBMP変換して液晶モジュールに表示させると、背景色だけ白色になってしまう。(LCD全体は背景が黒色、アイコン周辺だけ背景が白色となってしまい、見栄えがよくない)
各課題の解決
1. イーサネットHATと液晶モジュールHATの共存(ピンレイアウトの変換)
- ピンレイアウト変換基板を作成しました。(裏面をパターンカットして、他のピンに接続し直す)
2. 天気予報データの取得方法(Arduino環境でのSSL通信)
- BareSSL Trust Anchors Generatorに気象庁サイトのURL(www.jma.go.jp)を入力すると、C言語形式のテキストが作成される。(コピペして、ヘッダファイルとして保存する。)
- ヘッダファイルで定義されている、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形式)をイイ感じの表示用データに変換する手順
- アイコン画像をポジネガ反転(透過部分はそのまま)する。
- 画像の色を反転させる(ネガポジ反転)を使わせて頂きました。
- 晴れ(反転前)のアイコン画像
- 晴れ(反転後)のアイコン画像
- ペイントで読み込むと、背景色が(透過部分のため)白の状態で取り込まれる。
- 24ビットBMP形式で保存する。
- BMPファイルを、データ化ツール(Image2Lcd)で読み込ませる。
- この状態で「Save」すると、C言語形式のヘッダファイルを作成できる。