BT-PANを使つてBluetoothテザリング
利点
電力消費が少ない、ノイズが少ない(気がする)
欠点
遅い、通信可能距離が短い
上記はMPD操作のみなのであまり問題にならないかと
環境
スマホ側
テザリング(Wi-Fiホットスポット)とBluetoothの機能 Bluetooth機能、Bluez、BT-PAN、pithon-dbus、それぞれの動作環境
手順
スマホとPiのペアリング
sudo bluetoothctlから操作。power on、scan onでスマホのMACアドレスを取得してpair xx:xx:xx:xx:xx trust xx:xx:xx:xx:xxでペアリングと登録。
connectに失敗しても気にしない。
BT-PANスクリプトをダウンロード、実行権限の付与、所有者をrootに、あとは適当な(パスの通つてゐる)場所に移動。
code:sh
cd ~
chmod +x bt-pan
sudo chown root: bt-pan
sudo mv bt-pan /usr/bin/
wget等が無い場合は事前にインストール
python-dbusが無いと動かないのでsudo apt install python-dbusでインストール
python-dbusの配布は終了してゐる(python3-dbusとなつた)
2to3をインストールし、bt-pan1行目のpython2をpython3に書き換へた上でsudo 2to3 -w bt-panなどとして変換
pulseaudio-module-bluetoothも必要と書いてあるのを見るけれど、無くても動いたつぽい(?)
スマホ側でBluetoothテザリングをONにする。
これを忘れると以降の手順が全て正しくても接続できないので注意。
BT-PAN実行
sudo bt-pan client xx:xx:xx:xx:xxでクライアントとしてスマホに接続する。
ip aで接続先を確認してbnep0ポートが新たに開いてゐれば成功。
自動でIPv4アドレスが割り振られてゐればそこにスマホからアクセスできる。
スマホ側でBluetoothテザリングがONになつてゐないとここでbnep0が出来ない。
IPv4アドレスが無い場合は手動で割り当てる(乱暴な感じだけれどこれでいけたので)。
sudo ip addr add xxx.xxx.xxx.xxx/24 dev bnep0みたいな感じ。
(dhcp辺りで設定する方がお行儀がよさげだけれど、よく解らない)
起動時にONにする。
上記をスクリプト(bt-pan.shなど)にまとめる。
code:sh
bt-pan client xx:xx:xx:xx:xx
ip addr add ***.***.***.***/24 dev bnep0
chmodで実行権限付与、chownでrootにして/opt辺りにでも置いておく。
サービスとして登録
以下の様なbt-pan.serviceファイルを作り/etc/systemd/system辺りに設置。
code:sh
Description=Bluetooth Tethering
After=Bluetooth.service
Requires=Bluetooth.service
ExecStart=/opt/bt-pan.sh
Type=oneshot
WantedBy=multi-user.target
sudo systemctl enable bt-pan.serviceで有効化。
Raspberry Pi OSでこける。
起動時にこける場合、ExecStartPre /bin/sleep 10などでスクリプト実行を遅延させると行けるかも(乱暴)
もう少し典雅な方法があれば知りたい