マツド・サイエンス研究所

ESP-WROOM-32のBluetooth Classic SPP接続に成功

GitHubのbtstackが進んでいて、ESP-WROOM-32のBluetooth Classic SPP接続に成功したので、報告する。

前回(4月25日)の時点では、接続後わずか数秒でアボートしていたが、今回は、200kpbs (もしくは250kpbs)と言う高速で安定して通信できるようになった。

ESP-WROOM-32には、3つの無線通信機能がある

・Wifi

・Bluetooth Classic

・Bluetooth Low Energy (BLE)

この内、Wifiは、無線LANそのものなので判りやすいが、Bluetooth Classic と BLE の違いが判り難い。

Bluetooth Classic は、Bluetooth 3.0以前から存在するプロトコルで、どちらかと言えば高速性を目指したもので、BLEは、Bluetooth 4.0で新設されたプロトコルで、高速性よりも低消費電力性を目指したものだ。

Bluetooth 4.0以降は、Bluetooth ClassicもBLEも包含した規格なので、ややこしい。

Wifi、Bluetooth Classic、BLEの特徴を整理すると、おおよそ、次のようになる。

・Wifi:無線LAN 周辺機と言うよりネットワークとしての接続方法。伝送速度は数Mbps以上と高速

・Bluetooth Classic 周辺機器用プロトコル。特にSPPは接続が簡単。速度は実効的に200kpbs程度

・BLE 低消費電力。周辺機器用。速度は実効的に5kbsp程度で遅い。親機専用に個別アプリを作る必要がある。

Bluetooth Classic SPP は、昔からあるプロトコルで、親機のターミナルソフトからシリアル通信できるように接続が簡単なため、良く使われてきた。ただし速度が早い分、消費電力も大きい。
一方、BLEは、新しい規格のため、Androidなら4.3以降、Windowsなら8以降でないと使えないし、親機側にいちいち専用個別アプリを作る必要があって、面倒。その代わり、低速だけど低消費電力のためボタン電池で何ヶ月も使えると言うメリットもある。

私も含めて、自作派としては、馴染みのある Bluetooth ClassicのSPP が、ESP-WROOM-32の無線通信機能の中で、最も使うことができずにいたのが、今回のbtstackで使えるようになったのが、嬉しいところだ。

さて、肝心の使い方だが、、Ubuntu 16.04 上でesp-idfが既にインストールされてるものとして、説明する。

(この辺、

前回

前々回

の記事を参考して欲しい)

また、パッチも作った。

「patch.patch.gz」をダウンロード

作業は次の通り

$ git clone https://github.com/bluekitchen/btstack.git
$ patch -p1 -d btstack < patch.patch
$ cd btstack/port/esp32/
$ ./create_examples.py
$ cd spp_counter/
$ make all
$ make flash << ESP-WROOM-32をUSB接続していれば、書き込まれる >>

これで、例えば Android なら、普通にBluetoothペアリングした後、「BT Simple Terminal」などでオープンすれば、一秒ごとに「BTstack counter (数字)」が送られてくる。(私が試したのは、Android7.0 スマホだが、Android4.2以前のスマホでも接続できるはずだ)

Ubuntuなら、前回と同じようにCUIでペアリングする(GUIでペアリングしていけないのは前回と同じ)

$ sudo rfcomm bind 0 XX:XX:XX:XX:XX:XX
$ sudo chnod 666 /dev/rfcomm0
$ kermit
> set line /dev/rfcomm0
> c

とやると、「BTstack counter (数字)」が送られてくる。(今回は安定して長時間送られてくる)

Windows10の場合、ペアリングまでうまく行くのだが、ターミナルソフトで仮想COMポートを開くとエラーになると言う不具合が残っている。

Ubuntuを親機として、「BTstack counter (数字)」の代わりに大量にデータを送るプログラムを作ったら、毎秒約25kバイトの安定した通信に成功した。毎秒25kバイトは、1バイトは8ビットなので、200kbpsなのか、仮想的なシリアル通信とすると、スタートビットとストップビットを足して1バイトを10ビットとして250kpbsと計算するのかは、わからないが、とにかく、「毎秒約25kバイトの安定した通信」を確認できたことは間違いない。200kbpsだろうが、250kpbsだろうが、Bluetooth Classic SPP接続としては、ほぼ上限値なので、大成功と言えよう。

WindowsでのSPP通信が未だできていなので、完全ではないが、AndroidとUbuntuとの通信実験に成功したので、報告した次第である。

(MACと実験していないのは、単にMAC環境が手元にないだけのことである)

注意

ブログのコンテンツの内、「告知」など時期よって情報価値が無くなるのは除いてある。また、コンテンツに付いたコメントは書き込み者に著作権があるものと判断し、ここに持ってきていないので、コメントを見るときは、元々のブログコンテンツを参照してもらいたい。

その他、ブログ発表後、コメントなどの内容を反映するなど、内容を変更しているものもあるので、注意してほしい。