ATSex 等でボタンからのキーボード入力を行う必要が出てきました。
キーボード入力は USB-HID ができるマイコンが必要になります。
USBーHID 対応の安価なSoCとして RP2040 があげられます。
RP2040 はマイコン単体では1ドルですが、フラッシュメモリが別体のため、どうしても2ドル以上となり、割高となります。
さらに安価なチップとして CH32X035 や CH552 等があります。
CH552 は CDC(シリアル) と HID が共存可能ですが、GPIOのピン数が少ないことがデメリットです。
今回は、1個50円の格安マイコン CH32X035 を使用してHID基板を作ってみました。
CH32X035の特徴
- 安い
- ピン数が多い
- USB対応
- USB PD対応
- ArduinoIDE対応
GPIO数
CH32X035はGPIOのピン数が多いことが特徴です。(型番にもよりますが)
CC1/CC2を使用しない場合、最大、25ピン使用可能な CH32X035G8U6 を選定しました。
USB HID/CDC対応
今回の目標はCH552の代わりといて HID と CDC が使用できるようにしたいと考えていました。
しかし、私の能力的にCDCが使用できず、UART で USB-シリアルボード に接続する形で落ち着きました。
このため、売りであるはずの安さが失われてしまいました。
USB PD対応
CH32X035 は USB PD が特徴です。
一応、使用可能にしており、PDから5Vの生成も可能としました。
ボード形状
ArduinoUno のプラットフォームを採用しました。
回路図
プログラム
東京電機大学 鉄道研究部において使用した横浜市営地下鉄のワンハンドルマスコンのプログラムになります。
https://github.com/taisirou/ch32x035-HID
横浜市営地下鉄のワンハンドルマスコンはワンマン対応改造を施されており、ドア開閉に使う車掌スイッチの機能も有しています。
今回、制作したプログラムにはまだそれらが入っていないものになります。
デメリット
当初の目論見だったCH32X035単体でのCDCとHIDの共存が出来ませんでした。
ただし、プログラムの動作上、共存する方が良いかは悩みどころです。
HIDにおいてキー保持が存在するため、プログラムが若干難しくなるということが挙げられます。
このため、HIDとUARTを専用のマイコンボードにするかRP2040のようなデュアルコアのSoCを使う方が好ましいのかもしれません。