ESP-IDFを使ってみる

BluetoothとBLE

ESP32のBluetoothコントローラーは、BR/EDR(Basic Rate/Enhanced Data Rate)と、BLE(Bluetooth V4.2)の両方をサポートしています。
BRとはV1.0から存在する方式のBluetooth無線で、EDRとはV2.0で追加された方式のBluetooth無線です。
スペック上、BRとEDRをまとめて、BR/EDRとかBluetooth Classicと呼ばれています。
ESP32のBluetooth Architectureはこ ちらに公開されています。

ESP-IDFにはBR/EDRとBLEの両方のサンプルが含まれています。
BR/EDRのサンプルはこ ちら、BLEのサンプルはこ ちらです。

BR/EDRのサンプルの中では、SPPのサンプルが分かり易いです。
2台のESP32を使って、片方でこ ちらのacceptorを、もう片方でこ ちらのinitiatorをビルドします。
EDRのスペック上の転送速度は3Mbpsですが、ESP32では大体1.6Mbpsぐらいのスピードで通信することができます。




acceptorのサンプルを使うと、簡単に音声でESP32を操作することが出来るようになります。
始めに、こ ちらのサンプルのソース(example_spp_acceptor_demo.c)を一部変更します。
//#define SPP_SHOW_MODE SPP_SHOW_SPEED    /*Choose show mode: show data or speed*/
#define SPP_SHOW_MODE SPP_SHOW_DATA    /*Choose show mode: show data or speed*/

これでSPPで受信したデータを表示できるようになります。
ビルドして実行するとSPPの受信待ちになります。

次に、スマホにこ ちらのアプリをインストールします。
このアプリは音声をテキストに変換し、SPPで送信するアプリで、HC05やHC06を受信機として使われることが多いです。
スマホにアプリをインストールしたら、ペアリングデバイスにESP_SPP_ACCEPTORを追加します。
ペアリングデバイスの追加はこ ちらな どを参考にしてください。
アプリを起動したら、CONNECTメニューから「ESP_SPP_ACCEPTOR」を選んでペアリングします。




さらに、LANGUAGEメニューから「JA」を選んで日本語が認識できるようにします。


この状態でマイクロフォンをタップし喋ると、喋った日本語がESP32側に表示されます。


日本語で喋ってみました。
なかなかいい感じです。
普通に日本語で使うことができます。
デモコードはこ ちらで公開しています。


最初は「おはよう」を認識してくれませんでしたが、どうも学習機能が有るようで、沢山喋ったら認識してくれるようになりました。
ただ、「ハロー」は認識しますが、「ハローESP32」は英語になってしまいます。
もう少し、鍛える必要が有りそうです。


長い日本語もきちんと認識することができます。
ソースは見ていないですが、おそらくGoogleの翻訳機能を使っているのだと思います。






こ ちらのアプリも音声をテキストに変換し、SPPで送信することができます。
Bluetooth接続時にTerminal modeを選びます。


音声入力だけでなくIMEからも入力することができます。




こちらの音声合成ライブラ リを併用すれば、簡単にAlexaもどきが作れます。
英語だけでよければ、こちらの XFS5152CE音声合成モジュールを使うこともできます。



BLEのサンプルの中では、スループットを求めるサンプルが分かり易いです。
2台のESP32を使って、片方でこ ちらのserverを、もう片方でこ ちらのclientをビルドします。
こちらはBLEのNOTIFYを使っています。
BLE V4のスペック上の転送速度は1Mbpsですが、ESP32では500Kbpsぐらいのスピードで通信することができます。




ESP32シリーズのBluetooth/BLEのサポートはモデルにより微妙に違います。
一覧にするとこのようになります。

BR/EDR BLE 4.2 BLE 5.0
ESP32 ×
ESP32S2 × × ×
ESP32S3 ×
ESP32C2(ESP8684) ×
ESP32C3(ESP8685) ×
ESP32C6 ×
ESP32H2 ×

ESP32S3などはBLE 4.2と5.0をサポートしていますが、どちらを使うかは以下のCONFIG値により決定します。
これは4.2の時です。
# CONFIG_BT_BLE_50_FEATURES_SUPPORTED is not set
CONFIG_BT_BLE_42_FEATURES_SUPPORTED=y

これは5.0の時です。
CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y
# CONFIG_BT_BLE_42_FEATURES_SUPPORTED is not set


続く...