TinyGo + Wio Terminal で https 通信を利用してみる。(作成途中)

2024/10/12に公開

やりたいこと

LED マトリクスに天気情報を表示する

  • 実施内容詳細
    1. TinyGo で Wio Terminal の Wifi モジュールを使う
    2. Wifi モジュールで https 通信をして Open Weather API で情報を取得する
    3. 取得した情報を 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 付近が改善されているためであり、改めてリンクのコードをベースに再スタートするのが良いです。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
go.mod の 「tinygo.org/x/drivers v0.23.0 // indirect」に対してのエラー文
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)
main.go
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)
	}
}
go.mod
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