自作キーボード温泉街の歩き方

自作キーボードの世界は温泉に例えられます。自作キーボードの温泉街の楽しい歩き方を紹介します。

Bluetooth接続用のProMicro互換ボード「BLE Micro Pro」の話

こんにちは。自キ温泉ガイドをしている方のサリチル酸です。

f:id:Salicylic_acid3:20181202022859p:plain

今回は少し湯加減高めの内容を冷ますための紹介FAQ記事です。

みんな大好きBluetooth接続を自キで実現するためのマイコン、通称『BLE Micro Pro』のお話です。

 

 

 

はじめに

通称『BLE Micro Pro』(以下BMP)はせきごん(@_gonnoc)さんの設計したマイコンで、これをPro Microと差し替えるだけでBluetooth接続が実現できる夢のアイテム、ではありますが、色々癖があって少し湯加減(敷居)が高いです。

BMPの搭載を前提に設計したNaked60BMPを発売するに辺り、特徴や引っかかりそうなところなどを解説したいと思います。

 

概要編

BMPってなに?

はじめに、でも書きましたが、Pro Microを置き換えることでBluetooth接続を可能とするマイコンです。

簡単な特徴をまとめると、以下の4点です。

  1. コンスルーを使うことでハンダ不要で取り付け可能。
  2. Bluetooth接続時には別途電池が必要。
  3. QMKの標準リポジトリでは対応していないので、せきごんさんのリポジトリから取得が必要。
  4. よってQMK toolboxは使えませんので、必ず黒いコマンドが流れる画面と向き合う覚悟が必要。

 

どこで買うの?

遊舎工房の実店舗かBoothの以下のサイトで買うことが出来ます。

booth.pm

 

光るの?

今の所、BMPを使用しつつLEDを光らせられる例は見たことがないですが、理論的には光らせることは出来る、みたいです。すごい。

 

OLEDは使えるの?

使えるらしいです。

せきごんさんのリポジトリにはマージしてありませんが、今後正式サポートが期待できます。

 

電池ってどうやって乗せるの?

せきごんさんが販売する電池基板を購入して空いたスペースに実装するか、

電池実装部分を込みで設計しているキットを購入するか、

キット専用に設計された専用電池基板を購入して規定のスペースに実装するか、

自分で電池基板を作成して実装するかの4択です。

約3Vの電圧を確保すれば、電池は何でも良いです。

せきごんさんの電池基板はこちら。

booth.pm

電池実装部分込みのキットの例はこちら(宣伝)

booth.pm

キットに専用設計された電池基板の例はこちら。

booth.pm

独自で電池基板を実装した例はこちら

de0.hatenablog.com

 

電池基板のコイン電池って何買えばいいの?

せきごんさんの電池基板はCR1632というコイン電池を1個、または2個使用します。

BMPの動作電圧は約3Vなのですが普通の単3電池などは1.5Vしかないので、2個直列に繋ぐなどして3Vまで電圧を上げる必要があります。

リチウムを使用したコイン電池は1個で3Vまで出せるのでこの点で便利です。

ちなみにCR1632はコンビニなどで買うと結構高いのですが、百均でも買えますし、秋月電子などでも安いのでおすすめです。

 

コイン電池を使用する場合、どのくらい持つの?

せきごんさん曰わく、計算値は1000時間だそうです。

そのまま1000時間持つとすると1日8時間使うと125日間持つ計算です。

 

単3電池1個だけで無線化してるキット(SISO59)があるけど?

booth.pm

SISO59に使用している電池は普通の単3電池ではありません。

秋月電子などで販売されている1個で3Vの電圧が出せる特殊な電池で、充電不可の使い切りタイプとなっています。

容量は2.4Ahと、CR1632を並列で使用した場合の0.28Ahと比べて圧倒的に大容量です。

単純計算でも3年以上は持ちます。

見た目に大きく電池が見えることと、いざ切れたときの入手性を除けば良い選択肢と思います。

 

そうはいっても充電したいんだが?

充電式となると普通の充電池を2個直列で繋いで使用する方法か、充電基板を利用するかの2択です。

充電基板を用意しているキットは現時点でManta60だけだと思います。

ちなみにManta用の充電基板は約十数分の充電で5~8時間の駆動ができるようです。

私個人的には故障率なども考慮すると電池を使い捨てた方がコスパは良いと思いますが、まぁそこは個人の趣味ですね。

その思想はさておき、MANTA60BLEは使ってみたい…。

 

PCとの間だけBluetoothにして、分割型の左右間の通信は普通のTRRSがいいんだが?(BMPを1個、Pro Microを1個にしたい)

理論上は可能らしいですが、いくつか条件があります。

  1. I2C接続の対応。
  2. 専用のファーム。

この状態で対応が宣言されているファームは執筆時点で存在しないので、可能とは言いづらい状況です…。

 

時々有線で使いたいんだけど、USBで接続することもできるの?

制約は有りますが、出来ます。

制約は以下の2点です。

  1. Bluetooth接続をOFFにしないとBluetoothとUSBで二重に入力されてしまう。
  2. USBを使用した接続でもPro MicroとのTRRS接続をサポートしているキーボードは現時点でありません。

 

環境構築&ファーム書き込み編

どうやってファーム焼く環境を構築するの?

環境構築はせきごんさんのページと天高さんのページをよく読みましょう。

github.com

skyhigh-works.hatenablog.com

よく引っかかる点は下にまとめておきます。

よく引っかかる点:エラーメッセージが何を指しているか分からない

大丈夫、私も分からない。

Detected controller on USB port at /dev/ttyS5
Remapped MSYS2 USB port to COM6
Programming Started
[13460] Failed to execute script __main__
Traceback (most recent call last):
File "nordicsemi\__main__.py", line 1464, in <module>
File "click\core.py", line 764, in __call__
File "click\core.py", line 717, in main
File "click\core.py", line 1137, in invoke
File "click\core.py", line 1137, in invoke
File "click\core.py", line 956, in invoke
File "click\core.py", line 555, in invoke
File "nordicsemi\__main__.py", line 1001, in usb_serial
File "nordicsemi\__main__.py", line 956, in do_serial
File "nordicsemi\dfu\dfu.py", line 129, in dfu_send_images
File "nordicsemi\dfu\dfu.py", line 90, in _dfu_send_image
File "nordicsemi\dfu\dfu_transport_serial.py", line 203, in open
AttributeError: 'exceptions.ImportError' object has no attribute 'strerror'
make[1]: *** [tmk_core/nrf.mk:914: nrfutil] エラー 127
Make finished with errors
make: *** [Makefile:544: naked60_ble:salicylic:nrfutil] エラー 1

落ち着いて以下を試してみよう。

よく引っかかる点:リセットスイッチの使い方

リセットスイッチは普通のPro Microと違い、押しながらUSBを指すブートローダーに入れます(要するに書き込める状態になること)。

ブートローダーへ入ったかの確認はデバイスマネージャのプロパティから確認できます。

f:id:Salicylic_acid3:20190602023508p:plain
f:id:Salicylic_acid3:20190602023503p:plain
左がちゃんとブートローダーに入れた図、右は入れたつもりが入れてなかった図
よく引っかかる点:ブートローダーに入れない場合

書き込みが失敗するシチュエーションの半分くらいはこれが原因。(私の主観)

前述のスイッチを押しながらUSBを差しても入れない場合があります。

その場合、Teraterm等から直接ブートローダーへ入れるコマンド『dfu』を打つことで書き込める場合があります。(後述)

私はその辺りの切り分けが面倒なのでリセットスイッチは使用せずTeratermブートローダーへ入れるコマンドを打つ方法を使います。

よく引っかかる点:pythonバージョン問題

もともとpythonのライブラリを利用している場合、pythonのバージョンで引っかかる場合があります。

そういうときはpythonを最初から入れ直す等を行うと解決する場合があります。

 

Windowsの場合)TeraTermもインストールしよう

BMPとシリアル接続できるソフトは必須だと思って良いです。

Windowsなら大人しくTeraTermを落としてインストールしましょう。

forest.watch.impress.co.jp

インストールしたらBMPをUSBで接続してシリアルの部分をクリックしてOKを押します。

f:id:Salicylic_acid3:20190602031833p:plain

こうなったらエンターを押して反応があるか確認します。

f:id:Salicylic_acid3:20190602031925p:plain

>が出てきたら正常に接続できた証拠です。

使用できるコマンドはhelpで表示できます。 

help コマンド一覧を表示
adv バイスの探索を開始
dfu ブートローダーを起動
show 保存済みのペアリングの数を表示
del [id] id番目のペアリングを削除

使うのはshowとdelくらいだと思います。(advは使ったこと無い)

 

Macの場合)よく知らないけどターミナルでできると思う

持ってないので検証不可ですが、ググると色々情報出てくるので頑張って。

私は死んだ祖父の遺言でMacは買えませんのでごめんなさい。

 

使用編

ペアリングは何デバイスまでいけるの?

5デバイスまで行けます。

 

接続するデバイスを切り替えたいんだけど?

バイスIDを覚えておいて、各デバイスIDに対応するキーを押すことで切り替えます。

 

バッテリーの残容量って分からないの?

Bluetooth接続の状態でKC_BATTのキーコードを割り当てたキーを押しますと現在の電圧が文字列で打ち込まれます。

3000mV

※この電圧値はあくまで電池残容量の目安にしかならないです。電圧が落ちてきたら代え時かも、と用意しておきましょう。

USB接続状態で行うとUSBから給電されている数値(3000mV)が表示されるだけです。

 

ペアリングを解除したいんだけど?

PCにインストールされたTeraTermから行います。

以下のコマンドを用います。

del [id]

※[id]はペアリング番号

ペアリング番号はshowで確認出来ます。

 

うまくペアリングできないんだけど?

接続デバイスBMPの両方からペアリンを解除し、もう一度ペアリングを試します。

ペアリング解除は上述の項目を参考に実施します。

 

お役立ち情報というかTips編

BMP特有のキーコードとか有るの?

あります。

以下表でまとめてみました。

キーコード名

役割

KC_BATT

バッテリー電圧を文字列で入力します。

KC_BTON

BluetoothモードをOnにします。

KC_BTOF

BluetoothモードをOffにします。

KC_USBON

USBモードをOnにします。

KC_USBOF

USBモードをOffにします。

KC_BTNEW

新たなデバイスとペアリングを行います。

KC_BTID0

バイスID0と接続します。

KC_BTID1

バイスID1と接続します。

KC_BTID2

バイスID2と接続します。

KC_BTID3

バイスID3と接続します。

KC_BTID4

バイスID4と接続します。

※このキーコードは各キーボードファームウェアに直接実装しています。よって各キーボードで対応可否が異なる場合がありますので、個別に確認してください。

 

何もしてないのにキーが反応しなくなったんだけど?

BMPコンスルーを用いるとハンダ付けなしで装着できますが、USBの抜き差しをしているとBMPコンスルーから抜けることがあります。

一部のキーが反応しなくなったらまずBMPの抜けを確認しましょう。

 

BLE micro Proっていう名前で売ってないのなんで?

深遠かつセンシティブな理由があるので、そこはまぁ、ドンマイ。

 

サリチル酸BMPと何の関わりがあるの?

1ユーザーです。

せきごんさんにはいつもお世話になっております。

 

BMP対応済みのキットは何があるの?

せきごんさんのリポジトリを見ると対応状況がだいたい分かります。

キーボード名末尾に『_ble』とついているのがファームウェアが作られたキーボードです。

blockey_ble
ergo42_ble
ergodash_ble
helix_ble
lets_split_ble
lily58_ble
mf68_ble
mint60_ble
modulo_ble
naked60_ble
numatreus_ble
stonehenge30_ble
treadstone48_ble

Naked60BMPを何卒、何卒…!!

 

設計編

BMP対応用の電池基板を載せたキーボードを設計しようと考えてるけど、13ピンのコンスルー使わないとダメ?

12ピンコンスルーでもダメではない(Pro Microと同数のピンを確保できる)ですが、設計で工夫が必要になります。

Bat-は電池のマイナス側をGNDに落とせばBMPとの接続不要なので12ピンで良いです。

Bat+側はリセットピンが実は入力にも使えるので、そこを活用した設計にすれば上にオフセットして挿すことで一番下のピンを開けられます。

f:id:Salicylic_acid3:20190602030504p:plain

ただし、その状態のままPro Microを使うと頻繁にリセットされて使えなくなるので、ジャンパーなどを間に挟みBMPを使う人だけジャンパさせると良いです。

f:id:Salicylic_acid3:20190602030721p:plain

とはいえ普通に一本13ピンコンスルーを使うようにした方が良いと思います。

 

BMPとか電池基板のフットプリントはどこにあるの?

電池基板のPCBデータはせきごんさんのリポジトリにあります。

※ただしKICADのバージョンが古いものなのでそのまま使えません。

github.com

 

Mac用にMouseKey機能をYesにしよう

MacBluetooth機器のポリシーというか余計なお世話ですが、マウス機能がないBluetooth機器を認識してくれないようです。

実際に使わなくても「rules.mk」の「MOUSEKEY_ENABLE」をYesにしておいておくと、後のトラブルが一つ減ります。

 

おわりに

BMPの話、いかがでしたでしょうか?

大丈夫、BMP怖くないよ。

 

本記事について、なにかわからないことが有れば遠慮なく本記事のコメント欄か私のTwitterへどうぞ。

 

本記事はNaked64SFで書きました。