ESP-WROOM-32のBluetooth Classic接続に一部成功
ESP-WROOM-32のBluetooth Classic接続に一部成功したので報告する。
GitHubのbtstackにESP32対応のブランチがある事を発見した。
やり方だが、まず、Ubuntu 16.04 上でesp-idfが既にインストールされてるものとして、説明する。
もちろん、Ubuntu 16.04 は、Bluetooth内蔵、またはBluetooth USBドングルを持っているものとする。
適当なディレクトリで下記を実行する。
$ git clone https://github.com/bluekitchen/btstack.git
$ cd btstack
$ git checkout -b esp32-freertos origin/esp32-freertos
$ cd port/esp32/
$ ./create_examples.py
$ cd spp_counter
ここで sdkconfig を下記の diff を参考に変更する
$ diff sdkconfig sdkconfig.org
32,33c32,33
< CONFIG_ESPTOOLPY_PORT="/dev/ttyUSB0"
< CONFIG_ESPTOOLPY_BAUD_115200B=y
---
> CONFIG_ESPTOOLPY_PORT="/dev/tty.usbserial-DN02B3PF"
> # CONFIG_ESPTOOLPY_BAUD_115200B is not set
37,40c37,40
< # CONFIG_ESPTOOLPY_BAUD_OTHER is not set
< CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=115200
< CONFIG_ESPTOOLPY_BAUD=115200
< CONFIG_ESPTOOLPY_COMPRESSED=y
---
> CONFIG_ESPTOOLPY_BAUD_OTHER=y
> CONFIG_ESPTOOLPY_BAUD_OTHER_VAL=1000000
> CONFIG_ESPTOOLPY_BAUD=1000000
> # CONFIG_ESPTOOLPY_COMPRESSED is not set
ここで、EPS-WROOM-32をUSB接続し、BOOTボタンを押しながら、リセットボタン(ENボタン)を押す
$ make all
$ make flash
プログラムを書き込んだ後、kermit等のターミナルソフトで/dev/ttyUSB0 を速度 115200 で接続して、もう一度リセットボタンを押す
注意すべきは、ここでデスクトップ右上のBluetoothマークをクリックすると、EPS-WROOM-32 が見えるのだが、GUIではペアリングしない事だ。GUIでペアリングすると、以降の接続とテキスト伝送ができないので、GUIでペアリングしてしまった場合はペアリングを解除する。GUIからは、ESP-WROOM-32のBluetoothのBDアドレスを記録するにとどめる。
次にCUIでペアリングする
$ sudo rfcomm bind 0 XX:XX:XX:XX:XX:XX
$ sudo chnod 666 /dev/rfcomm0
もう一つ kermit を起動する
$ kermit
> set line /dev/rfcomm0
> c
とやると、上手くすると、
BTstack counter 0001
BTstack counter 0002
と言うように、SPP 接続してテキストが送られてくる
残念ながら、上手く行っても2行か3行で、ESP-WROOM-32側のプログラムはコアダンプしてしまう。運が悪ければ、接続する以前にコアダンプする。
コアダンプした様子は、/dev/ttyUSB0に接続したKermitでモニターできる。
諦めずに何度も試すと、上手く行くこともあるだろう。
このように、まだまだ、ESP-WROOM-32の Blutooth Classic の SPP 接続は不完全かつ不安定な状態で実用には程遠い。
しかし、少なくとも ESP-WROOM-32が短時間であっても曲がりなりにも Blutooth Classic 接続ができたことが重要であると思ったので、ここに報告した。
GitHubのbtstackも進歩が速いので、放っておいてもいずれは解決するかもしれないが、この書き込みが何かの役に立って解決の糸口が見つかるようになれば、幸いである。
The comments to this entry are closed.
Comments
おはようございます。
コメント拝見して飛んできました。
origin/esp32-freertos の Branch をご利用ですか。
私は origin/esp32 を選択してしてしまいましたが、それがどうか問題だったかどうかは別にして、スマホでテストしようとして先に進めず心を折ってしまいました。
「GUIでペアリングすると、以降の接続とテキスト伝送ができない」なんですか。
情報がなさすぎるため BTstack を諦めて、標準のHCI送受信関数を使って自力で ESP 同士でペアリング成立するところまでは漕ぎ着けたものの、ペアリング後にプロファイルの打ち合わせを ACL でやらないといけないという部分で頓挫!
参考にさせてもらって、ゴールデンウィークにでも戦線復帰したいと思います!!
Posted by: こばさん | April 26, 2017 10:55 AM
いつも参考にさせてもらい、有難うございます。。
btstackをgit clone し、gitk でブランチを眺めていた時に esp32-freertos ブランチを見つけ、これを試した次第です。
同様の方法で、Android スマホの設定から、Bluetooth ペアリングまでは、正常にできます。が、その後は、スマホ用のターミナルソフトで開いてもコネクトできません。たぶん、UbunuのGUIでペアリングしたのと同じ状況になっているものと思われます
現状、「なぜGUIでペアリングすると、ターミナルソフトからコネクトできないか」「SPPでテキスト伝送すると、なぜ2行くらいでコアダンプするのか」は、いずれも不明です。
私は、ESP32に、どんな周辺機器を接続できるかにも興味があって、今のところ、I2c、I2S、ADC、GPIO、BLEには成功しています。GPIOとBLEについては、この前のブログに書きましたが、その他のI2c、I2S、ADCは、いずれブログに記事を書こうと思いつつ、ESP32に未だ残されているDACやタイマー、PWM、SDカードI/Fなども試したいと思っている最近です。
今後とも、よろしくお願いします。
Posted by: 野田篤司 | April 26, 2017 10:30 PM