🐁

【TinyGo】ネームバッジを Wio Terminal で作るのは高くないか?

に公開

はじめに

TinyGo 界隈では割とお馴染みの Wio Terminal

https://akizukidenshi.com/catalog/g/g115275/

このデバイスを買えばこれだけでイベントで役立つこと間違いなし(?)なネームバッジが作成できます。

https://zenn.dev/uji/articles/wio-terminal-tinygo

かくいう私も購入して作りました。

https://x.com/otakakot/status/1977629194193699198

半田付け不要でお手軽にネームバッジが作成できるー!!!???

本当にそうでしょうか。1個 5700 円ですよ。
ネームバッジにしか使わないのにそれはちょっと高すぎないか。
多機能な Wio Terminal をネームバッジとして使うには贅沢すぎないか。

ということでもうちょっと安くできないかね?と思い手を動かしてみました。
この記事はそのときの奮闘記(?)になります。

結論、半田付け不要というお手軽な条件で Raspberry Pi Pico H + Pico-LCD-2
の組み合わせでネームバッジを作成できました!(ディスプレイを小さくすればもう少し安くできそう)

https://akizukidenshi.com/catalog/g/g118085/

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-6F3F

お値段は 2900(920+1980) 円です!ほぼ Wio Terminal の半額です!素晴らしい!

簡単に動くだろうなって思って購入したものの、意外につまづいたので実際に動かすまでの過程を共有します。

完成したネームバッジ

裏面

Wio Terminal との比較

サンプルコード

動かし方だけ知りたい方、以下のリポジトリにサンプルコードを配置しているのでご参考ください。

https://github.com/otakakot/picobadge

少しだけですがボタン操作やシンプルなディスプレイ表示のサンプルコードも以下のリポジトリに保存しています。

https://github.com/otakakot/sample-tinygo-raspberry-pi-pico

つまずき0:どうすればいいかわからない

そもそもどうやってディスプレイを表示すればいいのだろうか。そこからです。

https://www.waveshare.com/wiki/Pico-LCD-2

https://tinygo.org/docs/reference/microcontrollers/pico/

まったく見当もつかなかったので仕様書をもとに Gemini に聞きました。
以下のドライバを使えばいいことがわかりました。

https://github.com/tinygo-org/drivers/blob/release/st7789/st7789.go

つまずき1:ビルドが通らない

examples があったのでこれをそのまま使いましたが、ビルドが通りません...

https://github.com/tinygo-org/drivers/blob/release/examples/st7789/main.go

どうやらピン番号の設定が違ったみたいです。
これは仕様書と睨めっこして正しいピン番号を設定してあげました。

display := st7789.New(
-	machine.SPI0,
-	machine.P6, // TFT_RESET
-	machine.P7, // TFT_DC
-	machine.P8, // TFT_CS
-	machine.P9, // TFT_LITE
+	machine.SPI1,
+	machine.GP12, // RST
+	machine.GP8,  // DC
+	machine.GP9,  // CS
+	machine.GP13, // BL
)

つまずき2:ディスプレイが映らない

ピン番号の設定を直しビルドは通りました。
いざ書き込んでみると次はディスプレイが映りません...
調べてみると SPI の設定が足りていなかったようです。

machine.SPI1.Configure(machine.SPIConfig{
	Frequency: 62_500_000, // 62.5MHz
	SCK:       machine.GP10,
	SDO:       machine.GP11,
-	SDI:       nil,
+	SDI:       machine.GP12, // ダミー - ST7789は受信しないが、SPIドライバが要求
	Mode:      0,
})

つまずき3:ディスプレイ全体が表示されない

SPI の設定を修正することでディスプレイは表示されました!
しかし、ディスプレイの表示がなんだかおかしいです。
ただ、これはなんとなくディスプレイの表示する角度が違うのだなと直感でわかりました。

display.Configure(st7789.Config{
	Width:        240,
	Height:       320,
-	Rotation:     0,
+	Rotation:     st7789.ROTATION_90, // 90度回転で横向き表示
	RowOffset:    0,
	ColumnOffset: 0,
})

おわりに

つまずきましたがなんとかお手軽ネームバッジを作ることができました。
はんだ付けが必要になりお手軽さはなくなりそうですが、以下のパーツを組み合わせればもっと安く作れそうな気がします。

https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-6633

https://akizukidenshi.com/catalog/g/g131019/

Discussion