【ペアリング不要】Bluetoothマウス用USBドングルの作成
★★★ 2020/09/14 ★★★
ソースの誤りと、いろいろ重要なことが書けていなかったので全面的に書き直しました。試してうまく行かなかった方がいらっしゃれば申し訳ありません。。。書き直してみましたので、よければもう一度お試しください。
★★★★★★★★★★★★★
デスクをすっきりさせる目的でBluetoothマウスを利用している方は多いかと思います。
でも、たまには接続先を変えたい場合がある。。
でもいちいちペアリングし直すのは面倒。。。
かといってUSBマウスに変更するのは本末転倒。。。。
そんな悩みをお持ちの方にこの記事を発信したいと思います。
今回紹介するのは、BluetoothマウスをペアリングすることなくどんなPCでも使えるようにする小型USBドングルの作成方法です。少しイメージが沸かないかもしれないので先に完成動画を紹介します。
動画の例では左のPCから右にPCにドングルを差し替えていますが、ペアリング操作をすることなくマウスをシームレスに使えていることが分かりますね。
では、作り方を紹介していきます。
準備するもの
・Raspberry Pi Zero
・Bluetoothマウス (※1)
・micro USBケーブル
・KM-A22BBK [キーボード・マウス用パソコン切替器] (※2)
(※1)LogicoolのM557がおすすめです。Bouetooth Low Energy非対応のものが接続性が良いようです。Bluetooth Mobile Mouse 3600ではRaspberry Pi Zeroに接続できませんでした。。
(※2)オプションです。USB接続を手動で切り替えても良いです。
接続方法(★2020/09/14追記の重要な点)
Raspberry Pi ZeroをパソコンにとってのUSBマウスデバイスにするためには、USBガジェットとして接続する必要があるので、Raspberry Pi Zero本体の中央に近い方のmicro USBポートに接続します。
USBケーブルのもう片方の端はどのPCに接続しても、Raspberry Pi ZeroとペアリングしたBluetoothマウスでPCのマウスカーソルを
作り方
BluetoothマウスとRaspberry Pi Zeroをペアリング
ペアリング不要といいつつ、Raspberry Pi ZeroとBluetoothマウス自体は一度だけペアリングする必要があります。(すみません。。)
sshでRaspberry Pi Zeroにログイン後、以下の手順でペアリングします。
$ sudo bluetoothctl
# agent on
# default-agent
# scan on
# pair <BluetoothマウスのMACアドレス>
# connect <BluetoothマウスのMACアドレス>
# trust <BluetoothマウスのMACアドレス>
ここで少しコツが必要な手順があります。(★2020/09/14追記の重要な点)
Bluetoothマウスとのペアリングが完了したあと、Raspberry Pi Zeroの/dev/input/ディレクトリ配下にevent0, event1, event2のようにインプットデバイスファイルが出来上がります。この中のどれかがマウスのイベントを送信してくれるデバイスのファイルになります。それを特定するためにhexdumpで各デバイスの入力を監視しながら、Bluetoothマウスを動かしてみます。一番激しく入力反応があったものがマウス入力用のデバイスファイルになります。(もう少しスマートな方法があるかも)
$ hexdump /dev/input/event0 # これが一番激しかったのでこれがマウスの入力用デバイスと判断
$ hexdump /dev/input/event1
$ hexdump /dev/input/event2
私の環境では/dev/input/event0が一番激しかったのでこれがマウス入力用のデバイスだと分かりました。もし、event0以外のデバイスの反応が激しい場合は、後ほどソースコードを変更する必要があるので、メモしておいてください。
DEV_PATH = '/dev/input/event0'
作り方
sshでRaspberry Pi Zeroにログインした状態でここからダウンロードしてください。(★2020/09/14追記:githubもアップデートしています)
# Raspberry Pi上でソースコードダウンロード
$ git clone https://github.com/K-TEE-R/mouse_bridge.git
$ cd mouse_bridge
ここでmouse_bt_to_usb.pyというpythonプログラムソースの先頭のDEV_PATHをさきほどメモしておいたマウス入力用のデバイスパスに変更します。
DEV_PATH = '/dev/input/event2' #'/dev/input/event0'から変更
あとは以下のようにしてセットアップを済ませます。
# OTG有効化(RasPiが、HIDデバイスになれるように)
$ echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
$ echo "dwc2" | sudo tee -a /etc/modules
$ echo "libcomposite" | sudo tee -a /etc/modules
# rootユーザにevdevモジュールをインストール(後述するサービス①が使うので)
$ sudo python -m pip install evdev
# 自動起動サービスの有効化
$ sudo cp etc/systemd/system/* /etc/systemd/system/
# ①Bluetooth HIDイベントをUSBイベントに変換してファイルにするスクリプトを自動起動登録
$ sudo systemctl enable mouse_bt_to_usb.service
# ②起動時にRasPiをHIDデバイスとして登録するスクリプトを自動起動登録
$ sudo systemctl enable usb_gadget_hid_mouse.service
# ①、②のサービスの実体をインストール
$ sudo mkdir /usr/lib/mouse_bt_to_usb
$ sudo cp mouse_bt_to_usb.py /usr/lib/mouse_bt_to_usb
$ sudo cp usb_gadget_hid_mouse /usr/bin
上記を実行したらRaspberry Pi Zeroを再起動します。
ここまでくればBluetoothマウスとRaspberry Pi Zeroがペアリングされた状態のままRaspberry Pi ZeroがPCにマウスのイベントを転送してくれるので、どのPCでもすぐに使うことができます。
まとめ
今回はBluetoothマウスとRaspberry Pi Zeroをペアリングさせてみました。前回の記事のようにLEDをキラキラ光らせる装置と連動させても面白そうです。