【Ble通信入門】Bleでロボットを制御する♪

今回は、Ble(Bluetooth Low Energy)通信を利用して、ロボットを制御する。

【参考】
・[Raspberry Pi 3にBluetoothでログインする](https://qiita.com/Hiroyuki_OSAKI/items/0387b73f3006e51f4c9a)

話は、参考の通りでうまく接続できたが、少し苦労したのでまとめを記載する。
###Raspi側
```
sudo bluetoothctl
[bluetooth] power on
[bluetooth] discoverable on
[bluetooth] agent on
[bluetooth] default-agent
```
実際は、Raspi側は以下の通り

```
pi@pi:~ $ sudo bluetoothctl
Agent registered
[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller DC:A6:32:72:D0:65 Discoverable: yes
[bluetooth]# agent on
Agent is already registered
[bluetooth]# default-agent
Default agent request successful
[CHG] Device 00:1B:DC:FD:B4:95 Connected: yes
Request confirmation
[agent] Confirm passkey 256791 (yes/no): Request canceled
[CHG] Device 00:1B:DC:FD:B4:95 Connected: no
[CHG] Controller DC:A6:32:72:D0:65 Discoverable: no
[CHG] Device 00:1B:DC:FD:B4:95 Connected: yes
Request confirmation
[agent] Confirm passkey 026495 (yes/no): yes
[CHG] Device 00:1B:DC:FD:B4:95 Connected: no
[CHG] Device 00:1B:DC:FD:B4:95 Connected: yes
Request confirmation
[agent] Confirm passkey 121165 (yes/no): yes
Authorize service
[agent] Authorize service 0000110e-0000-1000-8000-00805f9b34fb (yes/no): yes
Authorize service
[agent] Authorize service 0000110d-0000-1000-8000-00805f9b34fb (yes/no): Request canceled
```

###Windows側
Raspi側処理を実施した後、「Bluetoothまたはその他のデバイスを追加する」をクリックすると以下の画面になる。ここで、Bluetoothを選ぶとそのうちRapspiのマシン名が現れる。
![add_device.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/251427f6-c544-4529-d3cf-a90afef505f8.png)
piが現れたら、ＰＩＮを上記のRaspi側のように確認してYesとし、その後以下の画面の接続を押下する。
※default-agentを入力しないと接続動作はするが接続は切られるから注意
![add_device_pi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/a87442a4-4675-51bd-bc6c-09201b8ee5ad.png)
こうして、以下のように無事に接続できる。オーディオのところにpi　ペアリング済が記載された。
![raspi_connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/daa696c1-1011-9b4f-f5f4-40762a874f99.png)
###PuTTYで接続
参考のようにRaspi側のネットワークマークに合わせて、RaspiのIPアドレスを取得する。
それをPuTTYを立ち上げ、HostName（or IP address）に入力し、Openを押下する

![PuTTY.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/ab23e09b-16de-87d3-23f7-426f4e00584d.png)
とRaspiのログイン画面が出現するからuser名とpasswordを入力してSSH接続する。
![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/5359b86d-197b-d9de-8750-6dfd8c342418.png)

こうして、あとは、アプリのあるDirectryに移動して、アプリを実行する。
一応、以下のようにVNCviewerでも接続して、Vscodeで開発・実行と同時に実施できた。
※これについても非常に便利なので後日手順をまとめようと思う
![PuTTYvsVNCviewer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/86a791be-ad93-eff9-0607-688af3bd31e7.png)
###不都合
実は、アプリの中に動画を表示させるものがあったが、
以下のようなエラーを吐いて落ちてしまった。
※解決していないので、解決したら追記したい

```
 $ python thread_servo.py
Unable to init server: Could not connect: Connection refused
Unable to init server: Could not connect: Connection refused

(thread_servo.py:1992): Gdk-CRITICAL **: 23:17:47.769: gdk_cursor_new_for_displa      y: assertion 'GDK_IS_DISPLAY (display)' failed

(thread_servo.py:1992): Gdk-CRITICAL **: 23:17:47.777: gdk_cursor_new_for_displa      y: assertion 'GDK_IS_DISPLAY (display)' failed
: cannot connect to X server
```
また、今回は別途Vscodeで開発したものをBle接続して動かせたというものであり、開発は以下のようにnanoでは出来るが、PC上でVscodeで実施して転送することができていないので、でき次第追記しようと思う。
![nano.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/88fc4380-3fbb-ee4c-dee0-3a003d9073a3.png)