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 3 years have passed since last update.

【ESP32・M5Stack】ペアリング済みBluetoothデバイスの取得とペアリング解除

Posted at

この記事の目的

ESP32やM5Stack系のデバイスで、一度ペアリングしたBluetoothデバイスの一覧を取得する。またそのデバイスのペアリングを解除する。

ペアリングしたデバイスの一覧取得

事前にBluetoothの初期化が必要です。例えばBluetoothSerialを使用する場合はBluetoothSerial内のBegin()を呼び出した段階で初期化が完了しています。

bt_list.ino
#include "esp_gap_bt_api.h"
#include "esp_bt_main.h"

  int paired_count = esp_bt_gap_get_bond_device_num(); //ペアリングしたデバイス数を取得
  esp_bd_addr_t dev_list[100];
  esp_err_t result =  esp_bt_gap_get_bond_device_list(&paired_count, dev_list); //ペアリングしたデバイスのアドレス一覧を取得
  Serial.printf("BT paired count=%d\n", paired_count);
  if (result == ESP_OK)
  {
    for (int i = 0 ; i < paired_count; i++) {
      Serial.printf("[Device%d]%d\n", i, dev_list[i]); //アドレスを表示
    }
  } else {
    Serial.println("esp_bt_gap_get_bond_device_list failed");
    return;
  }

コードの中ではdev_listの配列要素数を100としていますが、実際にはそのデバイスで同時にペアリングできる最大数を指定してください。

ペアリングの解除

先に示したコードのアドレス(dev_list[i])を指定して、以下のような関数を呼び出すことでペアリングを解除できます。

bt_list.ino
 esp_bt_gap_remove_bond_device(dev_list[i]);

ペアリングしたデバイスの一覧取得を行う全体コード

Serialにペアリングしたアドレス一覧を1秒ごとに出力するコードです。
bluetoothserial.cppを参考に、Bluetoothの初期化を行うコードも含ませています。
M5StickC Plusで動作することを確認しています。

bt_list.ino
#include "esp_gap_bt_api.h"
#include "esp_bt_main.h"
#include <esp_log.h>
void setup() {
  Serial.begin(115200);
  init_BT(); //Bluetooth初期化
}

void init_BT() {
  if (!btStarted() && !btStart()) {
    log_e("initialize controller failed");
    return;
  }

  esp_bluedroid_status_t bt_state = esp_bluedroid_get_status();
  if (bt_state == ESP_BLUEDROID_STATUS_UNINITIALIZED) {
    if (esp_bluedroid_init()) {
      log_e("initialize bluedroid failed");
      return;
    }
  }

  if (bt_state != ESP_BLUEDROID_STATUS_ENABLED) {
    if (esp_bluedroid_enable()) {
      log_e("enable bluedroid failed");
      return;
    }
  }
}
void loop() {
  int paired_count = esp_bt_gap_get_bond_device_num(); //ペアリングしたデバイス数を取得
  esp_bd_addr_t dev_list[100];
  esp_err_t result =  esp_bt_gap_get_bond_device_list(&paired_count, dev_list); //ペアリングしたデバイスのアドレス一覧を取得
  Serial.printf("BT paired count=%d\n", paired_count);
  if (result == ESP_OK)
  {
    for (int i = 0 ; i < paired_count; i++) {
      Serial.printf("[Device%d]%d\n", i, dev_list[i]); //アドレスを表示
      //esp_bt_gap_remove_bond_device(dev_list[i]); //削除
    }
  } else {
    Serial.println("esp_bt_gap_get_bond_device_list failed");
    return;
  }
  delay(1000);
}

参考文献

以下のページを参考にして本記事を執筆しています。

CLASSIC BLUETOOTH GAP API - ESP32 - — ESP-IDF Programming Guide latest documentation
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/bluetooth/esp_gap_bt.html

BluetoothSerial.cpp
https://github.com/espressif/arduino-esp32/blob/master/libraries/BluetoothSerial/src/BluetoothSerial.cpp

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?