7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TinyGoAdvent Calendar 2024

Day 4

TinyGoで作る自作キーボード体験 - zero-kb02の紹介とTinyGo Keeb

Last updated at Posted at 2024-12-03

TinyGoを使った自作keyboardを作るイベント TinyGo Keeb Tour 2024 in Sendai with Sendai.go が2024-10-12に仙台で開催され参加した。このイベントで配布されたキーボードzero-kb02 について公式サイトなどから情報をピックアップし整理する。これからTinyGo Keebへの参加を検討される方の参考になればと思う。

https___qiita-image-store.s3.ap-northeast-1.amazonaws.com_0_1256483_3e994335-2448-1100-5cdb-9ebb8fdccb44.jpg
写真)イベント当日の仙台は晴天に恵まれた。

概要

このキーボードはRP2040-Zeroを使ったマイコンボードの性格が強い。USBをパソコンに繋いでキーボードとして利用できるが、パソコンに接続しなくても電源を与えればマイコンとして単独で動作する。周辺機器と公式サイトのサンプルを次の表にまとめた。

項目 詳細 公式サイトサンプル
マイコンボード RP2040-Zero 03_usbcdc-serial,04_usbcdc-echo
マイコンボード フルカラーLED 01_blinky1
キーマトリクス用スイッチ 4x3 MXメカニカルキー ソケット式 12_matrix_basic
キーマトリクス用フルカラーLED 4x3 SK6812MINI-E  02_blinky2
ディスプレイ 0.96インチOLEDディスプレイ SSD1306 I2C接続 128x64 07_oled,08_oled_tinydraw,09_oled_tinyfont,10_oled_rotated,11_oled_animation,16_oled_inverted_hw,17_oled_japanese_font
入力デバイス アナログジョイステック(SW付き) 06_joystick
入力デバイス ロータリエンコーダ(SW付き) 05_rotary,13_rotary_button
拡張端子 12ピン端子(2.54mmピッチ2x6)
拡張端子 I2C Grove端子

ハードウェア

zero-kb02の公式サイトに回路図とガーバーがある。

回路図およびガーバー 

マイコンボード RP2040-Zero

zero-kb02にはWaveshare社が開発したRP2040-Zeroを搭載している。RP2040-ZeroはSoC(System On Chip)にRP2040を採用したコンパクトなマイコンボードである。SoCとはCPUを中核としてメモリや通信機能などを1チップに統合したICである。Raspberry Pi Picoと同じSoCを使用しているので、Raspberry Pi Picoと互換性が高い。その一方でピン数を減らし小型化、USB Type-Cを採用した実用的な設計である。
Waveshareのサイト

image.png

I/O割り当て

pin I/O モード 位置 内容
0 GP0 入力プルアップ 左上 Joystick押込SW
1 GP1 出力 キー真下 SK6812MINI-E カラーLED
2 GP2 入力プルアップ 右上 ロータリエンコーダ押込SW
3 GP3 入力プルアップ 右上 ロータリエンコーダA
4 GP4 入力プルアップ 中央 ロータリエンコーダB
5 GP5 出力 中央 キーマトリクスCol1
6 GP6 出力 中央 キーマトリクスCol2
7 GP7 出力 中央 キーマトリクスCol3
8 GP8 出力 中央 キーマトリクスCol4
9 GP9 入力プルダウン 中央 キーマトリクスRow1
10 GP10 入力プルダウン 中央 キーマトリクスRow2
11 GP11 入力プルダウン 中央 キーマトリクスRow3
12 GP12 I2C 上/背面(I2C Grove端子) OLED SDA / I2C Grove
13 GP13 I2C 上/背面(I2C Grove端子) OLED SCL / I2C Grove
14 GP14 汎用 背面(拡張端子) EX01
15 GP15 汎用 背面(拡張端子) EX02
- GP16 出力 マイコンボード上 WS2812B カラーLED
26 GP26 汎用 背面(拡張端子) EX03
27 GP27 汎用 背面(拡張端子) EX04
28 ADC2 アナログ入力 左上 Joystick Y軸
29 ADC3 アナログ入力 左上 Joystick X軸

キーマトリクスとカラーLED

キーマトリクスとはキーボードで一般的に使われている回路である。全てのキースイッチに個別のピンを割り当てるのではなく、キースイッチをRow(行)とCol(列)の格子状に配置して接続する。これによってピン数を大幅に節約している。zero-kb02では12個のキースイッチが使われているが、通常の個別にキースイッチを割り当てると12ピン必要である。しかし、キーマトリクス配置では7ピン(Row 3ピン + Col 4ピン)しか使用しない。よくあるパソコンで使われているテンキー付きキーボードでは100個以上のキースイッチからの入力を20~25ピン程度で実現している。
カラーLEDはSK6812MINI-Eをデイジーチェーン(数珠繋ぎ)したものがキースイッチの下に配置されていて、GP1に接続されている。

キーマトリクスとカラーLEDおよびキースイッチの関係図を作成した。
image.png

その他、zero-kb02ではキーマトリクスをプルダウンで使用していることに注意する。

その他のデバイス

この記事では詳述しないが、zero-kb02には他にも次のデバイスが実装されている。

  • ロータリエンコーダ:回転操作と押し込みスイッチ
  • アナログジョイステック:X/Y軸の検出と押し込みスイッチ
  • OLED:グラフィカルディスプレイ(128x64)
  • (マイコンボード)USB Type-C端子:電源とパソコン接続
  • (マイコンボード)フルカラーLED

背面端子

拡張機能として外部端子とGrove端子が用意されている。拡張性が高い設計になっている。

それぞれのピンアサインを紹介する。https://github.com/sago35/keyboards より
pinout01.jpg

ソフトウェア

開発環境とビルドおよび書き込み方法(Windows)

次の流れで開発環境を整える:

  • COMポートの確認
    COMポートとはシリアルポートのことである。WindowsではCOM番号で示される。番号は固定されておらず次の方法で確認する。まず、zero-kb02を外しておく。次にWindows11で確認する方法を示す。
    1.コントロールパネルからデバイスマネージャーを起動する。
    2.zero-kb02を接続する。
    3.ポート(COMとLPT)にUSBシリアルデバイス(COM番号)が表示されるので、このCOM番号をメモする。
    image.png
    淡赤部分のCOMをメモする
  • scoopのインストール
    scoopはMicrosoft Windows用のコマンドラインで動作するパッケージマネージャーである。
    インストール方法
コマンドラインからscoopを実行した例
C:\Users\user>scoop
Usage: scoop <command> [<args>]

Available commands are listed below.

Type 'scoop help <command>' to get more help for a specific command.
  • goのインストール
    インストール方法
  • tinygoのインストール 
    インストール方法
  • goplsのインストール
    goplsは"Go please"(ゴープリーズ)と読み公式のGo言語language serverである。VSCodeやVimなどのテキストエデッタはLSP(language server protcol)を使いコード補完などの開発支援を行う。
    インストール方法

ビルドおよび書き込み方法(Windows)

ビルドおよび書き込みをするには、PCとzero-kb02を繋げた状態で次のコマンドを実行する。

シリアルポートはCOMポートの確認でメモしたものを使用する。

  • シリアルポート COM3 プログラム main.go の場合
tinygo flash -port COM3 -target waveshare-rp2040-zero --size short main.go

うまく行けば、自動的にリセットされzero-kb02でコードが実行される。

サンプルプログラム

zero-kb02の公式サイトには概要にあげたように多数のサンプルが公開されているのですぐに試せる。また、TinyGoを使ったプロジェクトは活発で、GitHubにはさまざまなプロジェクトやライブラリが公開されている。zero-kb02はRP2040-Zeroを採用しているのでRaspberry Pi Picoのプロジェクトも流用できることが多い。zero-kb02以外のプロジェクトも本記事のI/O割り当てを参考にすれば動作するものも多いはずだ。

イベントを終えて

自作キーボードの組み立てはハンダごてやニッパーなどの工具も必要でハードルが高いが、このイベントでは工具が人数分用意されていた。電子工作に不慣れな参加者もスタッフと一緒に製作できていた。ハードウェア関連の製作イベントはあまりないが、zero-kb02の開発者の@sago35様をはじめとしたスタッフの方々や他の参加者のおかげで有意義なイベント体験ができた。個人的にはGoやTinyGoの組み込み機器への応用の可能性と理念を少し理解できたと思う。ありがとうございました。

2025年も全国各地でTinyGo Keeb Tourの開催が発表された。自作キーボードやTinyGoに興味がある方はもちろんだが、新しい技術トレンドに触れたい方、実践的なものづくりを体験したい方にも参加をおすすめする。技術的なスキルアップはもちろん、ものづくりの楽しさや開発者コミュニティとの出会いなど、きっと素晴らしい経験が得られるはずだ。

イベントの詳細や申し込みについては、TinyGo Keebのページをご覧いただきたい。

image.png
余興のじゃんけん大会で頂いたgopherを模した基板

TinyGo Keebの他の記事

https://qiita.com/ysaito8015@github/items/148a28ee20f5a48d3cb8
https://zenn.dev/uji/articles/wio-terminal-tinygo

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?