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を置いて使いやすくすることができました。

技術書典13 で面白かった本

多くの技術同人誌が発行されました。 そのうち、私が手にした数少ない書籍の中で、私にうけた本を紹介します。

最近の興味がハードウェア寄りになっているため、その本が多くなっています。 しかし、最初に紹介する本は、ソフトウェア寄りの方にもすごくおすすめです。

ハードウェア記述言語NSLで作るオレオレRISC-V CPU (こやまん)

techbookfest.org

タイトルの通りハードウェア記述言語で、RISC-V CPUまで作っちゃう本。

最初がハードウェア記述言語 NSL の解説になっていて、ふむふむと、こんな簡単なコードでハードウェアになるのかと、理解を深めれます。 ハードウェア記述言語といえば Verilog ですごく敷居の高いイメージがありましたが、これをみると、おっ、私にも扱えるんじゃないかと思わされます。

後半、NSL を使って自作CPUの開発に進んでいきます。 RISC-Vの簡単な命令を実装し、これは理解できます。 そこから、パイプライン、アウト・オブ・オーダー実行を実装に進みます。 コードを細かく理解できるまでに読み込めませんでしたが、ブロック図で図解しているため、なんとなくわかった気にさせてくれます。

最後に、RISC-Vのテストを通す、という構成になっています。

簡単なNSL文法からスタートして、実際にRISC-V のCPUの実装を追体験させてもらえることに高揚し、最後テストを通して締める。 それほど厚くない本ですが、60ページにそれが凝縮されており、非常に読み進めやすく、面白く読むことができました。

今回の技術書典13 で個人的に最も刺さった本になりました。

詳説カシオミニ(はどら秘密研究所)

techbookfest.org

生まれたときから電卓が100円で買えた世代なので、カシオミニがどのようにすごいのかわかりません。 しかしこの本を読むと、どのようにカシオミニが誕生し、発売当時どのようにうけ、市場に広まっていったのかを追体験できます。

さらに、安価な電卓とするためにどのような工夫がされているかという解説があります。 いくつものハードウェアの工夫が合って、自作キーボードでハードウェアを作っている自分にはすごく面白く読めました。

最後に、カシオミニの操作法の説明があります。 6桁しかないカシオミニでの、減算の仕方、除算の表示の仕方に、自分の知っている電卓と異なり、面白いと思いました。 表の形で入力順が書かれていて、工夫されていて、読みやすかったです。

これだけの内容が 25 ページと、簡潔にまとまっていて、飽きることなく読み終えることができました。

秋葉原で探すコネクタの選び方(Motomation)

techbookfest.org

紹介している数が41と多いのが、おかしかったです。 様々なコネクタが秋月でも売っていますが、初心者にとっては何を買えばよいのかわかりません。 多数紹介されていますが、これを使う良いという紹介がされていて、非常に助けになります。 では、それ以外のコネクタはどうなのか、それらについても、鉄板のコネクタと同じ分量と熱量で紹介されています。 この大電流をするならコネクタは使えるだろうというような、各コネクタの良いところが細かく書かれているのは、自分は使うことはないだろうけれど、面白く読めました。

あと、表紙の女子高生がコネクタ選びに悩んでいるイラストはウケました。

ハッキング・ラボで遊ぶために辞書ファイルを鍛える本(ミライ・ハッキング・ラボ)

techbookfest.org

自分がハッキングで使う辞書を作ることはないですが、それを作る時に使えるもの、考えること、やってみたことを追体験することができ、非常に面白く読めました。

SSDはHDDの夢を見るか?(犬小屋研究所)

techbookfest.org

SSDは、HDDより壊れにくいというイメージがありますが、それが本当なのかを検証しています。

検証の方法が、実際に著者が動かした結果ではなく、公開されているデータセットを分析して、結論を導き出しています。

そして得られた結論が、著者も書いていますが、思ったものとちがったところにゴールしていて、驚きともに面白かったです。

罪!?詰み?積みボード選手権 Vol.1(野良ハック)

techbookfest.org

IoTLT のパネルディスカッション的な講演を、テキストに描き下ろしたものになっています。

次々とセンサーや、パーツ、マイコンボードが登場し、どうしてそれに惹かれたのか、そして積んだのかを説明されていきます。 面白かったのが、そのパーツについて詳しくない方も参加されていて、その場で解説を読んだり、詳しい人から話を聞いたりして、理解を深めていくのが、一緒にパーツについて詳しくなる追体験ができて、面白く読めました。

すべて会話の描き下ろしのため、読みやすく、内容も浅すぎず、深く難しいところまで行かず、いろいろなものをつまみ食いするように面白く読めました。

私の新刊『土曜日のRaspberry Pi Pico』も

techbookfest.org

Raspberry Pi Picoの本といいつつ、表紙がすでに国内で買える Pico ではない本です。

WiFi対応 Pico W で、BQとAWS IoT につなぐ記事と、 Picoのマイコン RP2040 を使った自作ボードを作って苦しんだ記事です。

RP2040 を手はんだ実装で、自分のガジェットに組み込みたい方におすすめです。 そんな方いるのか?と思われますが、オフラインの時にそんな方2人にお会いすることができました。

物理書籍には、この開発ボードの基板がおまけで付きます!

ESP8266-DevKitS で ESP32-C3-WROOM-02 の書き込みをする

ESP8266 の後継のような、安価なWiFIBluetooth搭載マイコンモジュールESP32-C3 に、手はんだ実装ができる ESP32-C3-WROOM-02 が技適に申請されていいます。 ESP32-WROOM-32 よりも ESP32-C3-WROOM-02 モジュールは小型で安価なこともあり、これでガジェットづくりができるようになったら良いと思いました。 ESP32 を使って、電卓兼Bluetoothテンキーガジェットを作っていて、更に小型のを作りたいと考えています。

ESP32-WROOM32-32 でガジェットキットを販売する時には、以下の安価なライターを使って、イメージを書き込んだ上で販売していました。

https://ja.aliexpress.com/item/4000194935231.htmlja.aliexpress.com

これと同じことができる ESP32-C3-WROOM-02 用のモジュールを探していました。 上記のリンクの ESP8266 用が使えるのではと期待していましたが、ESP32-C3-WROOM-02 には使えませんでした。

使えそうなモジュールとして、ESP-WROOM-02(ESP8266)用のモジュール、ESP8266-DevKitS を見つけました。こちらも、スプリングピンを採用して、モジュールの取り外しが可能です。

秋月電子通商 ESP8266開発ボード ESP8266-DevKitS

https://akizukidenshi.com/catalog/g/g117257/

ESP8266-DevKitS User Guide

https://www.espressif.com/sites/default/files/documentation/ESP8266-DevKitS_user_guide__EN.pdf

そのままでは使えませんでした。

ESP-WROOM-02(ESP8266) では、IO0 を 0(GND)にして Reset することで Download Mode になることができましたが、ESP32-C3-WROOM-02 では以下をする必要がありました。

ESP32-C3 のドキュメントにはさらに、IO2 を1にするように記述がありましたが、ESP8266-DevKitS ではそれを行わなくても書き込みをすることができました。

https://www.espressif.com/sites/default/files/documentation/esp32-c3-wroom-02_datasheet_en.pdf

書き込みしているところ