Pro Microとの互換性を意識したBL654(nrf52840モジュール)のブレークアウトボードです。主に自作キーボードでの使用を想定して設計しています。Pro Microを使用した自作キーボードに取り付けて、USB/Bluetooth Low Energyの両方に対応させることができます。
Pro Microとの互換性を意識して設計されていますが、以下の点にご注意ください。
-
入出力は3.3Vです。ただし、5・6番ピン(SDA・SCL)のみFETによるレベルシフト回路を実装しています。
-
RAWピンの最大電圧は5Vです。
Windows10, Android5.0.2, Raspbianとの接続を確認しています。ただし、使用するbluetoothアダプタによっては接続が不安定になることがあります。
USBコネクタの横にあるBATピンから、あるいはUSBコネクタ、RAWピン、VCCピンから電源供給できます。
- BATピン (1.7V--3.6V)
- RAW, VCC (3V--5V)
- ただし、RAW, VCC >= BAT
コンスルーに対応しているため、はんだ付けせずに基板に取り付けることも可能です。
21番ピンは5Vをダイオードで電圧降下させて4.3Vにしています。これは、WS2812などのシリアルLEDを3.3Vの信号で光らせるためです。 Helixなど24番ピンと21番ピンをショートさせているPCBの場合は、24番ピンのピンヘッダを抜き去ることでLEDが光るようになります。 LEDの電源を24番ピンからしか取っていないキーボードの場合は、はんだ付けをして21番ピンから電源を取るように改造してください。 前述のようにダイオードを挟んでいるので21・24番ピンがショートしていても壊れません。
ブートローダー書き込み済みの場合、BOOTピンをGNDに落としながら起動、あるいはファームウェアから呼び出すことでUSB経由でのファームウェアの書き込みができます。
ブートローダーを使わない場合は裏面に露出したパッドからSWDでファームウェアを書き込みます。
nrf52対応のqmk_firmwareはこちら
- 既にqmk_firmwareを使っていて別のブランチとして用意したい場合
git remote add sekigon https://github.com/sekigon-gonnoc/qmk_firmware.git
git fetch sekigon
git checkout -b nrf52 sekigon/nrf52
- 既にqmk_firmwareを使っていて別のフォルダに置きたい場合
git clone -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git ble_micro_pro
- 初めて使う場合
git clone --depth 1 -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git
pro micro用の環境に加えて、arm-none-eabi-gccが必要です。(Version 7-2017-q4-majorで動作確認) QMK公式のセットアップ手順の際に全てをインストールしていれば、arm用の環境も同時にインストールされているはずです。 arm用の環境を外してセットアップしていた場合は、もう一度セットアップ用のコマンドを実行すれば追加インストールできます。
また、nRF5_SDK v15.0.0をダウンロードして適当な場所に展開してください。
- Macの場合、rules.mkのMOUSEKEY_ENABLEをyesにしておかないと認識されないようです
- config.hに
ENABLE_STARTUP_ADV_NOLIST
を指定すると起動時に自動でアドバタイズが始まります
サンプルを参考にして(分割型の場合マスタ側のキーに)以下の関数を実行するカスタムコードを設定することをお勧めします。
関数 | 説明 |
---|---|
advertising_wo_whitelist() | 新しいデバイスとペアリングするときに使います。 |
restart_advertising_id(id) | 指定したidのデバイスとの接続を試みます。分割型の場合id=0はスレーブとなるため、id=1から各デバイスに割り当てられます。 |
set_usb_enabled(bool) | USB経由の送信を有効/無効にします。起動時は無効になっているので、matrix_init_user中で有効にするか、キーマップに割り当ててください。 |
set_ble_enabled(bool) | BLE経由の送信を有効/無効にします。起動時は有効になっています。 |
SWDでの書き込みと、ブートローダ書き込み済みの場合はDFUでの書き込みに対応しています。 以下ではDFUでの書き込みについて説明します。
nrfutil.exeをダウンロードし、~/qmk_utilに保存します。
pipでnrfutilを入れます。(python2.7)
pip install nrfutil
ビルドする前に環境変数としてnRF SDKの場所を設定してください
export NRFSDK15_ROOT=<path to sdk> #例 /c/dev/nRF5_SDK_15.0.0_a53641a
初回はライブラリをビルドするため時間がかかります。分割型の場合はmaster用とslave用の両方をビルドしてください。
make <keyboard>/<master or slave>:nrfutil
を実行することで、ビルド後にそのままファームウェアが書き込めます。
Detecting USB port, put your controller into dfu-mode now
と表示されたら、キーボードのリセットボタンを押しながら電源投入、あるいはキーマップに設定したコマンドからブートローダを起動します。初回書き込み時は自動的にブートローダが起動します。 書き込みに成功すれば自動で再起動してUSBキーボードとして認識されます。
qmk/tmk_core/nrf.mkの862行目
$(NRFUTIL) dfu usb_serial -pkg $(TARGET).zip -p $$USB; \
を
$(NRFUTIL) dfu usb-serial -pkg $(TARGET).zip -p $$USB; \
に書き換えてください
分割型の場合は、初回起動時にマスタとスレーブの接続が確立してからパソコン等とのペアリングを実行してください。 そのため、初回起動時はUSB接続し、TeraTermなどのターミナルソフトを使ってシリアルポートを開いて、情報を確認しながら接続するのが無難です。 マスタのUSB送信を有効にして、スレーブの入力が反映されることを確認してからパソコン等とのペアリングを実行するとよいでしょう。
advertising_wo_whitelist()を実行すると、BLE Micro Proがアドバタイズを開始します。パソコン等からスキャンすると、設定したキーボード名のデバイスが確認できるはずです。
2台目以降のパソコン等とペアリングする場合は、他のペアリング済みパソコン等のBluetoothを無効化してからadvertising_wo_whitelist()を実行してください。
指定したペアリング済みパソコン等に接続したい場合、restart_advertising_id(id)を実行します。idはペアリング順です。分割型の場合、id=0はスレーブとなっていることを前提としています。
qmk_firmware/keyboard/ble_micro_testが一体型、qmk_firmware/keyboard/ergo42_ble, helix_bleなどが左右分離型のサンプルとなっています。
編集する必要があるファイルはble_micro_test/config.hとble_micro_test/pro_v1/config.hの2つです。
パラメータ | 変更方法 |
---|---|
MATRIX_ROWS, MATRIX_COLS | 通常通り |
THIS_DEVICE_ROWS, THIS_DEVICE_COLS | MATRIX_ROWS, MATRIX_COLSと同じ値に設定 |
MATRIX_ROW_PINS, MATRIX_COL_PINS | キーマトリクスに使用しているピン番号を指定 |
IS_LEFT_HAND | 必ずtrue |
BLE_HID_MAX_INTERVAL | 端末との通信間隔(ms) 下げると消費電力が増える。デフォルトは90 |
BLE_HID_SLAVE_LATENCY | 端末との通信パラメータ 下げると消費電力が増える。HID‗INTERVALに反比例させると良い? デフォルトは4 |
マスタとスレーブで異なるファームウェアが必要です。現状ではマスタのみUSB接続に対応しています。編集するファイルはergo42_ble/config.hとergo42_ble/master/config.hとergo42_ble/slave/config.hの3つです。
パラメータ | 変更方法 |
---|---|
MATRIX_ROWS, MATRIX_COLS | 通常通り |
THIS_DEVICE_ROWS, THIS_DEVICE_COLS | マスタ、スレーブそれぞれの列数と行数。8x16まで対応 |
MATRIX_ROW_PINS, MATRIX_COL_PINS | キーマトリクスに使用しているピン番号を指定 |
IS_LEFT_HAND | 左手側ならtrue、右手側ならfalse |
BLE_NUS_MAX_INTERVAL | 左右間の通信間隔(ms) 下げると消費電力が増える。デフォルトは70 |
BLE_HID_MAX_INTERVAL | 端末との通信間隔(ms) 下げると消費電力が増える。デフォルトは90 |
BLE_HID_SLAVE_LATENCY | 端末との通信パラメータ 下げると消費電力が増える。HID‗INTERVALに反比例させると良い? デフォルトは4 |