あおしまの日記

あおしまさんの日記らしいです。個人的に興味がある事を時々書きます。スマートウォッチPebble日本語パックを作成、公開しています。

ADBキーボードUSB変換器(2020年)

ADBキーボード変換器

ATmega32U4周りを調べてQMKという存在にぶち当たりまして、
ADBキーボードをUSBに変換するのもできると知りました。
それ以前ですとTMKという仕組みや、別のコードがあった
ようですが、この2020年的にはQMKなんでしょう、ということで、
QMKな仕組みに基づく、ADB-USB変換を製作してみることにした。
(ちなみに、この記録はMacwayキーボードで書いている。売り飛ばさなくてよかった。)

QMKとは?

自作キーボードと、その基盤としてのATmega32U4向け統一コード集
ということでしょうか?
QMK Firmware - AVR と ARM ベースのキーボード用オープンソースファームウェア

環境整備

とりあえず、変換回路の妥当性を知るためには、開発環境全て必要ではない。

  • QMK Toolkit(キーマップバイナリの書き込みツール)
  • Arduinoドライバ集(QMKの環境整備で出てくる)
  • QMK Configurator(オンラインFirmwareビルドサービス)

もげないProMicroとQMKToolkit

Switch-ScienceさんのもげないProMicroを購入して使おうとしました。
しかし、いくらリセットしてもQMKToolkitが反応しません。
おそらくはベンダーコードあたりで見ているんだろうと思いますが、
反応しないので書き込みができないので、とりあえず何か試しのコードを
LEONARD名義で書き込んだりしたところ、いきなり文鎮化しましたorz

文鎮化からの復活

仕方がないので、ArduinoNanoをArduino as ISP (AVR書き込み器)にして
復活させました。

  • ArduinoIDE環境を整備した上で、以下のものを用意して、一時的に半田付けして書き込み。

ht-deko.com
ht-deko.com

  • LEONARDをはじめ、いろいろ試しましたが、QMKToolboxが反応しないのは変わりないので、結局はProMicroのFirmwareを書き込み。
  • ProMicroのfirmwareを書き込んでも、QMKToolkitは反応しないので、いよいよmsys2から始まる厄介な環境構築が必要かと思いましたが、よくよく考えると「avrdudeが動けばいいんでねえの?」と思い当たり、いろいろ調べ回りました。

( ここが参考になりました。http://riv-mk.hateblo.jp/entry/pro_micro_and_qmk )
そこで、ファームウェア転送を実行する要素がわかりました。

  • WIndows環境ですと、ArduinoIDEのセット中にavrdudeが入っている!
  • avrdude.confもある
  • プラットフォームはatmega32u4 (-p)
  • ProMicroでは、書き込みはavr109と指定するっぽい (-c)
  • リセットした時に使うポートはCOM8(これは私の環境での話)(-P)
    • Macの場合は/dev/ttyXX?とかになると想像
  • 速度は19200で十分(-b)
  • 書き込みファイル(hex)は -U flash:w:(ファイルの置き場所とファイル名) で指定
  • 以上をエディタで各自環境に合わせて編集、数珠繋ぎして、コピペできるようにしておきます。
(置き場所)¥arduino¥hardware¥tools¥avr¥bin¥avrdude
-C(置き場所)\Arduino\hardware\tools\avr/etc/avrdude.conf
-p atmega32u4 
-c avr109 
-PCOM8
-b19200 
-U flash:w:.\converter_adb_usb_default.hex
  • QMKのデフォルトファームウェアは、ここからダウンロードできます。(converter/adb_usbの右のΨのリンク)

qmk.fm

  • コマンドプロンプト(cmd)を起動しておき、
  • USBで繋いで、RST-GNDをピンセット等で短絡させてリセット
  • ProMicroではなく、別のデバイスとして認識されたら、コマンドラインからコピペ実行します。
  • 書き込みがエラーになるのは、ProMicro側が書き込み待ちになっていない場合かCOMポートが違う場合なので、リセットを再度行い、書き込み待ちにしてから上キーで直前に実行したコマンドを呼び出してすかさず再実行するといいです。
  • USBデバイスの名前が「ADB keyboard converter」になれば書き込み成功です。
> C:\Arduino\hardware\tools\avr/bin/avrdude -CC:\Arduino\hardware\tools\avr/etc/avrdude.conf -p atmega32u4 -c avr109 -PCOM8 -b19200 
-U flash:w:.\converter_adb_usb_default.hex  
 
 Connecting to programmer: .
 Found programmer: Id = "CATERIN"; type = S
     Software Version = 1.0; No Hardware Version given.
 Programmer supports auto addr increment.
 Programmer supports buffered memory access with buffersize=128 bytes.
 
 Programmer supports the following devices:
     Device code: 0x44
 
 avrdude: AVR device initialized and ready to accept instructions
 
 Reading | ################################################## | 100% 0.00s
 
 avrdude: Device signature = 0x1e9587 (probably m32u4)
 avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
          To disable this feature, specify the -D option.
 avrdude: erasing chip
 avrdude: reading input file ".\converter_adb_usb_default.hex"
 avrdude: input file .\converter_adb_usb_default.hex auto detected as Intel Hex
 avrdude: writing flash (14770 bytes):
 
 Writing | ################################################## | 100% 1.87s
 
 avrdude: 14770 bytes of flash written
 avrdude: verifying flash memory against .\converter_adb_usb_default.hex:
 avrdude: load data flash data from input file .\converter_adb_usb_default.hex:
 avrdude: input file .\converter_adb_usb_default.hex auto detected as Intel Hex
 avrdude: input file .\converter_adb_usb_default.hex contains 14770 bytes
 avrdude: reading on-chip flash data:
 
 Reading | ################################################## | 100% 0.74s
 
 avrdude: verifying ...
 avrdude: 14770 bytes of flash verified
 
 avrdude: safemode: Fuses OK (E:F3, H:D8, L:FF)
 
 avrdude done.  Thank you.

配線

  • そんなこんなで、書き込みされたら、今度は配線です。
  • 配線はSビデオケーブルと行いました。
  • 結線方法はQMKのadb_usbのところに書かれています。

github.com

  • ProMicroの場合、プルアップ抵抗を先に端子シルク3(PD0)と向かいのVCCとに接続しておくと、配線が楽です。
  • 残り3つの線も配線します。シグナルは3に繋ぎます。*1
  • 配線後に動作確認します。キーボードを繋いで入力を見ます。無事動けばOK。

完成

3Dプリンタで簡素なボックスを作って回路を収めました。
f:id:aoshimak:20200820125136j:plain

カスタマイズ

QMKのメリットはカスタマイズが充実していることです。
QMK configuratorサイトで、adb_usbを選び、カスタマイズを行います。
私の場合はMacwayキーボードがターゲットなので、CAPSをCTRLにし、[~`]とESCを交換、[|¥]を上キーと置き換えた上で、矢印キーをviキーマップに合わせて再配置しました。
これも画面上でドラッグでできるので便利です。
サイト上でコンパイルして出来上がったFirmwareのダウンロードを行い、また先のコマンドを実行して書き込みしました。

*1:最初2に繋いでいて動かないと悩んでましたorz