Shiki’s Weblog

新キーボード プロジェクト? - Bluetooth/USB兼用版の開発

2016/08/12 #新キーボードプロジェクト

今月からBluetooth®無線技術とUSBの両方に対応した、新しいエスリル ニューキーボード NISSEの受注をエスリルで開始しました。前回のブログからかなり時間が経ってしまいましたが、今回は新しいBluetooth/USB兼用タイプのNISSEの開発についてのお話です。

Bluetooth/USB兼用タイプの新しいNISSEBluetooth/USB兼用タイプの新しいNISSE

製品版に至るまでの流れ

Bluetooth対応のNISSEについては、この2年余りの間に2種類の試作機を作っていました。Bluetooth無線技術とその関連製品の状況も、この数年急速に変化しているということもありましたので、簡単に2つの試作機から製品版までの変遷の概要を紹介しておきます。

Bluetooth 2.1対応の実験機

Bluetooth 2.1対応の実験機Bluetooth 2.1対応の実験機

こちらは2014年7月に作ったものになります。構成は、

というものでした。USB版のNISSEでも使用しているPIC18F4550と、RN42をUARTで接続するだけで使えるようになるのでお手軽だったのですが、日本語キーボードで必要になる、変換キー(0x8a)、Macのかなキー(0x90)といった上位のUSBキーコードを出力する手段が見つからず、その後の開発は行いませんでした(RN42側のファームウェアは変更できないため)。その他にも、

といった課題が見つかっていました。

Bluetooth 4.1対応の試作機

Bluetooth 4.1対応の試作機Bluetooth 4.1対応の試作機

こちらは1年前の2015年8月に作ったものになります。構成は、

のみ、というBluetooth 4.1 (Bluetooth Low Energy)専用のもので、乾電池で数カ月動作できるようなBluetooth Low Energyデバイスらしい試作機になりました。Bluetoothのアンテナ部分もアルミ筐体の外側に出すようにしてあります。
nRF51822ではNordic社から提供されているSDK(当時はSDK 9)を使って、Bluetoothデバイスのアプリケーション層は自由に開発ができるため、RN42のときのような制約もありません(HOGPプロファイルまではNordicのSDKで提供されています)。
このタイプは基本的には製品化も可能なものでしたが、

といった課題もありました。当時流通していたnRF51822 Rev. 2は公式にはSDK 6.1.0までの対応となっている一方で、SDK 6では機能が充分ではなく、新しいnRF51822 Rev. 3の供給を待つ必要があったのでした。
また、このタイプについては並行して製品化にあたってのご要望を受け付けていました。 その際、製品化する場合には 「BluetoothとUSBの兼用タイプにして欲しい」というリクエストを多く頂きました。そのため、製品版では、Bluetooth/USB兼用タイプとすることにして、nRF51822 Rev. 3ベースのモジュールの供給を待つことにしました。

Bluetooth 4.2対応の製品版の構成

2種類の試作機での評価をもとに、Bluetooth/USB兼用タイプとして今回製品化した新しいNISSEの構成は、

となっています(アナログパッド(TSAP)内蔵タイプでは、さらにPIC12F1822が加わります)。Nordic社のSDKもハイペースで更新が続き、その後SDK 11が提供され扱いにくかった部分などはうまく改良がなされています。また対応するBluetoothの規格自体も昨年の4.1から4.2へと変わりました。Bluetooth 4.2では、LE Secure Connectionsが追加された他、4.0以降400以上の仕様の修正が含まれているそうです。
電池の持ちという意味では、USBマイコンが増える分、昨年のBluetooth Low Energy専用タイプに比べて不利になりますが、3V駆動が可能なPIC18F47J53を使うことで対応しています。またPIC18F47J53はプログラムメモリが128KBと、現行のUSB版NISSEのPIC18F4550の32KBと比べて4倍あるという点もPIC18F4550から変更した理由のひとつになっています。
NISSEはUSBマイコンのファームウェアを公開しているので、ファームウェアを改造されて利用されている方もいらっしゃるのですが、最近ではPIC18F4550では開発の余地がほとんどなくなってきていました。

PIC18F4550版のメモリ使用状況PIC18F4550版のメモリ使用状況

上図はMPLAB X IDEのダッシュボードのスクリーンショットです。PIC18F4550のUSB版のNISSE(TSAP内蔵型)では、プログラム メモリを既に99%まで使い切ってしまっています。そのため、凝った改造をされる場合は使用されていないキー配列のデータを削除していただいたりといった工夫が必要になっていました。
下図は、PIC18F47J53を使った新しいNISSE(TSAP内蔵型)の現在の状況です。Bluetooth関連の機能が追加されていますが、それでもプログラム メモリの使用状況は29%とまだまだ余裕があります。今後の公式なNISSEのファームウェアについても、開発はPIC18F47J53を使った新しいNISSEに移行していく予定です。

PIC18F47J53版のメモリ使用状況PIC18F47J53版のメモリ使用状況

ハードウェア側では、NISSE側のUSBコネクタを大きなタイプBからマイクロBに変更しています。これは、Bluetoothモジュールの設置場所を確保するためにコネクタを小さくする必要があった、というのが一番の理由です。マイクロBは、スマートフォンでもよく使われているので、NISSE本体の電池が切れてしまった場合にモバイルバッテリーから給電したいような場面でも便利かもしれません。
またアルミ筐体の下側のパーツは、USB版ではコストダウンのためアルミ生地のままになっていますが、Bluetooth/USB兼用版では手で持ち運ばれる場面も多くなりそうということもあって、全面アルマイト加工をしてあります。
その他の基本的な仕様は、従来のUSBから変わっていません。NISSEをiPhoneやAndroidデバイスとBluetoothで接続した場合も、特別なアプリなどをインストールすることなくTRONかな配列や親指シフトなどを使って日本語を入力することができます。なお、Bluetooth接続の機器は3台までペアリングを切り替えて使うことができます。

新しい制御基板とBluetooth拡張基板

新しいNISSEは、Bluetooth/USB兼用タイプとしたことで、今回新たに用意したキーボードの制御基板は基本的にはUSBマイコンの基板のままとし、Bluetoothモジュールについては別の拡張基板に実装することにしました。拡張基板はメイン制御基板のソケットに差し込む形で使用しています。

Bluetooth/USB兼用版の制御基板(写真手前。奥の基板は現行のUSB版の制御基板)Bluetooth/USB兼用版の制御基板(写真手前。奥の基板は現行のUSB版の制御基板)

上の写真の手前の基板が新しい制御基板になります。その左にある小さな基板がBluetoothモジュールの拡張基板になります(2本出ているヘッダピンは開発用のもので製品版にはついていません)。こちらは太陽誘電製のBluetoothモジュールEYSGCNZWYを載せたものになっています。
新しい制御基板は従来のUSB版の基板と比較して部品点数が増えていますが、ほとんどは電源の管理のための部品です。ちなみに現行品の制御基板は、USB版も新しい制御基板もどちらも4層基板になっています。この数年でNISSEのように生産数の少ないものでも4層基板をわりと気軽に使えるようになってきました。
メインの制御基板と拡張基板は、SPIで通信するように構成しています。実際のBluetoothに関わる処理については、すべて小さな緑色のEYSGCNZWYモジュールの中で行われています(アンテナもこの中にあります)。

ファームウェアの構成

ファームウェアについては、PIC18F47J53用とnRF51822用の2つのファームウェアを新規に開発しました。2つのファームウェアは、PIC18F47J53側ではキーマトリクスのスキャンやキーボードのHIDレポートの生成などキーボード固有の処理を行い、nRF51822側ではBluetooth関連の処理のみを行うように役割を分担させました。そのため、キーボードのカスタマイズについては、PIC18F47J53側のファームウェアを変更するだけで行えるようになっています。
PIC18F47J53のファームウェアについては、従来通り既にGitHubから公開しています。ほとんどの部分は従来のPIC18F4550用のソースコードと共通ですので、これまでご自分でUSB版のNISSEをカスタマイズされて使われていた方であれば容易にBluetooth/USB兼用版にも移行できるのではないかと思います。

Bluetooth 認証試験とBluetooth SIGへの製品登録について

今回の新しいNISSEでのBluetooth無線技術の利用については、 Bluetoothの 認証試験やBluetooth SIGへの製品登録といった正規の手続きを経たものになっています。すべてのBluetoothの製品は、必要であれば認証試験を実施し、Bluetooth SIGに製品登録を行って、はじめて製品として出荷できるような仕組みになっています。
生産数の少ない商品では費用・工数的に大変な印象もありますが、全体としては比較的低コストで機器の相互運用性を確保していくための施策をBluetooth SIGが取られている、ということのように思います。
今回のNISSEの場合も、承認の申請や認証試験での問題(問題は起きない方がもちろん良いのですが、試験の仕様側に問題があった場合の手続きなどもSIGで決められています)についても、Bluetooth SIGの方々にスピーディーに対応して頂くことができました。ちなみにエスリルにはBluetooth SIGからCompany ID 936(0x03A8)が割り当てられています。

対応デバイスについて

Bluetooth SIGに製品登録済みの製品同士であれば、基本的な相互運用性は確保されている筈ですが、実際にはデバイス側にもOS側にもバグなどが残っている、ということはありえることです。現在手元で動作を確認しているOSやデバイスには下記のようなものがあります:

Bluetooth 4.xは、規格自体の更新ペースが速かったこともあり、OSについてはなるべく新しいものを使われることをおすすめします。NISSEについても将来何か問題が見つかった場合には、nRF51822側のファームウェアについてもお手元でスマートフォンなどから更新できるようにしてあります。
Linuxデスクトップについて : Linuxデスクトップに関しては、最新のFedora 24, Ubuntu 16.04.1 LTSなどでもまだBluetooth 4.xのキーボードについてはGUIからうまくペアリングができない場合があるようです。そういった場合でも、コマンドラインからであればペアリングできる場合もあります(Ubuntuの例,Fedoraの例)。

電池での使用時間

新しいNISSEは、USBからの給電に加えて、単3形電池2本で駆動できるようにしています。ただメイン制御基板でUSBマイコンを使用しているため、Bluetooth Low Energy専用のデバイスと比べるとどうしても消費電流が大きくなっている部分があります。
下のグラフは、TSAP内蔵タイプのNISSEをタブレットPCにBluetoothで接続して24時間電源をONにし続けた場合の、スタンダードモデルの単3形エネループ2本の放電電圧と放電時間の傾向を示したものです(実測値を基づいて傾向としてまとめたものです。実際の放電電圧と放電時間は使用状況等によって毎回多少変動します)。

放電時間と放電電圧の変化放電時間と放電電圧の変化

エネループは1本あたりでは1.2V〜1.3Vの電圧を比較的長い時間維持した後、急速に電圧が下がっていくような傾向のあるニッケル水素電池です。新しいNISSEの場合は、12日目まで2本で2.4V以上を保ったあと、急速に電圧が落ちていくような傾向にあります。エネループの場合は、NISSEの電圧の表示(FN-F1で見ることが出来ます)が2.4Vを切った頃に電池交換の準備をしておくと安心かと思います。
なおグラフは24時間Bluetoothで接続し続けた場合の変化になりますが、実際にはスマートフォンなどのデバイス側が液晶をOFFにしてサスペンド状態に入ったことをNISSEに通知してきたり、デバイス側の電源が落とされてBluetoothの接続が切れたような場合には、NISSE側も消費電流を1/3程度に落とすようにしています。そのため実際には1回の充電で2週間以上使えるような場面も多いかもしれません。加えて作業が終わった後はNISSEの電源ボタンもOFFにするようにしていれば電池をより長持ちさせることができます。
なお、今回はBluetooth/USB兼用タイプということで、NISSEをUSBケーブルでメインのデスクトップPCなどにつなげていれば、NISSEには電池が入っていなくてもUSBポートから電源を取って動作します。

まとめ

というわけで、一昨年のUSB版のNISSEの開発当初からご要望を頂いていたBluetooth無線技術に対応したNISSEも今回お届けできることになりました。製品価格については、キーボードとしてはさらに高価なものになってしまいましたが、Bluetooth SIGへの製品登録に関わる費用や生産台数を考えると可能な範囲で抑えた価格に設定してあります。
USB版のNISSEも、製品化当初は部材費のコストが大きくMakersの2.3xルールに価格が収まっていませんでしたが、2年以上に渡って出荷を続けれられてきたことでかなり改善できてきた部分がありました。新しいBluetoothに対応したNISSEについても、このあたりは長いスパンで改善していければと思っています。
というわけで今回は以上です。 次回はもう少し近いうちに何か書ければ良いのですが、いまのところ予定は未定です。 :-)