DitDahChatに電鍵を接続するには(1)マウスを改造する、(2)USBシリアル変換ケーブルを介して接続する、(3)USBキーボードエミュレーションを実装したアダプターを使用する、の3種類があります。とくに(3)は遅延がほぼないそうで、DitDahChatで使っているという話をブログやSNSで見かけます。
このUSBキーボードエミュレーションを使った打鍵方式は、海外のインターネット電信システムであるVBandで使われています。VBandのサイトではVBand用のアダプターが頒布されています。VBandはキーボードの [ と ](日本語106キーボードの場合は @ と [ )、左右CTRLキーで打鍵できるようになっています。そのキーの入力をアダプターが代わりにするという仕組みです。
たしかにこの方法なら端末からはUSBキーボードとして見えるため、PCでもモバイル端末でも使えます。USBシリアル変換ケーブルのようにOSやドライバーの対応状況を意識する必要もありません。
これまでにDitDahChatでもVBandのアダプターを使えるようにしてほしいというリクエストもありました。そこで新しいDitDahChatではVBandと同じキーボードのキーでも打鍵できるようにしました。VBandのアダプターも使えますし、JJ2XMJさんが次のDitDahChat/VBand用のアダプターを頒布されています。
USBキーボードエミュレーターであれば、これまでに使ってきたRaspberry Pi Pico 2でもできそうです。そこで、Raspberry Pi Pico 2を使ってDitDahChat用USBアダプターができるか試してみることにしました。アダプターの名前は「DitDahChat Adapter Pico」とします。
作成にあたり、次のブログ記事を参考にさせていただきました。
- MicroPython で USB HID の使い方を調べてみる①
- MicroPython で USB HID の使い方を調べてみる②
- MicroPython で USB HID の使い方を調べてみる③
まず、Raspberry Pi Pico 2(以下、Pico)上のMicroPythonをリモート制御するmpremoteをPCにインストールします。
> pip install mpremote
次にPicoにmicropython-libのusb-device-keyboardをインストールします。
> mpremote mip install usb-device-keyboard
これで準備ができましたので、USBキーボードエミュレーターのコードを作成していきます。micropython-libのサンプルをもとに次のようにしました。
import usb.device from usb.device.keyboard import KeyboardInterface, KeyCode, LEDCode from machine import Pin import time KEYS = ( (Pin.cpu.GPIO16, KeyCode.LEFT_CTRL), ) class ExampleKeyboard(KeyboardInterface): def on_led_update(self, led_mask): pass def keyboard(): for pin, _ in KEYS: pin.init(Pin.IN, Pin.PULL_UP) k = ExampleKeyboard() usb.device.get().init(k, builtin_driver=True) keys = [] prev_keys = [None] while True: if k.is_open(): keys.clear() for pin, code in KEYS: if not pin(): keys.append(code) if keys != prev_keys: k.send_keys(keys) prev_keys.clear() prev_keys.extend(keys) time.sleep_ms(1) def main(): keyboard() if __name__ == "__main__": main()
最初は左CTRLキーのみとします。GPIO16のピンの状態を見て左CTRLを送信します。
Picoの方は次のように配線しました。タクトスイッチを押すと左CTRLが押された状態になります。

新しい方のDitDahChatに接続してみたところ、タクトスイッチの押下に合わせて打鍵できました。
今後はDitDahChatのエレキーモードでも使えるように右CTRLの追加やPicoへの電鍵の接続、Picoに実装したエレキーでの打鍵なども試してみたいと思います。
JI1JDI
ゆるく楽しくアマチュア無線とプログラミングを楽しんでいます。 scrapbox.io