ESP32でBluetoothのペアリングをしたときにすぐに接続が切られてしまう場合の対処法
ESP32とMac/Ubuntuの間でシリアル通信をしようとしたとき、ペアリングまではうまく行ってもすぐに「切断」や「未接続」になってしまったときの対処法。
結論
そういうものかもしれない。 Macなら気にせずそのままシリアル通信をする。Ubuntuは設定が必要。
環境
Ubuntuの自作デスクトップとMacbook(2017)の両方で試した。
- Ubuntu機
- OS: Ubntu20.04
- CPU: Ryzen2600
- メモリ: 16GB
- グラフィックボード: GTX1650
- Bluetoothドングル: IO-DATA USB-BT40LE
- Macbook(2017)
- Core m3
- メモリ8GB
プログラム
gist2e5972077dc5fd1e141f78aa7c59b306
上のプログラムをplatformioで書きこんだ。
問題
ペアリングは成功して、ペアリングしたデバイス一覧には出てくるが、ペアリングした2秒後くらいにはすぐにBluetooth接続が切断されてしまう。 ペアリングはUbuntuは「Settings」アプリの「Bluetooth」の項目から自分のデバイス名を選んでペアリングした。Macは「システム環境設定」の「Bluetooth」の項目から同様にやった。UbuntuではPINの確認Windowが出てくるが気にせずそのまま「OK」を押すことでペアリングできる。
やったこと(プログラム側)
pio updateでライブラリのバージョンをあげたり、platformio
のplatform = espressif32
をplatform = espressif32@<3.2
にしてバージョンを落としたり、名前が衝突したりしているのかと思ってBTSerial
をSerialBT
に変えたりしてみた。
余談
platform
のバージョン、1.0.6みたいなバージョンと3.3みたいなバージョンの2通りの表され方?があるようで、調べたときに1.0.6から1.0.5に落としましょうみたいなことが書いてあって、platform = espressif32@<1.0.6
とかって書いてもそんなバージョンありませんとか言われて結局3.x.xとかで指定すると結果的に1.0.5になったりした。よくわからないけどわかりにくい。
やったこと(接続する側)
Ubuntuでは上のリンクの記事と同じ手順を踏んだ所、/dev/rfcomm0
を通してシリアル通信できるようになった。
このとき、Bluetoothが「切断」の状態になっていても/dev/rfcomm0
を使ってシリアル通信を始めると勝手に「接続」状態になった。このことからMacでも「未接続」と表示されていてもシリアル通信を始めれば勝手につながるのではないかと思って/dev/cu.デバイス名-ESP32SPP
でシリアル通信を始めたところ、シリアル通信ができた。(デバイス名はプログラム内で指定した名前。上のプログラムの場合はESP33SerialTest
。)
シリアル通信はUbuntuもMacもminicom -o -b 115200 -D /dev/シリアルポート
とターミナルでやって確認した。(シリアルポート
は適宜置き換え)
結論
Macでは「未接続」と表示されていてもそのままシリアル通信を始めれば「接続済み」になる。
Ubuntuは↑の記事通りにやれば使えるようになる。