旅を楽しくするArduino端末を作る。その15-Arduino言語を用いながらBluetoothで通信できるESP32-

第15回ではArduino言語(開発環境)を利用しながら、BluetoothとWifi通信が内部実装されているマイコン「ESP32-WROOM-Devkit」を使い、無線シリアル通信を実装します。
第14回はこちらからどうぞ

ESP32-DevKitに関して

Development Boards | Espressif Systems

今回ご紹介するESP32-DevKitC ESP-WROOM-32(今後ESP32と呼称)は、Arduino言語を用いてWifi/Bluetooth通信が簡単に行えるESP-WROOM-32を、評価用に必要な部品を実装した状態で販売されているものです。
一般的なArduino(Unoなど)でもWifiモジュールやbluetoothモジュールをつなげば、無線通信を実装することは可能なのですが、こちらのESP32は購入時点でWifi/Bluetooth通信に必要なすべてが内部実装されており、なおかつ別々で購入するより非常にお得になっております。

また、I2C通信等も可能ですので、既存のArduinoから置き換えるだけで(ピン配列は異なるので純粋な置き換えは不可)無線通信環境を実装できます。今回はESP32で実装可能な無線通信の中からBluetoothシリアル通信(SPP)をテストしてみたいと思います。

下準備

Arduino IDEで今回は開発を行っていきますので、Arduino IDEのセットアップが必要となります。
ここでは、インストールが完了し、何かしらのArduino端末にコードを配置できるようになっている状態から説明いたします。

Arduino IDEを起動し、上部のメニューバーから
ファイル>環境設定
に進み
設定ウインドウ下部にある
「追加のボードマネージャー」

https://dl.espressif.com/dl/package_esp32_index.json

を追加いたします。
これをすることでArduino IDE内のボードマネージャーから、ESP32と通信を行う環境を入れる準備ができます。

追加後、
ツール>ボード:>ボードマネージャー
を開き、ボードマネージャーウインドウ上部にある検索ボックスに
ESP32
と入力し
「esp32 by Espressif Systems」
をインストールします。

インストール後は先ほどの「ツール>ボード:」内にESP32 Dev Moduleが出現しますので、こちらを選択すると後は他のArduino端末と同様に操作が可能となります。

Bluetoothシリアル通信(SPP)の実装

EPS32にコードを配置する準備ができましたので、ここからは実際にBluetoothシリアル通信(SPP)の実装を進めていきます。
Blutoothシリアル通信では、仮想的に対象となる端末とシリアル通信を可能とする技術でして、リンクを確立さえしてしまえば、有線でシリアル通信を行う際と同様の機能が実装できます。
ですので、有線で他のArduino端末やRaspi端末にセンサーデータを送るのによく用いられるシリアル通信を無線化することがこの技術では可能です。

#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  SerialBT.begin("ESP32Test");
}

void loop() {
    String sendData = "ESP32 Send Test";
    SerialBT.println(sendData);

    delay(1000);
  }
}

サンプルコードになります。
コード自体は非常にシンプルで、setup内でBluetooth(SPP)を開始し、開始したグローバル変数(SerialBT)で.printを実行するとSerial送信が可能となります。

これをESP32に配置すると、起動後からbluetoothのペアリングが可能となります。
ペアリングした対象がSPPに対応していれば、ESP32から送信されたデータを受信できるといった仕組みになっています。
今回はAndroidスマホを用いて、シリアル通信を受信してみます。

Androidスマホで受信したデータを閲覧

まず最初にコードを配置したESP32の電源を入れます。(今回はUSBを接続して電源を供給)
その後ご自身のスマートフォンのbluetoothペアリング画面まで移動し、受信したい(ESP32Test)とペアリングを行います。
(ペアリング候補に出てこない場合は、コードの配置が失敗している可能性があります。また、名前今回でいうところの(ESP32 Test)は.begin(“ESP32 Test”)で設定した値が名前になっております。)

ペアリングを行った後は、ESP32から送られてくるシリアル通信を受信できる環境ができている、Androidの標準機能ではシリアル通信の中身を見ることができませんので、テスト用のアプリを使って送信された中身を確認します。

アプリストア等で
「Bluetooth SPP」
などで検索をかけると対応のアプリが見つかります。
私は
「Serial Bluetooth Terminal」
を利用しました。

「Serial Bluetooth Terminal」を起動し、メニューから「Device」を選択します。
bluetoothペアリング済み一覧が表示されるので、先ほどペアリングした「ESP32 Test」を選択します。

ターミナル画面に移動しますので、右上の接続ボタンをタップするとコネクションを開始すると、受信したシリアル通信を確認することができます。

結果

全て上手くいくと画面上でESP32から送信した「ESP32 Send Test」を確認することができたかと思います。
これでESP32(Arduino)端末からセンサーデータを無線で取得する仕組みが完成しました。

今までの旅Arduinoの外部表示では、LCDディスプレイを利用していましたが、これらは基本的に有線接続です。I2Cを利用しても通信2本、電源2本の計4本は配線する必要がありました。
無線を行うことで、スマートフォンを利用する必要ができてしまいましたが、多くの方がスマートフォンホルダーをバイクハンドルにつけている関係上、LCDディスプレイを増設するより、ハンドル周辺がシンプルになったのではないでしょうか。

次回は、この機能をAndroidアプリに埋め込み「旅Arduino ver4」を作成します。

その1-不満点を挙げよう- 
その2-不満点をまとめよう-

その3-電圧測定器を作る-
その4-温湿度計を作る-
その5-気圧計を作る-
その6-方位・高度計をGPSで-
その7-12Vバッテリーから電力供給
その8-Ver1作成-
その9-電圧計の誤差とその代替案-
その10-Ver2へアップデート-
その11-LCDをI2Cで制御しよう-
その12-LCDをI2C化-
その13-Ver3へアップデート-
その14-USB充電の仕様に関して-
その15-Arduino言語を用いながらBluetoothで通信できるESP32-
その16-旅Arduino Ver4 スマホアプリ化-

関連記事一覧

  1. LCD

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP