TinyGo + Wio Terminal で https 通信を利用してみる。
追記:本記事は元々、天気情報をLEDディスプレイに表示したいという内容を記載していましたが、長くなるため分割することにしました。(2024/11/29)
やりたいこと
- https 通信を利用できるようにする
- Open Weather API で天気の情報を取得する
結果
http 通信では、URL でリクエスト送信・レスポンス取得し、利用することができました。
ただ、https 通信は上手く利用することができませんでした。
補足:
以下に https 通信のサンプルがあり、サンプル自体は動くのですが、真似して作成したコードは上手くできませんでした。
URL ではなく、リクエストデータをそのまま送信しているため、うまく設定する必要がありそうです。しかし、自分はあまり詳しくないため難しそうです
後述している、ビルドエラーが起きる前に使っていた drivers net を使っていたときは、認証処理を簡単に使えたのですが。
実装してみる
TinyGo で Wio Terminal の Wifi モジュールを使う
下記のコードを参考にすることで、簡単に実装できます。
補足:
下記の書籍にも手順が記載されており、公開されているソースである https://github.com/sago35/tinygo-examples/tree/main/wioterminal/initialize
を使用することで簡単に実装できていましたが、Go, TinyGo のバージョンを上げたことで、ビルドエラーが発生するようになりました。
Wifi モジュールで http 通信をして Open Weather API で情報を取得する
Open Weather API を使うための「APIキー」を取得する
API を使用するには APIキーを取得し、URL 入力する必要があります。
手順については以下を参考することで、実施できます。
API で JSON データを取得する
以下のようにすることで1時間ごとの天気情報を JSON で取得することができます。
http://api.openweathermap.org/data/3.0/onecall?lat=34.69&lon=135.50&exclude=current,minutely,daily,alerts&appid={APIキー}
補足:
- lat/lon:緯度と経度を指定します
- 今回は大阪市のデータを取得しています
- exclude:不要なデータを指定します
- 今回の場合は hourly 以外のデータは不要なので省いています
Wio terminal からリクエストを送信し、JSONデータを受け取る
上記で記載している drivers example/net と同様に http.Get() を実行し、帰ってきた Body を json.Unmarshal することでデータを構造体に格納することができます。
$ tinygo flash -target=wioterminal -size short -monitor --stack-size 20KB
code data bss | flash ram
353064 10568 32356 | 363632 42924
Connected to COM21. Press Ctrl-C to exit.
RTL8720 firmware version : 2.1.3
MAC address : XXX
Connecting to Wifi SSID 'XXX'...CONNECTED
DHCP-assigned IP : XXX
DHCP-assigned subnet : XXX
DHCP-assigned gateway : XXX
date : 2024/11/29, hour : 22, weatherID : 02
date : 2024/11/29, hour : 23, weatherID : 10
date : 2024/11/29, hour : 00, weatherID : 02
date : 2024/11/29, hour : 01, weatherID : 10
date : 2024/11/29, hour : 02, weatherID : 03
date : 2024/11/29, hour : 03, weatherID : 03
------------------------------------------
補足:
データの容量等の問題によりうまくいかなかった場合はうまくデータを減らす工夫が必要そうです
最後に
本記事は、現在作成中の LED matrix で 天気情報を表示する制作記事の一部となっています。ご興味がありましたら、是非そちらもご覧ください。
Discussion