🥲

TinyGo + Wio Terminal で https 通信を利用してみる。

2024/10/12に公開

追記:本記事は元々、天気情報を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 のバージョンを上げたことで、ビルドエラーが発生するようになりました。
https://zenn.dev/iyokan/scraps/e9061b1fdf25ce

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
------------------------------------------

補足:
データの容量等の問題によりうまくいかなかった場合はうまくデータを減らす工夫が必要そうです
https://zenn.dev/iyokan/scraps/7d6edab00ee2fb

最後に

本記事は、現在作成中の LED matrix で 天気情報を表示する制作記事の一部となっています。ご興味がありましたら、是非そちらもご覧ください。

Discussion