Goでキーボードファームウェアを作る (1)環境構築

Go言語を使ってキーボードファームウェアを作ってみました。
(厳密には「TinyGoおよびtinygo-keyboardを使って」、ですけど)
思っていたより簡単だったので、その簡単さを記事にまとめます。

まずは環境構築から。

目次


0. おことわり

この記事は2023年8月時点の情報に基づいています。
そのため、あなたがこの記事を読んでいる時点では、古い情報になっている可能性があります。

また、一個人である私が試した結果をまとめた記事になっています。
そのため、この記事の内容が正しいという保証はどこにもありません。
あくまで一つの事例として参照するにとどめてください。

1. 作業PCについて

以下のPCに環境を構築しました。

  • Windows 11 Pro 22H2 (22621.2134)
  • WSL 2
    • Ubuntu 20.04.5 LTS
    • Git がセットアップ済み

2. 環境構築

2-1. Goをインストール

まずGoをインストールします。
v1.18以降が推奨らしいです。

bash
1
2
3
4
5
$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt update
$ sudo apt install golang-go
$ go version
go version go1.20.7 linux/amd64

1.20.7がインストールされました。
1.18以降なので問題ないでしょう。

2-2. TinyGoをインストール

次にTinyGoをインストールします。
2023/08/28時点の最新は0.29.0でした。

bash
1
2
3
4
$ wget https://github.com/tinygo-org/tinygo/releases/download/v0.29.0/tinygo_0.29.0_amd64.deb
$ sudo dpkg -i tinygo_0.29.0_amd64.deb
$ tinygo version
tinygo version 0.29.0 linux/amd64 (using go version go1.20.7 and LLVM version 15.0.0)

2-3. その他のインストール

AVR向けのインストール。
使うかどうかわからないけど念のため入れました。

bash
1
$ sudo apt-get install avrdude

2-4. tinygo-keyboard の clone

tinygo-keyboard を、GitHub上の公式リポジトリからcloneします。

bash
1
2
$ git clone git@github.com:sago35/tinygo-keyboard.git
$ cd tinygo-keyboard/

3. 動作確認

tinygo-keyboardで使えるボードは、 /usr/local/lib/tinygo/targets/ にjsonファイルがあるようです。
今回はRP2040-Zeroをターゲットにしたいので、あるかどうか見てみます。

bash
1
2
$ ls /usr/local/lib/tinygo/targets/*rp2040-zero*
/usr/local/lib/tinygo/targets/waveshare-rp2040-zero.json

waveshare-rp2040-zero という名前でした。
試しに既存キーボードのファームウェアを、RP2040-Zero向けにビルドしてみます。

bash
1
2
3
4
5
$ tinygo build -o fric10key.uf2 --target waveshare-rp2040-zero --size short ./targets/fric10key/
code data bss | flash ram
73704 4 6112 | 73708 6116
$ ls fric10key.uf2
fric10key.uf2

ビルドできたようなので、環境構築はできたとみなします。

次回は自設計キーボードのファームウェアを作ります。

4. 参考資料