はじめに
BluetoothにはClassicとBLE(Bluetooth Low Energy)の2種類あります。Bluetooth通信ができるマイコンは後者のBLEを用いている場合が多いと思います(ESP32はどちらも使用可能)。
C#を用いてBLE通信を行う記事は存在するものの、Bluetooth Classicや有線と同様にCOMポートからシリアル通信を行う記事をあまり見つけられなかったので、備忘録として載せておきます。
仮想COMポートの作成 (Windowsの場合)
仮想シリアル(COM) ポートドライバであるcom0comをインストールします。こちらからexeファイルをダウンロードします。
Windows10+の場合はセキュアブートをオフにする必要があるかもしれません。
ble-serialのインストール
こちらのble-serialを使用します。
基本的にはREADMEに従ってインストールを行えばOKです。
ble-serialのインストール
$ pip install ble-serial
COMポートの割り当て
$ ble-com-setup.exe
デフォルトではCOM9に割り当てられます。
接続
BLEデバイスのスキャン
$ ble-scan
20:91:48:4C:4C:54 (RSSI=-56): (デバイスの名前)
...
得られた出力からMACアドレスを確認
デバイスに接続
$ ble-serial -d 20:91:48:4c:4c:54
Running main loop!と表示されればOKです。
ここで、ble-scanに表示されるにもかかわらず "Bluetooth connection failed. Device not found"と出る場合は --address-type random
とオプションをつけると接続できる場合があります。
テスト
マイコン
Adafruit Feather nRF52840 Senseでテストを行いました。
-
Arduino IDEの設定
https://learn.adafruit.com/adafruit-feather-sense/arduino-support-setup -
マイコン側のプログラム
サンプルプログラムを用いる(Examples->nRF52840->Peripheral->bleuart)
https://learn.adafruit.com/adafruit-feather-sense/arduino-ble-examples
PC側のプログラム
TeraTermなどではCOMポートを認識しないので、Pythonを使う
import serial
ser = serial.Serial('COM9')
ser.write(b'hello')
ser.close()
参考文献