⌨️

既存キーボードをAZ-COREで無線化するまでの一部始終~あるいはAZTOOL解説~

2022/08/17に公開

前回までのあらすじ

というわけで、モバイル用キーボードを無線化すべくAZ-COREを購入した。

さ~て、今回の自キ活は?

既存の、特にAZ-CORE用に開発されていないキーボードをAZ-COREで無線運用できるようにする。

Twitterだと簡単だったって言ってる人しかいなかったけど、僕はすごくジタバタしたのでつよつよでない人のために書きます。あと自分用ログ。

僕はWindows10でやったので、OS違う人は適宜読み替えたりしていただきたい。

画像大量、文章長大。

用意したもの

使用するTRRS分岐ケーブルについて

ここで、TRRS分岐ケーブルには注意が必要だ。
遊舎工房を始めとする自作キーボードショップでTRRSケーブルが販売されているので、普段はそれを使えば間違いないのだが、今回は分岐させる必要がある。分岐TRRSケーブルは自作キーボードショップでは取り扱われていない。

そもそもTRRSケーブルはオーディオ機器の接続に使用するケーブルの一種で、4極ケーブルともいう。しかし、この手のケーブルは仕様が錯綜しており、特に4極のものは区別が難しいという事情がある。

なので、似たようなケーブルを買っても使えないことがある。 あった。 そこで、改めてAZ-COREとpanda_microの接続に使用できる分岐ケーブルの条件を整理する。

  • 3.5mmステレオミニプラグ
  • 全ての端子が4極(TRRS)
  • オスメスはどうでもいい。オス-オス-メスでもオス-メス-メスでもオス-オス-オスでもOK
  • 分岐数もどうでもいい。例えば左右分割+テンキーパッドを接続したい場合、オス-メス-メス-メスとかでもOK

特に全部4極というのが曲者だ。条件はわかっても、実際に購入しようとしたとき、製品が条件を満たすか判別するのは容易ではない。
極数が明記されていない場合、「マイクが使用できるか」で判断できることが多い。

例えばこれは、二つのメス端子が3極なので使用できなかったのだが、商品説明の該当部分でいうと

ご注意事項:本2分岐ステレオケーブルはマイク性能は非対応です。

ここで判断できる……いやできなかったんだけど……

実際に接続できた製品としては、以下のものがある。

これを配線した状態の写真が以下だ。

オス側をAZ-COREに接続し、メス側をそれぞれオス-オスTRRSケーブルを介してpanda_microに接続してある。これはイメージしやすいだろう。

これを配線した状態が以下。

オス側をpanda_micro、メス側をそれぞれAZ-COREともう一方のpanda_microに接続してあるわけだが、これには違和感をもたれる方もいらっしゃると思う。
いわば、panda_micro(A)が親、AZ-COREとpanda_micro(B)が子のように見えるが、このケーブル自体には親・子を決定する要素はないので、これもアリだ。

手順

Corne Chocolateをはんだ付けする

まではできたとする。

いや実際にはハンダ不良があったりしてAZ-COREいじりながらドタバタしたけど、本題とは関係ないので詳しく触れない。

AZ-COREにファームウェアを書き込む

ここでライターを使う。
ライターといっても本当に部品だけで、(精神的な)不安と(物理的な)不安定さは否めないので、すごく丁寧に説明する。

まず、パソコンにドライバをインストールする。

僕の場合はCH9102の方だった。

次にライターをAZ-COREに挿す。

(画像は上記リンク先ページより)

さらにUSBケーブル(Type C)でパソコンと接続し、上記リンク先ページの書き込みボタンをクリックする(下掲は2022年8月16日時点でのバージョン)

これでAZ-CORE 本体 が使用可能な状態になるが、「子機」のキーボードを使用するには、いくつか段階を踏む必要がある。

panda_microのアドレスジャンパをはんだ付けする

今回、AZ-COREに二枚のpanda_microを接続する。
ということは、それぞれのpanda_microを識別できなければならない。

そのため、「エキスパンダ設定」で詳しく触れるが、それぞれのpanda_microに別々のアドレスを割り振ることになる。
そのアドレスをどうやって指定するかというと、panda_microのアドレスジャンパをはんだ付けする、というわけだ。

アドレスジャンパとは、次の画像の黄色い枠で囲んだ部分のこと。

(元画像はpanda_micro - パレットシステム - BOOTHより引用、筆者が加工)

次の画像のパターンではんだ付けすることにより、0x20~0x27までのアドレスを指定することができる。

(画像はpanda_micro - パレットシステム - BOOTHより引用)

実際にはんだ付けしたpanda_microが次の写真だ。

これを、ピンヘッダまたはコンスルーでキーボードに取り付けるわけだが、取り付けた状態だとアドレスジャンパが見えないし、ピンヘッダを使用した場合は簡単に取り外すこともできない。

(かくのごとし。ちなみに、この構成だとリセットスイッチもTRRSジャックも必要ないが、当初は普通にPro Microで動かすつもりだったので、付けてそのまんまになっている)

よって、「左が0x20、右が0x21」のように、どちらがどちらのアドレスになっているかをちゃんと覚えておくこと。付箋などを貼っておいてもよい。

パソコンにAZ-COREを接続する

その前に、キーボードにpanda_microを取り付け、TRRS分岐ケーブルでAZ-COREと接続する。

ファームウェアの書き込み時にはライター経由でUSB接続したが、AZTOOLでの設定時、およびキーボードとしての使用時には、Bluetooth接続しかできない。要注意。

というわけで、普通にBluetoothデバイスとして接続する。

まずAZ-COREの電源を入れる。ペアリングモードとかは特にないので、電源を入れるだけだ。
ちなみに、電源スイッチにオン・オフを示すものがないのでわかりにくいかもしれないが、「引く」とオン、「押す」とオフ、写真はオフの状態だ。

電源がオンになると、次の写真のように、m5stackのランプが緑に点灯する。

この状態で、パソコンのBluetooth接続メニューにアクセスし、「AZ-Core」を選択すると接続される。

本来この段階では関係ないことだが、AZ-COREはマルチペアリングに対応していない
つまり、別のデバイスにペアリング済みの場合、接続できない可能性がある。
もし接続がうまくいかない場合、近くにある別のデバイスの接続状況を確認し、ペアリング済みであれば設定を削除しよう。

AZTOOLにAZ-COREを接続する

ここからはパソコン上でのソフトウェア的な作業になる。

作業に用いるのは下記のウェブツールだ。

「キーボードに接続」をクリックすると、検出されたキーボード一覧が出てくる。
先程のBluetoothデバイス一覧では「AZ-Core」と表示されていたが、現状、ここでは Unknown Device (xxxx:xxxx) という表示になってしまうようだ。これを選択しよう。

すると、このようなページに切り替わるはずだ。

ここですぐキーマップ設定すれば、本体のみで4キーのキーボードとしては使えるのだが、今回は後回し。
まずは、panda_microを読み込ませる。

I2Cエキスパンダを追加する

ここが一番わかりづらくて詰まりやすいと思う。ので、かなり細かく分けて記す。

恥ずかしながらI2Cというコトバを知らなかったので調べてみたが、さっぱりわからなかった

まあそんな僕でもできたからあんま怖がりなさんな。
I2Cエキスパンダとは、I2C通信によって親機であるAZ-COREと接続される子機くらいに考えておけばいいだろう。
この場合、panda_micro(とそれに接続されたキーボード)が子機ということになる。

今回用意したCorne Chocolateのような分割キーボードの場合、左右それぞれにpanda_microがあるため、左右それぞれが別々のI2Cエキスパンダとして扱われることに注意が必要だ。

まずは「I2Cオプション」→「IOエキスパンダ追加」と進む。

レイアウト設定

キーレイアウトは、JSON方式で指定する。
といっても自分で書く必要はなくて、Keyboard Layout Editor(以下KLE)で作ればよい。

KLEの使い方については下記が詳しい。

ゆうてまあ、せっかく僕が作ったデータがあるので、Corne miniの人はまんま使ってください。

開いたら、「Raw data」のタブを選択して、表示されるコードをコピーする。

「Download JSON」はしないこと。 いや全くダメじゃないんだけど、必要なコード全体をさらに[]で囲ったものが出てくるので、削除してから使わなければいけなくなる。実際ソレでハマった。

マウスでゴチャゴチャいじくるのがめんどくさい場合、当然レジェンドとかはなくていいし、最低限、行数列数さえ合ってればなんとかなる。
左詰めの格子配列でよければ手書きでもすぐできる。こんな感じでいい。

["","","","",""],
["","","","",""],
["","","","",""],
["","",""]

このようにAZTOOLのフィールドにコピーしたコードをペーストしたら、フィールド外の適当なところをクリックする。

これでコードが反映され、KLEで作ったのと同じレイアウトが表示されるはず。
表示されたら「次へ」をクリックする。

エキスパンダ設定

次に「IOエキスパンダを追加する」をクリックすると、

このようなページに切り替わる。

まず、「アドレス」の右側のドロップダウンリストをクリックし、「panda_microのアドレスジャンパをはんだ付けする」で指定したアドレスを選択する。
この例の場合、左手側なので「0x20」だ。

さらに、Row(行/横)Col(列/縦)のそれぞれについて、対応するピンを選ぶ必要がある。

わかります? 僕はしばらくわかりませんでしたねえ!

Corne Chocolateのpanda_micro(あるいはPro Micro)を取り付ける部分を見ると、確かにRow0~3、Col0~5の位置がプリントしてある。ちなみに、左右(表裏)とも同じだ。


しかし、上記の例でいえば「F4」にあたる、panda_microのピンと紐づけるためのコードがない。
そのため、設計データを確認する必要がある。そのため、設計データが公開されておらず、作者に連絡も取れない場合、ここの設定ができないということになる。

とりあえず、Corne Chocolateの場合、以下のような紐づけになる。当然、左右とも同じだ。

ちなみに、ピンを範囲選択すれば、まとめてドラッグできる。終わったら「決定」をクリックする。

指定したアドレスのエキスパンダが追加されたら、「次へ」をクリックする。

エキスパンダ確認

ここでは、キーボードの各キーを押して、画面が反応するかどうか確認する。

アドレスの指定がアドレスジャンパと一致しない場合(あるいはアドレスジャンパのはんだ付け自体が正常にできていない場合)、キーボード側は正常でも反応しない。

また、分岐ケーブルを含むTRRSケーブルが実はTRSとかTSケーブルである場合、エラーが出る。

現時点では、並び方、配置を気にする必要はとりあえずない。全てのキーに反応があればいい。
全てのキーが反応することを確認したら、「次へ」をクリックする。

ボタンのマッピング

JSONで指定したレイアウトでキーが1個ずつ点灯するので、キーボードの該当するキーを押していく。
これによって、物理的なキーが、panda_microのピンと結び付けられるわけだ。

レイアウトが全て緑に変わり、「マッピングが完了しました」と表示されたら、「次へ」をクリックする。

動作確認

キーボードのキーを一通り押し、レイアウト上の正しいキーが点灯するか確認する。

問題なければ「次へ」をクリックする。

保存

設定内容が保存される。今回は右手分もあるので、「続けてIOエキスパンダを追加する」を選択し、同様に設定していく。

完了したら「再起動してオプションを反映する」をクリックする。

完了

以上でエキスパンダの追加が完了し、AZTOOLの初期画面に戻る。

再び接続し、「I2C オプション」をクリックすると、このように追加したオプションが表示されているはずだ。

先に右から追加すると左右逆になっていたりするが、それでも問題はない。アドレスが一致していれば大丈夫。

なお、各キーが正常に反応するかどうかは、「入力テスト」でいつでも確認できる。

キーマップ

ここで、ようやくキーボードの動作を設定することになる。

AZTOOLに接続後、「キーマップ」をクリックすると、この画面になる。

んっ!!???と思うだろうが、安心して欲しい。レイアウトフィールド上のエキスパンダはドラッグすれば移動できるので、このように適宜再配置すればよい。

中央に位置するAZ-CORE本体の4キーは固定だ。もちろん、この画面上で左右を入れ替えても、左右の動作が入れ替わることはない。

この時点で、本体の4キーは割り当て済みであることがわかる。この4キーも含めて、自由にキーアサインをすることができる。

AZ-COREのファームウェアは、QMKではない独自のものだが、キー入力に関しての基本的な機能は揃っている。

まずは、メニュー上ですでに見えているので、レイヤー設定から解説しよう。

レイヤー設定

本記事はけっこう初心者向けなので一応解説すると、レイヤーとは、同じキーに複数の動作を割り当て、切り替えて使う機能のことだ。

レイヤー設定をクリックすると、以下のようなページに移る。

ここで、レイヤーの追加、便宜上の名称変更が行える。
なお、先にレイヤーを追加してからでないと、そのレイヤーへの切り替えを各キーにアサインすることはできない。その意味でも、レイヤー設定を先に行う必要があったわけだ。

「+追加」ボタンをクリックすると、そのたびにレイヤーが追加されていく。逆に「ー削除」をクリックすると、選択中のレイヤーが削除される。

ゴチャゴチャいじっているとレイヤー番号が飛び飛びになったりするが、作者のよっぴさん曰く、それは特に問題ないそうだ。

レイヤー番号とレイヤー名は、わかりやすいように任意に変更することができる。書き換えたら「反映」をクリックする。

デフォルトレイヤーとは、全く切り替え操作をしない通常の状態で使用されるレイヤーのことだ。これを別のレイヤーに切り替えたい場合は(ほとんどないと思うが)、対象レイヤーを選択してから「デフォルトのレイヤーにする」をクリックする。

「決定」をクリックすると元のページに戻る。
キーレイアウトの左上に現在のレイヤー名が表示されており、そこをマウスオーバーすると追加したレイヤーが表示され、切り替えることができる。

また、ここで「コピーレイヤーを作成」をクリックすると、選択中のレイヤーと同一設定のレイヤーを、レイヤー一覧の末尾に追加する。

レイヤーの追加が終わったら、各レイヤーにキーを割り当てていく。

一括設定

左上の「一括設定」をクリックすると、選択するレイヤーの全キーを、 キーボード入力で 次々に設定していくことができる。当然、もう一台キーボードが必要だ。

ちなみに、日本語(JIS)キーボードとして設定するか、英語(US)キーボードとして設定するかは、右上のメニューから選択できる。入力に使用するキーボードに合わせて選択しよう。

「ボタンのマッピング」設定を同様、キーが順番に赤く表示されるので、そこに割り当てたいキーを押していくだけだ。

あっという間に一通りのキー設定が完了する。

なお、ページ下部のキー一覧からコードを対象キーへドラッグすることで、個別の割当も可能だ。

割当を削除する場合には「クリア」を割り当てればよい。

ただし、これではより高度な機能を割り当てることはできない。そのためには、キー一つずつに対して設定を行っていく必要がある。

各キー設定

レイアウト上の設定したいキーをクリックすると、より詳細な設定のためのメニューが表示される。

上のドロップダウンリストをクリックすると、各種の機能が表示される。

通常キー入力

通常キー入力では、そのキーの 短押し(タップ)長押し(ホールド) のそれぞれに、コードを割り当てることができる。

「入力するコード」の下の5つのボタンが短押し、「長押しで入力するコード」の下の1つのボタンが長押しに割り当てるコードだ。

例えば、長押しのボタンをクリックし、一覧の中から「*shift」をクリックしてみる。

「*shift」は、左側のシフトキーを指す。左シフトと右シフトを区別するアプリもあるので、分けて割り当てられるようになっているわけだ。

このキーは、 短押しするとA、長押しすると左シフトを入力する ということになる。

では、短押しに複数のコードを割り当てるとどうなるのか?
試しに、追加で「B」を割り当ててみる。

この状態で「決定」をクリックすると、キーマップ一覧ではこのように「A+B」と表示される。

いったん左メニューの「戻る」をクリックし、「保存して再起動」してみよう。実際にキーボードの動作に反映させるためには、この手順が必要になる。

AZ-COREが再起動され、普通なら自動的にパソコンへ再接続されるはずだ。
Bluetoothデバイス設定で「接続済み」になったことを確認したら、該当のキーを押してみよう。 「ab」と続けて入力されたはずだ。

つまり、これはキーシーケンスなわけだが、実は 修飾キーとの同時押し も割り当てることができる。先程の「a」を「shift」に変更し、再び「保存して再起動」してみよう。(なお、ここでは左右の区別はない)

該当のキーを押すと、「B」(大文字)が入力される。「シフト押しながらb」だ。

今度はこれを入れ替えてみよう。「B+shift」を割り当てて保存する。

すると、「b」(小文字)になってしまう。正確には、 「c」の後に「シフト」が入力されている。
あくまで左から右へのシーケンスなので、修飾キーは、修飾対象キーの左側に配置する必要がある。要注意だ。

まだ続くよ。今度は、長押しコードに、先程設定したレイヤーの一つ「矢印等」を割り当ててみる。

このキーをホールドしている間、他のキーは「矢印等」レイヤーに切り替わるということだ。レイヤーの使い方としては、これが一番一般的なものだと思う。

割当を削除する場合には「クリア」を割り当てれるのは先ほどと同様だ。

一番基本的な機能だけに解説が長くなってしまった。次からはこんなに長くならない。

テキスト入力

いわゆる定型文だ。メールアドレスなどを登録しておくのがよくある使い方だろう。
なお、登録できる文字は半角英数字に限られるため、日本語の文章や、多くのアスキーアートは登録できない。

レイヤー切り替え

通常キー入力では「ホールドしている間」に限定されていたレイヤー切り替えだが、この機能を使えば他の方法も選択できる。
他の方法の場合、キーを離したら勝手に戻るというわけではないので、切り替え先レイヤーにデフォルトレイヤーへの切り替えキーを用意しておくなどの配慮が必要だ。

OSL(ワンショットレイヤー:次に押すキーのみ対象レイヤーに切り替わる)とTT(タッピングトグル:ホールドで一時的に切り替え、タップで半永久的に切り替え)は未実装のため、現時点では利用できない。
また、この場合はキーがレイヤー切り替え専用になるため、相応にキー数の多いキーボードでなければ使いづらいだろう。

WEBフック

ここでは詳しく解説しないが、WEB経由でプログラムをトリガーする機能だ。
思いつく使い方としては、Slack等に定型文で投稿できるようにしておき、作業開始と終了を記録するとか。割り当てるのは本体キーがよさそうだ。

なお、パソコン等の通信回線ではなく、AZ-CORE自体のWi-Fi接続経由で送信される。

マウス移動

キーボードでマウスカーソルを移動することができる。完全にマウスを代替するのは難しいが、簡単な操作ならキーボードのみで行える。
なお、左クリック等のボタンは通常キー入力で割り当てられる。

レイヤーコピーの活用

先程、レイヤー切り替えの割り当てをするには、先にレイヤーを作っておかないといけないことを述べた。
しかし、特に複数レイヤーでデフォルトレイヤーと同じ動作をさせるキーがある場合などは、コピーを駆使しないと面倒くさい。

そこで、レイヤー切り替え以外の割り当てを済ませてから、必要枚数をコピーし、改めて詳細設定を行うことを勧める。

その他の機能

これで使えるようにはなったはずだが、一応その他の機能についても解説しておこう。

Wifi

先述の通り、WEBフック用のインターネット接続を設定する。
打鍵データをサーバーに蓄積するなどの構想もあるが、具体的な実装予定はないとのこと。

設定JSON

保存済み の設定データを確認することができる。上記の設定を行った後、保存しなければ反映されない。
内容を理解できていれば、これを直接編集することでキーマップを変更することもできる。

エクスポート

クリックすると、 保存済み の設定をファイルとしてダウンロードすることができる。
ファイル名は「AZ-Core.zip」で固定なので、ダウンロード後にわかりやすい名前に変更しておこう。

不具合が発生したときに復旧できたり、できなくても解決の参考になる場合があるので、とりあえず取っておいたほうがよい。

インポート

エクスポートしたファイルを取り込んで、設定を復元することができる。実行後は、自動的に再起動される。

初期化

設定を全て削除し、初期状態に戻す。キーマップだけでなく、I2C オプション設定も削除されるため注意。

最後に

量がなかなか膨大になってしまった。
内容はおおよそ独自調査に基づくものだが、可能な限り正確を期した。将来的には公式のドキュメントが充実するとありがたい。

無線化だけであれば、BLE Micro Proが若干数ながら再販されたり、Seeed Studio XIAO ESP32C3が発売されたりして、選択肢は増えてきている。
(僕が知らなかっただけで、以前からISP1807搭載Microボードが安定的に提供されていたりもした)

しかし、現状安定的に入手でき、比較的専門的な知識を必要としない点で、AZ-COREにも大いに魅力がある。
また、ケーブルなしでAZ-COREを接続できるキーボードや、ロータリーエンコーダ版AZ-COREなど、新たなアイテムも立て続けに投入されており、興味が尽きない。

実はBLE Micro Proが入手できたので、今後はそちらを触っていくが、AZ-COREについても継続的にウォッチしていくつもりだ。

Discussion