Bluetooth Serial Controllerを作ったよ!という話と使い方例

以前から、Bletooth端末と接続してコントローラー(ログを見る機能も欲しい)として使えるアプリが欲しいなーと考えていたので、作ってみました。

初めてのアプリ開発なので、不具合などあったら連絡してくれるとありがたいです。

f:id:kousakutanosii:20220118224255p:plain
こんな感じのアプリです


↓作ったアプリ
play.google.com


使い方

1, ESP32側サンプルプログラム

 以下のサンプルプログラムをコピペして書き込んでください。

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
 
void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name 
}

void loop() {
  //Bluettthでデータを送る処理
  int sendNum = Serial.available();       //送る文字列数を取得
  if (sendNum) {                          //送る文字があれば入る
    for(int i=0 ; i <= sendNum-1 ; i++){  //文字数分ループ
      SerialBT.write(Serial.read());      //一文字ずつ送信
    }
  }

  //Bluetoothで取得したデータをシリアルコマンドに表示する処理
  int receiveNum=SerialBT.available();      //Bluettth受信バッファにあるデータ数を取得
  if (receiveNum) {                         //受け取るデータがあれば入る
    Serial.print(millis());                 //プログラムが実行されてからの経過時間を表示
    Serial.print("ms  ");
    for(int j=0 ; j <= receiveNum-1 ; j++){ //データ数分ループ
      Serial.print(j);
      Serial.print("Byte=");
      Serial.print(SerialBT.read());        //1Byteごとにデータを取得
      Serial.print(" ");
    }
    Serial.print("\n"); 
  }

  //SerialBT.print("\nああ");    //ESP32からアプリへ文字を送る

  delay(10);//Serial.printfが画面表示終わるの待つため
}


2, ESP32とペアリングする

 今回は上のコードで SerialBT.begin("ESP32test") としているためESP32testというデバイス名で表示されます。このESP32testとペアリングします。

 スマホBluetooth設定を開いて「新しいデバイスとペア設定」でESP32testを選択しペアに設定しておきます。


3, 接続する

 Arduino studioのシリアルモニタを開いておいてください。

 Bluetooth Serial Controllerアプリを開いて、右上のBluetoothアイコンを押すとペアリング済みデバイス一覧が出るのでESP32testを選択してください。接続できるとArduino studioのシリアルモニタにコントローラ情報が表示されます。アプリのジョイスティックを動かすと値が変化するはずです。

f:id:kousakutanosii:20220118221844p:plain
シリアルモニタ

これでBluetooth Serial Controllerアプリから送信されたコントローラー情報をESP32側で確認できました。

シリアルモニタのテキストボックスに文字を入力して、送信ボタンを押すとESP32からテキストボックスの文字が送信され、アプリが受信しコントローラー上のテキスト画面に表示されます。SerialBT.print()を使い定期的にアプリに文字を送信するとアプリをログ表示デバイスとしても使えます。

アプリのこととか細かいところは今度書きます。

わからないことあったら質問してくれるとありがたいです。