スマホからRaspberry PiをBluetooth経由で操作

#なぜBluetooth？

わが家のポケットWifiではリモートデスクトップ接続が出来なかったので、Buletoothでの接続を試みました。

結論から言うとBluetoothは動作が遅く実用性は微妙ですが、
linuxの各種コマンドやBluetooth、VNC等の勉強になったので、
その点では良かったと思います。

※参考にさせて頂いた記事
・全般（下例ではtightvncserverを使用していますが、本稿ではデフォルトのRealVNC使用）
https://www.raspberrypirulo.net/entry/bluetooth
https://qiita.com/hirohiro77/items/d6ddf3abc805c48772c8
・SSHの有効化
https://qiita.com/deco1183/items/9546dd5ff7a97322c27b


#必要なもの
・Raspberry Pi本体（今回はRaspberry Pi3 ModelBを使用）
・Androidスマホ（今回はPixel 3aを使用、OSはAndroid10）
・表示用ディスプレイ（スマホと接続するまでの設定に必要です）

#手順
##①事前準備
**・Bluetooth HCIが有効であることを確認**

```
$ sudo hciconfig
```
→3行目が"UP RUNNING PSCAN"ならOK、"DOWN"だったら

```
$ sudo hciconfig hci0 up
```
を実行

**・BluetoothのBlock解除確認**

```
$ rfkill list
```
→1:hci0:Bluetoothの
　　soft blocked: no
ならOK
　　soft blocked: yesなら

```
$ sudo rfkill unblock bluetooth 
```
を実行

**・/boot/config.txtのBluetooth無効解除**
「/boot/config.txt」を開き、
「# dtoverlay=pi3-disable-bt」
という記述があればコメントアウトして保存

**・必要なパッケージのインストール**
curl、wget、python-dbus、pulseaudio-module-bluetoothをインストールする

```
sudo apt install curl wget python-dbus pulseaudio-module-bluetooth
```

bt-panをダウンロードし、権限を実行可能に変更

```
cd ~
wget https://raw.githubusercontent.com/mk-fg/fgtk/master/bt-pan
chmod +x bt-pan
sudo chown root: bt-pan
sudo mv bt-pan /usr/bin/
```

##②SSHの有効化
・デスクトップ左上のプルダウンメニューから[設定]→[Raspberry Piの設定]にある[インターフェイス]→有効をチェック
・下記コマンドでbootフォルダ内にsshフォルダを作成

```
cd /boot
sudo mkdir ssh
```

##③スマホ側でBluetoothの設定
※スマホ側での操作です
（下記はPixel3aの画面例ですが、機種等により若干異なるはずです）
**・スマホのBluetoothをONにする**
![bluetotho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/82ce9453-25d1-9445-4b77-ee6132631016.png)

**・下記画面の手順で、BluetoothテザリングをONにする**
設定ボタン
![Screenshot_20200417-130423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/852c2770-1c09-5fa9-f6c6-ea392823f6f7.png)

ネットワークとインターネット
![Screenshot_20200417-130546.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/9fc03b9f-5280-4f99-d86d-1b740c7964a2.png)

アクセスポイントとテザリング
![Screenshot_20200417-130627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/18216b2f-b19a-71f0-e4a6-c6b007368dd2.png)

Bluetoothテザリング
![Screenshot_20200417-130712.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/232e503f-699f-b7cb-3c81-2323bdc6b40b.png)


##④スマホとRaspberry PiのBluetoothペアリング
**・スマホ側でペアリング探索**
※スマホ側での操作です
③のBluetooth設定画面から、下図のペアリング設定画面に入る
![Screenshot_20200417-132652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/922bba5d-4936-d687-9f2c-2bc4b807bf83.png)

※Pixel3aではこの画面にMacアドレスも書いてあります

**・bluetoothctlを起動**
※以降は基本的にRaspberry Pi側での操作がメインです

```
$ bluetoothctl
```

**・Bluetoothデバイスをスキャン**

```
power on
discoverable on
scan on
※この下に見つかったBluetoothの一覧が表示される
```
この画面でスマホのMacアドレスが出てくれば成功

**・ペアリング**

```
pair [スマホのMacアドレス]
```
スマホ側、RaspberryPi側共にパスキーの確認が出てくるので、どちらもYESの操作をする
"Pairing successful"が表示されれば成功

**・接続**

```
connect [スマホのMacアドレス]
```
"connection successful"が表示されれば成功

**・Trust**

```
trust [スマホのMacアドレス]
```
"trust succeeded"が表示されれば成功

**・接続の確認**

```
info
```
"connected on"＆"trusted on"となっていれば成功

<br>
※一度接続が切れた後等にconnect等が失敗する場合、removeしてから上記ペアリング～Trustをやり直せば良い

```
remove [スマホのMacアドレス]
```

##⑤PAN接続
**・前のコンソール画面を開いたまま、新たにコンソールを開く**


**・PAN接続**

```
sudo bt-pan client AB:CD:EF:12:34:56
```
何もエラーが出なければ成功
(スマホ側でラズパイをオーディオと認識してエラーが出たりするが、何度か繰り返すと上手くいくことが多そう)

**・ifconfigで接続確認**

```
ifconfig
```

```
bnep0: flags=・・・・

eth0: flags=・・・・
```
上記のように、表示された内容に「bnep0:」が存在すれば成功

##⑥VNCServerを立ち上げ
・デスクトップ左上のプルダウンメニューから[設定]→[Raspberry Piの設定]にある[インターフェイス]→有効をチェック
![2bf2812b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/33940468-c265-2c6d-dd4c-b96713c30f46.png)

・デスクトップ右上のVNCServerタブをクリックし、
記載されているIPをメモしておく
![bd930a41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/98814cfe-60e2-7f34-b22e-85faa2f8e709.png)

##⑦スマホからVNC接続
**・スマホには予めVNC Viewerをインストールしておく**
https://play.google.com/store/apps/details?id=com.realvnc.viewer.android&hl=ja

**・VNC Viewerを開き、右下の「＋」マークを押す**
![Screenshot_20200419-051438.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/41f9ce6d-86ed-da58-7e49-a3d53cfb81b8.png)

**・Addressに⑥でメモしたIPを記載し、CREATE（Nameは空欄でOK）**
![Screenshot_20200419-131648.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/35cf4e3c-d87c-122c-e601-f8c28d425a52.png)

**・ユーザ名、パスワードを入力**
（ユーザ名はデフォルトでは「pi」、パスワードはラズパイ初期インストール時に設定したパスワード）
![Screenshot_20200419-131151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/db94760f-54f4-ff2a-cea5-62f5b619506b.png)

画面が表示されれば成功です。
苦労して接続できたのに本末転倒なコメントですが、やはりBluetoothなので動作は非常にもっさりです。
素直にHDMIを使うのがよさそうだと思いました(笑)


#最後に
我が家のポケットWiFiでもネットワーク構築できるようになったので、
[こちら](https://jellyware.jp/kurage/raspi/vnc.html)を参考にWiFiでのリモートデスクトップも試してみました。

結果、Bluetoothとは比べ物にならない程サクサク動きました。
冗談じゃなく自転車と新幹線くらいの差があります。

**結論：Bluetoothはリモートデスクトップには遅すぎる**