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

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

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

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

Arduino

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

Q&A

解決済

1回答

4678閲覧

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

Uka

総合スコア28

Bluetooth

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

Arduino

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

0グッド

1クリップ

投稿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(){ …省略… }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

arduino

1 SerialBT.disconnect(); // 接続を一時的に遮断する。 2 if (SerialBT.disconnect()) {

すでに切断しているからでは?

投稿2022/04/19 00:47

ozwk

総合スコア13528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Uka

2022/04/19 03:46

回答いただきありがとうございます。SerialBT.disconnect(); をコメントアウトして試してみたところ、if文の中に入って"Disconnected Succesfully!"が表示されました。if (SerialBT.disconnect())だけで、切断を行うことになるんですね。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問