Pico W BLE to USB HID Bridge
概要
本ソフトウェアは、Raspberry Pi Pico W用のファームウェアです。Bluetooth機能を搭載していないPCでも、BLEキーボードやマウス等のBLE HIDデバイスを有線USBデバイスのように使用することが可能になります。
Pico WをBLEセントラル(ホスト)として動作させ、接続されたBLEデバイスからの入力情報をUSB経由でPC(USBホスト)に転送します。
PCからは標準的なUSB HIDデバイスとして認識されるため、UEFI環境でも使用可能です。
ソースコードとバイナリ
今回作成したプログラムの全ソースコードと、そのまま書き込めるバイナリ(uf2ファイル)は、以下のGitHubリポジトリで公開しています。
shiomachisoft/picow_ble_usb_hid_bridge
ソースコードは、Pico SDKとC言語で作成しています。
ライセンス
本ソフトウェアのライセンス詳細については、LICENSE.TXT を参照してください。
使い方
-
Pico Wの接続
- Pico WをPCのUSBポートに接続します。
- BLE接続が完了していない待機状態では、Pico W上のLEDが点滅します。
-
ペアリング
- 接続したいBLE HIDデバイス(キーボードやマウス、その他の周辺機器)をペアリングモードにします。
ペアリングモードにする方法は、各BLEデバイスのマニュアルを参照してください。
-
接続完了
- Pico Wがデバイスを検出し接続が完了すると、LEDが点灯(常時点灯)に変わります。
- PC側でUSB入力デバイスとして認識され、操作が可能になります。
動作確認済みデバイス
本ソフトウェアは以下のデバイスで動作確認を行っています。
- マウス: サンワサプライ MA-SBB314
- キーボード: エレコム TK-FBM119
特徴
低レイテンシー化への取り組み
入力デバイスとしての快適な操作感を実現するため、以下の最適化を行っています。
-
マルチコア分散処理:
- Core 0: USBデバイスとしての通信処理を担当
- Core 1: BLEホスト(セントラル)としての通信処理を担当
- これらを並列動作させることで、BLE受信からUSB送信までの処理遅延を最小限に抑えています。
-
高速ポーリング:
- USBエンドポイントのポーリング間隔(
bInterval)を1(1ms) に設定し、PCへのレポート転送を最速で行えるようにしています。
- USBエンドポイントのポーリング間隔(
レポートのパススルー
-
HIDレポートディスクリプタ:
- BLE接続が完了したタイミングでUSBの再接続処理を行い、BLEデバイスから取得した「HIDレポートディスクリプタ」をそのままPC(USBホスト)に渡します。
- これにより、接続したBLEデバイス固有の機能(マルチメディアキーなど)もPC側で正しく認識されます。
-
HIDインプットレポート:
- BLE接続後は、BLEデバイスから取得した「HIDインプットレポート」をそのままPC(USBホスト)に渡します。
接続管理
-
スマートスキャン:
- 既知のデバイスへの再接続(ボンディング済みデバイス)と、新規デバイスのスキャンを数秒おきに自動的に切り替えて動作します。
技術的詳細
ベースプロジェクト
本ソフトウェアは、以下のオープンソースプロジェクトのサンプルコードをベースに開発・統合されています。
-
TinyUSB:
dev_hid_compositeサンプル -
BTstack:
hog_host_demoサンプル
免責事項
本記事の内容や本ソフトウェアの使用により生じた、いかなる損害やトラブルについても、作者は一切の責任を負いません。ご利用は自己責任でお願いいたします。
