激安マイコンCH32V003を使って、キーストロークを入力する1%キーボードを作る

tl;dr

  • CH32V003は秋月で60円で買える激安マイコンですが、USBデバイスペリフェラルはありません
  • CH32V003にはrv003usbというUSBデバイススタックがあり、USBキーボードを簡単に実装できます
  • キーストロークを入力する1%キーボードを作りました
  • 呼び出しボタン付きの収まりの良いケースに入れた

できたものと経緯

x.com

タイプすると、"74th!"と入力されます。パスワードとか、特定の操作を素早く行いたいときに便利なものを作ろうとしました。

サイズを小さくしたく、マイコンボードではなくマイコン単体を組み込みたいと思いました。 そこで激安マイコンCH32V003を使うことにしました。

CH32V003とは

CH32V003は74thが愛用している激安マイコンです。過去に解説書を書いてしまうほど、自分の電子工作に欠かせないマイコンです。

74th.booth.pm

CH32V003には、USBデバイスペリフェラルがありません。 CH32V003のファームウェア開発ではch32funを利用していますが、その中にrv003usbというUSBデバイススタックがあり、USBキーボードを簡単に実装できます。

設計した基板

作成したKiCadファイルは以下で公開しています。

ポイントはrv003usb用のUSB周りの配線です。PD3、PD4をUSBのD+、D-に接続し、USBのプルアップ抵抗(1.5kΩ)をPD5に接続します。

後から気づいた反省点としては、RGB LEDをSPIのPC6に接続しなかったことです。 RGB LEDのドライバとして、SPI DMA転送を使えたのですが、SPI MOSIであるPC6に接続していなかったために、ch32funに含まれているSPI DMAドライバが使えませんでした。 代わりに、CPUでbitbangしてRGB LEDを制御するドライバを使用することになりました。 RGB LEDはSPI MOSIに接続する癖を付けたいです。

rv003usbでファームウェアを作る

rv003usbには、マウス、キーボードのサンプルコードがあります。

github.com

このコードは、1秒ごとに"B"キーを押して離す動作を繰り返すコードになっています。

これを書き換えて、以下の機能を付けました。

  • キーの押下を検出する
  • RGB LEDを点灯する
  • ASCIIコードの文字列で組み込んだ文字列をキーストロークとして入力する

TinyUSBのコードの中に、ASCIIコードをキーコードに変換するコードがあり、それを引用して、ASCIIコードの文字列をキーストロークに変換できました。

展示用にケースを作る

せっかく作ったので、天下一キーボードわいわい会Vol.10で展実しようと思い、ケースを製作しました。 アケコン用ボタンを使い、単体でもガジェットっぽく使えるようにしました。 狙い通り、呼び出しボタンのような雰囲気になりました。

コードとケース

製作したコードとケースのデータは以下で公開しています。

github.com

github.com

まとめ

妻に「パスワードを簡単に入力できるデバイスを作ったよ!」と言ったら、「そんな危ないものお家の中に置かないで!」と言われました。 デモでは「74th!」と入力してくれるデバイスになっています。

スイッチにDurock Ice King Tactileを付けたところ、透明なハウジングがよく光を通してパッと光り、癖になり、見ていて飽きないものになりました。

rv003usbでのキーボードは今のところちゃんと動いています。 確実性のあるキーボードを使いたいならばUSBデバイスペリフェラルを持つマイコンを使うことをお勧めします。 普段使い用のキーボードを作るマイコンとしては、QMK Firmwareを使ってカスタマイズしたいので、rv003usbを使うことは私はないでしょう。 SparrowSv3では右手キーボードのマイコンとしてCH32V003を組み込んでいます。

最後に以下は製作したキーボードでタイプした文字列です。

74th!74th!74th!74th!74th!74th!74th!