AZ1UBALLで、トラックボールマウス作成

AZ1UBALL とは、パレットシステムさんが販売する、I2C制御の1Uトラックボールモジュールです。

AZ1UBALL を使って、ちょっとしたトラックボールを作って遊びました。

AZ1UBALL とは

キーボードの1キーのサイズ(19mm四方)で収まるため、自作キーボードにちょこっとマウスを追加したい用途にマッチした商品です。 かつて、自作キーボードで使われていた1Uトラックボールモジュールが終売になってしまい、1Uトラックボールを求めるユーザが露頭に迷っていたところ、パレットシステムさんが販売を開始した非常にありがたい商品です。

booth.pm

I2Cとしての仕様は、Pimoroni で販売されている RGB トラックボールと同じ仕様に実装されています。

Trackball Breakoutshop.pimoroni.com

AZ1UBALL の Firmware のコードも公開されていて(MIT License)、その仕様はコードから追うことができます。

github.com

I2C の 5バイト読み取ると、以下のデータ取れます。

  1. 左の移動量
  2. 右の移動量
  3. 上の移動量
  4. 下の移動量
  5. クリックしたかどうか(0x80)

AZ1UBALL は 2つのモードをもっており、I2Cで0x91を書き込むと、早く移動すると加速度が上がるような機能が利用でき、 0x91を利用するだけで、割といい感じになりました。

CH9329 で USB Mouse を実装する

CH9329 を使ってみたかったこともあり、Raspberry Pi Pico から I2C でAZ1UBALLを読み取り、CH9329 で USB マウスとして振る舞わせるように実装してみました。

CH9329 は UART で制御する USB HID キーボード・マウス エミュレータICです。 UART が話せれば、実質的にどんなマイコンであっても USB キーボード、マウスとして使うことができます。

100円+送料程度で買うことができ、マウス、キーボードの開発を簡単にしてくれます。

www.aliexpress.com

CH9329 の制御については以下の本が詳しいです。

techbookfest.org

マウスを送るコマンドを作るのも、さっと実装できます(上記書籍のコードを借りています)。

github.com

CircuitPython で adafruit_hid を利用して USB Mouse を実装する

Raspberry Pi Pico には USB デバイスの機能もついているため、CH9329のような IC を使わなくても、USB デバイスを実装することができます。

MicroPython では現状 USB デバイスを実装できるようなモジュールはありませんが、Adafruit が提供する CircuitPython では USB デバイス の機能が利用でき、さらに HID Keyboard、Mouse として実装するモジュールも提供されています。 CircuitPython は MicroPython の fork プロジェクトですが、MicroPython では MicroPython 特有にアレンジされた API を、ArduinoライブラリやCPython 寄りに整理された感じになっています。

リファレンス

docs.circuitpython.org

モジュールのダウンロード

github.com

このモジュールを使うと、マウスの移動が mouse.move(x=10, y=10) 、クリックが mouse.press(Mouse.LEFT_BUTTON) というように1命令で実装できます。

これを使って、CircuitPython で実装し、さらに押したまま上下に動かすとスクロールになるスクロールボタン、左、右のクリックボタンを追加しました。追加のボタンには、Choc 用の無限の可能性 PCB を利用しています。

github.com

失敗の話

私の自作キーボード Sparrow62v2 は、左手にラズピコ、右手にIOエキスパンダのMCP23017にI2Cで通信するようになっています。 既に右手にI2Cが来ているので、ここから配線して AZ1UBALL にアクセスできないかやってみていました。 ただケーブルを増やしただけで、既にI2CをTRRSケーブルでつないでいるせいか、キーボード自体が不安定になってしまい、キーボードが使えないと生産性が著しく落ちることもあり、別のラズピコで利用するように変更しました。

終わりに

私の作っている Sparrow62v2 のトラックパッド版では、Hキーのすぐ左にトラックパッドが置けるようになっています。 この位置に、AZ1UBALLを置いて使いやすくすることができました。