質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

解決済

ESP32同士のbluetooth接続で、SerialBT.disconnect()を使った切断ができない

Uka
Uka

総合スコア25

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

1回答

0評価

1クリップ

390閲覧

投稿2022/04/18 15:02

前提

ESP32同士(マスターとスレーブ)をbluetooth接続し、setup()のなかで信号をお互いに送受信するプログラムを書いています。
信号の送受信ができたらbluetooth接続を切断したいのですが、SerialBT.disconnect();を入れても切断できていないようです。(信号の送受信については問題ないことを確認できています。)
なにか考えられる原因があればご教示いただけますとありがたいです。よろしくお願いいたします。

発生している問題・エラーメッセージ

SerialBT.disconnect();が成功したらSerial.printするようにしていますが、何も表示されないため、切断ができていないものと思われます。

該当のソースコード

//マスター側 #include "BluetoothSerial.h" BluetoothSerial SerialBT; String MACadd = "1A:2B:3C:4D:5E:6F"; uint8_t address[6] = {0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F}; //uint8_t address[6] = {0x00, 0x1D, 0xA5, 0x02, 0xC3, 0x22}; String name = "OBDII"; char *pin = "1234"; //<- standard pin would be provided by default bool connected = 0; int connect_count = 3; void setup() { Serial.begin(115200); Wire.begin(); SerialBT.begin("ESP32test", true); Serial.println("The device started in master mode, make sure remote BT device is on!"); // connect(address)は高速(最大10秒)、connect(slave_name)は低速(最大30秒) // slave_nameでの接続はMACアドレスを調べなくても良いが接続は遅い while (connected == 0) { // connectedが0(未接続)なら接続実行を繰り返す if (connect_count != 0) { // 再接続実行回数カウントが0でなければ //connected = SerialBT.connect(slave_name); // 接続実行(接続名で接続する場合) connected = SerialBT.connect(address); // 接続実行(MACアドレスで接続する場合) connect_count--; // 再接続実行回数カウント -1 } else { Serial.println("ESP_Restart"); // 再接続実行回数カウントが0なら接続失敗 ESP.restart(); } } pinMode(LED_BUILTIN, OUTPUT); pinMode(36, OUTPUT); while (1) { if (SerialBT.available()) { //受信信号があれば処理する if (SerialBT.read() == 'L') { Serial.println("switch on"); digitalWrite(LED_BUILTIN, HIGH); //信号を受信したらLチカさせる delay(100); digitalWrite(LED_BUILTIN, LOW); delay(20); goto loopout; } } } loopout:; delay(50); while (1) { if (センサ値 > 2048) { SerialBT.write('S'); //Serial.write("\n"); Serial.println("SS"); delay(20); SerialBT.disconnect(); // 接続を一時的に遮断する。 if (SerialBT.disconnect()) { Serial.println("Disconnected Succesfully!"); } delay(20); goto loopout2; } } loopout2:; } void loop(){ …省略… }
//スレーブ側 #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 Wire.begin(); Serial.println("The device started, now you can pair it with bluetooth!"); delay(3000); digitalWrite(33, HIGH); for (int i = 0; i < 10000; i++) { digitalWrite(25, HIGH); digitalWrite(25, LOW); delay(20); if (digitalRead(LS) == HIGH) { //スイッチをオンしたらマスターESPに信号を送信 Serial.println("Switch on"); SerialBT.write('L'); //Serial.write("\n"); delay(20); goto loopout; } } loopout:; delay(50); digitalWrite(33, LOW); for (int i = 0; i < 10000; i++) { digitalWrite(25, HIGH); digitalWrite(25, LOW); delay(20); if (SerialBT.available()) { //受信信号があれば処理する if (SerialBT.read() == 'S') { Serial.println("SS"); digitalWrite(LED_BUILTIN, HIGH); //信号を受信したらLチカさせる delay(100); digitalWrite(LED_BUILTIN, LOW); delay(20); goto loopout2; } } } loopout2:; delay(3000); } void loop(){ …省略… }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。