TinyGo + Wio Terminal で https 通信を利用してみる。(作成途中)
やりたいこと
LED マトリクスに天気情報を表示する
- 実施内容詳細
- TinyGo で Wio Terminal の Wifi モジュールを使う
- Wifi モジュールで https 通信をして Open Weather API で情報を取得する
- 取得した情報を LED ディスプレイに表示する
- こんな感じのものを作りたい
作り始めてみる
1. TinyGo で Wio Terminal の Wifi モジュールを使う
TinyGo 用のソースコードを作成する
下記の書籍で手順が記載されており、公開されているソースである https://github.com/sago35/tinygo-examples/tree/main/wioterminal/initialize をインポートすることで簡単に実現できます。Go v1.19.0、TinyGo v0.28.0 にてビルドできることを確認済。
ところが、Go, TinyGo のバージョンを上げたところビルドできなくなってしまいました・・・。バージョンは Go v1.22.6、TinyGo v0.33.0。
ビルドエラーの原因・対策
結論
- 原因
- TinyGo の net package が改善されているため
- 対策
- 下記に記載しているコードを元に、改めてコードを作成する
詳細
原因について、詳細は理解できていませんが、TinyGo に詳しい方に相談したところ、「最近 net package 付近が改善されているためであり、改めてリンクのコードをベースに再スタートするのが良いです。Wio Terminal の設定等も自動で行ってくれます。https://github.com/tinygo-org/drivers/blob/release/examples/net/http-get/main.go 」 とのことでした。
調べたこと
ここからは僕が調べたことと考えたことのため、読み飛ばしていただいて大丈夫です。
作成したソースコードとエラーの内容は以下。
- 環境
- OS : Windows 11
- Golang : v1.22.6
- TinyGo : v0.33.0
error while importing tinygo.org/x/drivers/net/http: package net/http/httptrace is not in std (C:\ユーザー名\AppData\Local\tinygo\goroot-735a7af6b5269abed7cd758327e230357e54f7a3e312d061f95ea5cdbd42d764\src\net\http\httptrace)
package main
import (
"fmt"
"time"
"github.com/sago35/tinygo-examples/wioterminal/initialize"
)
var (
ssid string
password string
)
func main() {
_, err := initialize.Wifi(ssid, password, 10*time.Second)
if err != nil {
fmt.Printf("%s\n", err)
time.Sleep(5 * time.Second)
}
}
module main
go 1.22.6
require github.com/sago35/tinygo-examples v0.2.0
require (
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
golang.org/x/text v0.3.7 // indirect
tinygo.org/x/drivers v0.23.0 // indirect
)
go.mod の「tinygo.org/x/drivers v0.23.0 // indirect」に対して、package net/http/httptrace is not in std
というエラーが出ており、goroot を見てみると確かに net/http/httptrace がありませんでした。今まではエラーにならずにビルドできていたのですが・・・。また、Go, TinyGo の古いバージョンを再インストールしましたが、同様のエラーが発生しました。
とりあえずは、あまり調べすぎても作業が進まないので、調査は保留にしようと思います。
また、「net package 付近が改善されている」ということについては TinyGo v0.31.0 より、
net: replace entire net package with a new one based on the netdev driver
と記載されている通り、 net → netdev, netlink を使用するような構成になっているようです。
2. 以降
実は一度実装済ではありますが、上記の通り、ソースコードを更新しなければならなくなったため、更新してから書きます。とりあえずは自分と同じようにエラーで困る人がいるかもしれないと思い、記事を作成した次第です。
ちなみに、試作品としては ↓ ような感じになっています。
Discussion