スマートフォンのBluetoothテザリングとRaspberry Pi 3を接続する
Raspberry Pi 3のBluetoothを使ってネット接続をしたいと思い実験しています。
ネットで検索すると古いOSバージョンでの例が多く引っかかります。なにやら複雑そうな手順が多いですね。最近のバージョンではどうしたらよいのだろう?
今回はRPi3からスマートフォンのテザリングへの接続手順をメモしておきます。とても簡単な手順で接続できました。
Raspberry Pi 3のBluetoothを使ってスマートフォンと接続したいと思い実験しています。目的は単純にSSH接続をBluetoothでしたいだけ。
一応、スマートフォンのBluetoothテザリングへの接続ができました。逆にRPi3をアクセスポイントとしてスマートフォンからRPi3へ接続しインターネットへつなぐ事もできました。しかしながら、思ったルーティングができないでいます。
今回はRPi3からスマートフォンのBluetoothテザリングへの接続手順をメモしておきます。
今回の例で使うRPi3のOSはRASPBIAN JESSIE WITH PIXELです。この記事公開時で一番新しいものです。
まず、スマートフォンのbluetoothの設定画面を開き検索で表示されるようにします。
次に、RPi3のデスクトップのBluetoothアイコンをクリックして"Add Device..."をクリックします。
スマートフォンが見つかったら"Pair"ボタンを押します。
スマートフォンとRPi3の双方でペアを承認します。
ペアリングが成功しても接続はされません。使えるプロファイルが今は存在しないからです。
次はRPi3側でBluetoothのネットワークプロファイルを使えるようにします。
そのためにbt-panというスクリプトを使うようです。
まずはスマートフォン側を設定します。Bluetoothテザリングの設定画面を表示させます。Bluetoothテザリングを有効にします。
次はRPi3の設定です。
スマートフォンのbdaddrを見つけます。bdaddrとはスマートフォンのbluetoothのIDです。ターミナルから"bluetoothctl"とコマンドを打つと次の様に表示されるでしょう。
"quit"といれblutoothctlコマンドから抜け出ます。
このbdaddrへbt-panを使って接続します。次のコマンドを入れます。
ipアドレスを確認してみましょう。
これでスマートフォン経由でインターネットにつながります。
上のbnep0のIPアドレスでスマートフォンからRPi3へSSH接続ができます。
"/home/pi/bt-pan" としておきます。
ファイルを置いたら再起動します。そして
動きませんでした。
bt-panで"--systemd"を指定すると
なんのエラーなのでしょう?
とりあえずpython-systemdを眺めて必要そうなパッケージを確認するも良くわかりませんでした。
raspbian jessieの次のバージョンではカーネルバージョンが上がりそうなのでこの問題はしばらく放置します。
routeを見るとBluetoothテザリングはeth0の次の優先順位となっていました。
SSH接続もBluetoothでできます。
しかしながら、自動的にスマートフォンとつながってくれないとあまり利用価値がないです。外出先でお手軽につなぐ手段としてBluetoothを使いたいのですが、bt-panコマンドを入力するという事は他の方法でRPi3へつながっているという事です。Bluetoothをつなぐ意味がないです。
systemdオプションとwaitオプションの挙動がよくわかっていません。再接続まで面倒をみてくれるのかな?と期待したのですがそういうわけでも無いようです。
次回はRPi3側をインターネットのアクセスポイントとして使う手順をメモする予定です。
ネットで検索すると古いOSバージョンでの例が多く引っかかります。なにやら複雑そうな手順が多いですね。最近のバージョンではどうしたらよいのだろう?
今回はRPi3からスマートフォンのテザリングへの接続手順をメモしておきます。とても簡単な手順で接続できました。
Raspberry Pi 3のBluetoothを使ってスマートフォンと接続したいと思い実験しています。目的は単純にSSH接続をBluetoothでしたいだけ。
一応、スマートフォンのBluetoothテザリングへの接続ができました。逆にRPi3をアクセスポイントとしてスマートフォンからRPi3へ接続しインターネットへつなぐ事もできました。しかしながら、思ったルーティングができないでいます。
今回はRPi3からスマートフォンのBluetoothテザリングへの接続手順をメモしておきます。
今回の例で使うRPi3のOSはRASPBIAN JESSIE WITH PIXELです。この記事公開時で一番新しいものです。
$ uname -a Linux raspberrypi 4.4.41-v7+ #942 SMP Mon Jan 9 15:00:25 GMT 2017 armv7l GNU/Linux
スマートフォンとラズベリーパイをペアリングする
Bluetoothではペアリングをしないと話が始まりません。"blutoothctl"コマンドを使うそうです。OSを入れたら最初から使えます。ですが面倒そうなのでここはUIを使ってペアリングしましょう。RPi3でデスクトップを表示しましょう。まず、スマートフォンのbluetoothの設定画面を開き検索で表示されるようにします。
次に、RPi3のデスクトップのBluetoothアイコンをクリックして"Add Device..."をクリックします。
スマートフォンが見つかったら"Pair"ボタンを押します。
スマートフォンとRPi3の双方でペアを承認します。
ペアリングが成功しても接続はされません。使えるプロファイルが今は存在しないからです。
次はRPi3側でBluetoothのネットワークプロファイルを使えるようにします。
Personal Area Network(PAN)を使えるようにする
RPi3でBluetoothのネットワークを使うにはPersonal Area Network(PAN)というプロファイルを使えるようにしなくてはなりません。そのためにbt-panというスクリプトを使うようです。
mk-fg /fgtk / bt-panこのスクリプトをホームディレクトリにダウンロードします。
wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan実行許可を与えます。
chmod +x bt-panスクリプトの説明はこちらにありました。
bt-pan https://github.com/mk-fg/fgtk#bt-panこれで接続の準備ができました。
スマートフォンのBluetoothテザリングを使いRaspberry Pi 3をインターネットへ接続する
スマートフォンのテザリングへRPi3をつないでみましょう。まずはスマートフォン側を設定します。Bluetoothテザリングの設定画面を表示させます。Bluetoothテザリングを有効にします。
次はRPi3の設定です。
スマートフォンのbdaddrを見つけます。bdaddrとはスマートフォンのbluetoothのIDです。ターミナルから"bluetoothctl"とコマンドを打つと次の様に表示されるでしょう。
$ bluetoothctl
[NEW] Controller B8:27:xx:xx:xx:xx raspberrypi [default]
[NEW] Device 00:EB:xx:xx:xx:xx Smartphone1
[NEW] Device 84:8E:xx:xx:xx:xx Smartphone2
テザリング先のスマートフォンはSmartphone1だとすると"00:EB:xx:xx:xx:xx"が必要なbdaddrです。"quit"といれblutoothctlコマンドから抜け出ます。
このbdaddrへbt-panを使って接続します。次のコマンドを入れます。
sudo ./bt-pan --debug client 00:EB:xx:xx:xx:xxスマートフォンにテザリングの表示がされれば接続成功です。このコマンドを入れる前にスマートフォンでBluetoothテザリングを有効にしておくのを忘れないでください。
ipアドレスを確認してみましょう。
$ ip a 11: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether b8:27:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.44.173/24 brd 192.168.44.255 scope global bnep1 valid_lft forever preferred_lft forever inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever上の例の様にbnep0というインターフェースができているでしょう。
これでスマートフォン経由でインターネットにつながります。
上のbnep0のIPアドレスでスマートフォンからRPi3へSSH接続ができます。
systemdで動かしてみる(動いてない)
systemdに登録してみます。やり方はこちらに倣います。Bluetooth PAN Client with Systemd / The Blind Guru"pan-client.network"というファイルと"pan@.service"というファイルを示されたフォルダに作ります。"pan@.service”内のbt-panがある場所が異なる場合は修正しましょう。今回の例ではホームディレクトリにbt-panがあるので
"Configuring the client is also quite easy to do with Systemd."
"/home/pi/bt-pan" としておきます。
ファイルを置いたら再起動します。そして
systemctl start pan@00:EB:xx:xx:xx:xxとしておけば良いようです。が・・・
動きませんでした。
bt-panで"--systemd"を指定すると
ImportError: No module named systemdとエラーが出て動きません。
なんのエラーなのでしょう?
とりあえずpython-systemdを眺めて必要そうなパッケージを確認するも良くわかりませんでした。
raspbian jessieの次のバージョンではカーネルバージョンが上がりそうなのでこの問題はしばらく放置します。
まとめ
Bluetoothテザリングへの接続は複雑そうだなぁと思っていましたが、スクリプトを一つ入れるだけでできるようになります。routeを見るとBluetoothテザリングはeth0の次の優先順位となっていました。
$ route カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース default router 0.0.0.0 UG 202 0 0 eth0 default 192.168.44.1 0.0.0.0 UG 217 0 0 bnep0 default router 0.0.0.0 UG 303 0 0 wlan0 192.168.11.0 * 255.255.255.0 U 202 0 0 eth0 192.168.11.0 * 255.255.255.0 U 303 0 0 wlan0 192.168.44.0 * 255.255.255.0 U 217 0 0 bnep0テザリング接続しても有線LANがつながっていればそちらを使うようです。WiFiのwlan0より優先順位は高いのでWiFiは使わなくなります。
SSH接続もBluetoothでできます。
しかしながら、自動的にスマートフォンとつながってくれないとあまり利用価値がないです。外出先でお手軽につなぐ手段としてBluetoothを使いたいのですが、bt-panコマンドを入力するという事は他の方法でRPi3へつながっているという事です。Bluetoothをつなぐ意味がないです。
systemdオプションとwaitオプションの挙動がよくわかっていません。再接続まで面倒をみてくれるのかな?と期待したのですがそういうわけでも無いようです。
次回はRPi3側をインターネットのアクセスポイントとして使う手順をメモする予定です。
コメント
コメントを投稿