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

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

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

Q&A

解決済

2回答

3349閲覧

ESP32によるBLE通信で、BLE名称を表示させたい

suban

総合スコア28

0グッド

1クリップ

投稿2021/08/14 03:46

編集2021/10/22 01:09

ESP32ボードにより、BLEタグの検知するプログラムを
サイトからコピーさせていただき修正して使用しようと
しておりますが、添付ファイルのようにMACアドレスは
正常に表示されますが、BLE名称は何も表示されません
本来ならば、「FSCBP103」と表示して欲しいところなんですが
プログラムをどのように変更すれば宜しいでしょうか

ちなみに、ESP32のスッケチ例の中のBLE_scanを
実行させると正常に「FSCBP103」と表示しているのですが
その表示している画面を下記に追加しました。

イメージ説明
<使用したプログラム>
#include <BLEDevice.h>

//FSC-BP103
#define DEF_BLE_ADDR "dc:0d:30:::dd"
BLEScan* g_pBLEScan;

void setup() {
Serial1.begin(115200, SERIAL_8N1, 26, 27); //RX--26,TX--27
Serial.begin(115200); // ログ出力準備
pinMode(5, OUTPUT);//5番ピンを出力に設定

BLEDevice::init(""); // BLEデバイス初期化 g_pBLEScan = BLEDevice::getScan(); // Scanオブジェクト取得 g_pBLEScan->setActiveScan(false); // パッシブスキャンに設定

}

void loop() {
char buf[1024];
sprintf(buf, "");
BLEScanResults res = g_pBLEScan->start(1); // スキャン時間1秒
int nCnt = res.getCount();
if (nCnt > 30) { // 上限30件まで検出
nCnt = 30;
}
// 検出したBLE件数分ループ
for (int i = 0; i < nCnt; i++) {
BLEAdvertisedDevice bledev = res.getDevice(i);
BLEAddress ble_addr = bledev.getAddress(); // BLEのMACアドレス取得
std::string ble_name = bledev.getName(); // BLEの名称取得
// MACアドレスが一致している場合
if( DEF_BLE_ADDR == ble_addr.toString() ){
// ログ出力
digitalWrite(5, HIGH);//5番ピンの出力をHIGH(5V)に設定
delay(10);//10msec待機(1秒待機)
sprintf(buf, "name=[%s]; addr=[%s]", ble_name.c_str(), ble_addr.toString().c_str());
Serial.println(buf);
Serial1.print(ble_addr.toString().c_str());
break;
}
}

digitalWrite(5, LOW);//5番ピンの出力をLOW(0V)に設定 delay(40); // 0.1秒wait

}
<BLE_SCANのテスト結果>
イメージ説明


やりたい事は、型名「FSCBP103」でコンペアして
一致すれば、そのMACアドレスをシリアル送信しようとして
その為には、型名を読めるかのテストをしておりました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

アクティブスキャンにしてみてください
パッシブスキャンだとペリフェラルが出しているアドバタイズパケットをただ見るだけですが
アドバタイズパケットは小さいため、基本的には名前を含めません。

アクティブスキャンだとアドバタイズパケットの受信後に情報を追加要求するので、
大抵はそこでデバイス名を伝えます。

投稿2021/08/16 00:49

編集2021/10/22 01:48
ozwk

総合スコア13521

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

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

suban

2021/08/16 02:55 編集

ご回答を頂き、ありがとうございます。 私の質問内容に不備があり、申し訳けありません(修正しました) スッケチ例(BLE_scan)を起動すると、「FSCBP103」と表示しておりますので BLEタグから、デバイス名の送信がされているものと思われます。
ozwk

2021/10/22 01:38 編集

すみません完全に質問を読み違えてました 修正しました
suban

2021/11/05 04:34

ありがとうございました。 ご指摘の通り、アクティブスキャンに変更すると 正常に型名表示が出て参りました。 // g_pBLEScan->setActiveScan(false); // パッシブスキャンに設定 g_pBLEScan->setActiveScan(true); // アクティブスキャンに設定
guest

0

なんか虫がいそうな...
https://www.esp32.com/viewtopic.php?t=11407

こんなのも見かけた。
https://stackoverflow.com/questions/59922272/ble-scan-only-gets-the-name-of-some-devices-on-the-first-scan
最初の一回はnameが出るのなら

put the BLEDevice::init(deviceName); inside the loop and then run BLEDevice::deinit(); before sleep

を試してみる手もあるかも。

投稿2021/08/20 13:12

thkana

総合スコア7639

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

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

suban

2021/08/23 01:47 編集

ご回答頂き、誠に有難く思います。 https://www.esp32.com/viewtopic.php?t=11407 によりますと、スケッチ例のBLE_scanで、ビーコン名がでないようですが 私の場合、BLE_scanでは、ビーコン名が表示されています。 最初の一回はnameが出るのなら =>いえ、最初の一回目からnameが出ていません 私の質問に、BLE_scanでは表示していると記載はしていましたが その画像が抜けておりましたので、追加しました。
suban

2021/08/28 01:11

ご教示、ありがとうございます。 put the BLEDevice::init(deviceName); inside the loop and then run BLEDevice::deinit(); before > sleep この追加も試してみましたが。コンパイルエラーになってしまいました。
thkana

2021/09/06 13:46

8/31にESP32のArduinoライブラリが2.0.0に上がっていました。 新版でなにか振る舞いが変わったりしてませんかね。
suban

2021/09/07 03:18

ご回答を頂き、誠にありがとうございます ライブラリーをアップデートして、試みてみます。
suban

2021/09/07 05:48

Arduinoライブラリのアップデートを実行してみましたが 結果は、同じでした。 アドバイスを頂き、ありがとうございます。 考えられる問題点を、一つ一つこなすべきでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問