4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Arduino-ESP32でBluetooth LEの送受信アプリケーションをサクっと作ってみた

Last updated at Posted at 2019-09-11

概要

Arduino-ESP32でBLEのエコーバック(受信したデータをそのまま送信して返す)をするシンプルなアプリケーションを作りました。

ArduinoIDEに入っているサンプルアプリケーションをちょい変するだけでサクっと作れました。

使用したもの

  • M5Stick-C ※Arduino-ESP32対応デバイスであれば何でもよいと思います
  • Arduino IDE(バージョン1.8.5を使用)
  • Nexus 7 (2013) ※nRF UART 2.0を使用できるBLE対応のAndroid 端末であれば何でもよいと思います
  • nRF UART 2.0(Androidアプリ)

作成&動作手順

  1. スケッチ(githubに置きました)をM5Stick-Cに書き込みます
    ※Arduinoの設定に注意が必要です!(下記の「ポイント2」参照)

  2. Androidアプリ(nRF UART 2.0)をAndroid端末にインストールして起動します

  3. インストールしたAndroidアプリにて、M5Stick-CにBluetoothの接続をします
    STEP0.png

  4. アプリにて、M5Stick-CにBLEのUARTデータを送信します
    STEP1.png

  5. 送信したデータと同じデータがM5Stick-Cから返ってきます
    STEP2.png

Arduinoのスケッチ

Arduinoのスケッチはgithubに置いたコードの通りです。Arduino IDEの「スケッチの例」に入っている「BLE_uart」をベースにして変更しました。

ポイントは以下の2つです。

ポイント1

最初のポイントは、Mutexを使ったということです。

BLEの受信処理(コールバック)で取得したデータを送信処理(メインループ)にて使用します。その2つの処理で共通して使用するデータ(bleDataIsReceived, storedValue)をMutex(storeDataMux)を使用して排他制御をすることで、データ利用のバッティングを防ぎます(参考記事

simple_ble_echo_back.ino(一部抜粋)
boolean bleDataIsReceived;
std::string storedValue;
portMUX_TYPE storeDataMux = portMUX_INITIALIZER_UNLOCKED;

ポイント2

ポイント2は、プログラム領域のパーティション設定をOTAを使わないものに変えたことです。

デフォルトのパーティション設定のままコンパイルすると、「スケッチが大きすぎます。・・・・」とエラーになってしまいます。そのため、Partition Schemeの設定値としてOTAを使用しないようにしました(下図の「Arduinoの設定」参照)。

Arduino-ESP32では、デフォルトでOTA領域(無線のプログラム書き込み用領域)を確保しています。しかし、BLEのライブラリを利用するようなプログラムサイズが大きいものでは納まりきらないようです。今回はOTAを行うアプリケーションではないので、この対処方法で問題ないと判断しました。

図:Arduinoの設定
設定.png

終わりに

これまでESP32でBluetoothをあまり使用したことがありませんでしたが、サンプルのスケッチを使用して送受信が思いのほか簡単にできました。

これはArduinoのサンプルスケッチと使用したAndroidアプリの親和性が大きいことが一番大きな要因だと思います。Androidアプリを作ったNordicさんに感謝です。

それと、「ポイント1」にも関連するのですが、実はデータを受信する処理とそれを利用する処理がシーケンシャルではないため、受信データを利用する前に次の受信データを取得してしまうと前のデータを利用できなくなったりします。

これについては、受信データの格納先をキューにしたりリングバッファにしたりして、複数のデータを保持できるような仕組みが必要となります。(今後対応するかもしれませんが、必要に駆られないとやらない可能性が大きいです・・・)

見ていただいてありがとうございました。
тнайк чoμ_〆(・ω・。)

参考記事

更新履歴

  • 2019-09-11:新規作成
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?