Voxel Highway

Build Logs and Reviews of DIY Mechanical Keyboards and Many Other Gadgets⌨️

Pro Micro & QMK Firmware のセットアップガイド (Let's Split編)

前回書いた記事「格子配列で左右分離型の超コンパクトなキーボード "Let's Split" を組み立てたよ」の続きです.
今回はPro MicroへのQMKファームウェアの書き込みと, キーマップ, RGB Underglowの設定, シリアル通信(UART)とI2C通信での接続について, 備忘録という感じですが書きました.

Pro Microのタイプ

基板の色が赤い純正品は2500円ほどしますが, 青色の中国製クローンのLeonardoは400〜1000円くらいで手に入ります. AliExpressが安いですが, Amazonでも500円で売っています(2017年4月現在).

Pro Microのブートローダーモードについて

Pro MicroはLet's Split Build Guideの通りにPCBにはんだ付けしています. 今回, 中国製クローンのLeonardo Pro Microを使用しました.

GNDとRSTをショートさせる回数

https://cdn.sparkfun.com/assets/9/c/3/c/4/523a1765757b7f5c6e8b4567.png 純正品(SparkFun製)のチュートリアルに, GNDとRSTを素早く2回ショートさせると, 8秒間書き込み可能なブートローダーモードになると書いてありますが, Arduino Leonardo bootloaderが搭載されているもの(今回使用している中国製クローンなど)の場合は1回のショートでブートローダーモードになります.
※ 初回のファームウェア書き込み時のみ, Leonardo Pro MicroでもSparkFun製と同様に素早く2回ショートさせる必要があるようです. このLeonardo Pro Microの動作については公式のドキュメントのようなものが見つかれば, また詳しく書き足したいと思います. (2017/7/17追記)

リセットボタンの設置

https://i.imgur.com/ge57v63.jpg

毎回はんだごてなどでショートさせるのは面倒なので, リセットボタンとしてタクトスイッチをGNDとRSTにつなげました.

Pro microへのQMK Firmwareの書き込み

Let's SplitのFlashingガイドを参考にしています.

[Mac OSXの場合]

Homebrewでavrdudeをインストール

$ brew install avrdude

QMK Firmwareリポジトリをダウンロードし, Let's Splitディレクトリにオリジナルキーマップを作成
/qmk_firmware-master/keyboards/lets_split/keymaps/ディレクトリに新しい任意のフォルダ"hoge"(適宜自分の好きなキーマップ名を付けて下さい)を作成, keymap.cconfig.hファイルを複製して, keymap.cを編集する

今回, GitHubユーザnicinaboxさんのキーマップを一部改変して使用させて頂きました.

キーマップのビルド
/qmk_firmware-master/ディレクトリで下記のコマンドを実行します.

$ make lets_split:hoge

.hex ファイルが /qmk_firmware-master/.build/ ディレクトリに生成されます.

※ 2017/10/15以降の最新のQMK Firmwareでは, makeの記述形式がハイフンではなくコロンを使用するものに変更になったようです. [参照元] それに伴い当記事も修正しました. (2017/12/10 追記)

キーマップの書き込み方法①

QMKファームウェアでは, 手動でブートローダーモードにする必要なく自動でシリアルポートを見つけてFlashさせることができます.

それぞれのキーボードにキーマップを割り当てる
TRRSケーブルは接続せず, 片方ずつPro MicroをUSB接続します.

$ make lets_split:hoge:avrdude

Reset your Pro Micro nowと出てくるので, リセットボタンを1回押す.

キーマップの書き込み方法②

下記の方法でもキーマップを書き込むことが出来ます.

Pro Microをブートローダーモードにする
GNDとRSTを1回ショートさせて(Leonardo Pro Microの場合), 下記のコマンド

$ ls /dev/tty* 

でシリアルポート一覧に, /dev/tty.usbmodem1411があるのを確認する

それぞれのキーボードにキーマップを割り当てる: rev2
$ make lets_split/rev2:hogelets_split_rev2_hoge.hexファイルを生成しておきます.

$ sudo avrdude -p atmega32u4 -c avr109 -P /dev/tty.usbmodem1411 
-U flash:w:/Users/***/qmk_firmware-master/.build/lets_split_rev2_hoge.hex

(デバイスが見つからないと言われてしまう場合の対処法: *1 )

RGB Underglowの設定

Let's SplitのRGB Underglowガイドを参考にしています.

/qmk_firmware-master/keyboards/lets_split/keymaps/hoge/ディレクトリにMakefileを作成し, 下記を追加します.

RGBLIGHT_ENABLE = yes

config.hに下記を追加します.

#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 10
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17

RGBLED_NUMは左右のLEDの合計数です(今回は10).

keymap.cの[QWERTY_LAYER] のどこかのキーに, MO(UNDERGLOW_LAYER)を割り当てます. [UNDERGLOW_LAYER]を下記のように作成します.

[UNDERGLOW_LAYER] = KEYMAP( \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______, \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______, \
  _______,  RGB_TOG,  RGB_MOD,  RGB_HUD,  RGB_HUI,  RGB_SAD,  RGB_SAI,  RGB_VAD,  RGB_VAI,  _______,  _______,  _______, \
  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______ \
),

各種のキーで点滅モード, 色調, 彩度, 明るさを変更できます.

RGBLED_TOGGLE: LED ON/OFF
RGBLED_STEP_MODE: 点滅モードの切替
RGBLED_INCREASE_HUE: 色調の変更(+)
RGBLED_DECREASE_HUE: 色調の変更(-)
RGBLED_INCREASE_SAT: 彩度の変更(+)
RGBLED_DECREASE_SAT: 彩度の変更(-)
RGBLED_INCREASE_VAL: 明るさの調整(+)
RGBLED_DECREASE_VAL: 明るさの調整(-)

シリアル通信(UART)

今回, シリアル通信(UART)で左側のキーボードをMaster, 右側のキーボードをSlaveとして通信していますが, I2Cで接続することもできます.

I2C通信

Let's SplitのPCB(v2)はI2C通信に対応しており, プルアップ抵抗を付けることでI2C通信ができるようになります. (QMKファームウェアのLet's Splitリポジトリに, 回路図があります.)

プルアップ抵抗の設置, I2Cの設定などは下記のBuild Logに載っています.
Let's split v2 build log (with I2C) [photos]

I2Cでは, TRRSケーブルの4つの接続すべてを使用して, シリアル通信(UART)に比べてより高速に2つのキーボードを通信させることができますが, Let's Splitでは速度の差はほとんど認識できないレベルのようです.
また, I2Cにしてしまうと, RGB Underglowができなくなってしまうので注意が必要です.

*1:ArduinoMacアプリからArduino > ツール > シリアルポートでポート番号をチェックして色々再起動するとうまくいくようです(参照元)