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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

4回答

3312閲覧

Bluetooth Scan, 一部のデバイス名しか取得できない

K.Kawamoto

総合スコア5

Bluetooth

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

1クリップ

投稿2020/04/13 02:34

Xcode/Swiftの初心者です。Bluetoothも素人です。
「iOS x BLE Core Bluetoothプログラミング」(ソシム社)のサンプルの内Scanの部分を動かそうとしています。

開発環境:
Xcode 11.3/Swift 5.1
iPhone 6s Plus ← 実行デバイス
ASUS Zenfone ← テスト対象
(上記 iPhone を実行デバイスとして Runをかけています。)

問題点:
近くにある Bluetoothデバイスのうち、一部のデバイス名が取得できません。具体的には、添付−2のLogは、3、4分スキャンをかけたものですが、“USER の MacBook Pro“ (これは、Xcode開発用の Macです。)だけ(とnull, SMU********001016)で、例えば添付−3は、開発用の Mac で出したリストですが、ここに出ている ASUS_Z01BAD(これを取得したい!)は、拾ってきません。(この中のもう1つの kkのiPhoneは、実行中のデバイスです。)
ちなみに、添付−4は、参考までにiPhoneに出した、LightBlueのリストです。こちらにも、ASUS_Z01BADは、出ません、これも疑問なのですが?これは、付け足しの疑問です。

よろしくお願いします。

【添付−1】Swift コード(Scan関係部分)
上記の本で公開されている、コードは、Xcode 8あたりのものなので、Xcode 11用に最小限の変更を加えて実行しています。

// MARK: CBCentralManagerDelegate
// セントラル マネジャーの状態が変化すると呼ばれる
func centralManagerDidUpdateState(_ central: CBCentralManager) {
print("state: (central.state)")
}

// 周辺にあるデバイスを発見すると呼ばれる
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("発見したBLEデバイス: (peripheral)")
}

【添付−2】実行結果の例
state: CBManagerState
発見したBLEデバイス: <CBPeripheral: 0x2819d08c0, identifier = 02196E3A-16C5-8885-8B70-B7F1F86605B4, name = USER の MacBook Pro, state = disconnected>
発見したBLEデバイス: <CBPeripheral: 0x2819d4460, identifier = 5A3EDC62-E07E-743B-B895-AC59F0DCC46D, name = (null), state = disconnected>
発見したBLEデバイス: <CBPeripheral: 0x2819d4460, identifier = 8000EEF2-2C29-B044-F11C-B2ABA58ECE72, name = SMU********001016, state = disconnected>
発見したBLEデバイス: <CBPeripheral: 0x2819d0aa0, identifier = 02196E3A-16C5-8885-8B70-B7F1F86605B4, name = USER の MacBook Pro, state = disconnected>
発見したBLEデバイス: <CBPeripheral: 0x2819d0aa0, identifier = 02196E3A-16C5-8885-8B70-B7F1F86605B4, name = USER の MacBook Pro, state = disconnected>

【添付−3】Macの表示
イメージ説明

【添付−4】LightBlueの表示
イメージ説明

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

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

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

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

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

TsukubaDepot

2020/04/13 03:19 編集

Bluetoothは詳しく触ったわけではありませんが、もしかしてadvertisementData: [String : Any]に一部デバイスのデバイス名が入っていたりしませんでしょうか。 http://docs.fabo.io/swift/corebluetooth/001_corebluetooth.html を参考に動かしてみたら、たとえばmacにつけている名前などはアドバタイズ名で出てくるようです。
K.Kawamoto

2020/04/13 05:58

早速お返事ありがとうございました。 ご指摘の点、見てみます。 ただ、今みてる peripheral で、Mac等は、見えているので、何故ASUS等が見えないのか??? それに、参照URL、興味のあるタイトルが沢山あり、じっくり見てみます。 ただ、よちよち歩きのため、時間はかかると思います。 取り敢えず、御礼まで。
K.Kawamoto

2020/04/14 04:27

advertisementData: [String : Any]を見てみましたが、デバイス名らしきものは、見えませんでした。 MacBook Pro は、見えますが、ASUS_Z01BDA はやはり見えません。 advertisementDataを出したコード: print("advertisementData: \(advertisementData)") 出てきたLogの一部: セントラル マネジャーが初期化された セントラル マネジャーの状態が変化し呼ばれ state: CBManagerState ScanStartが押された Pass 2-1 発見したBLEデバイス: nil advertisementData: ["kCBAdvDataTxPowerLevel": 12, "kCBAdvDataIsConnectable": 1, "kCBAdvDataTimestamp": 608529352.8171819] 2020年4月14日 12:55:52 発見したBLEデバイス: nil advertisementData: ["kCBAdvDataTimestamp": 608529353.208439, "kCBAdvDataTxPowerLevel": 12, "kCBAdvDataIsConnectable": 1] 2020年4月14日 12:55:53 発見したBLEデバイス: Optional("USER の MacBook Pro") advertisementData: ["kCBAdvDataTimestamp": 608529353.613606, "kCBAdvDataIsConnectable": 1] 2020年4月14日 12:55:53 よろしくおねがいします。
Wind

2020/04/16 01:22

MacやXCodeはわかりませんが、添付3はBluetooth Classic、添付4はBluetooth LEの機器を表示しているのでは無いのでしょうか? 参考書籍がBLEなので、最終的にはBLE通信を行うのが目的なのでしょうか?
K.Kawamoto

2020/04/16 01:43

Windさん、 お返事、ありがとうございました。 核心の1つ(私のレベルですが)を突かれた気がします。 ClassicとLE、明確に認識していませんでした。 最終的には、BLEなのですが、実は何だか違った(Classicの)ライブラリを 使っているのでは?とか感じていましたが・・・ ご指摘の点を意識して、調べてみます。 ありがとうございました。
guest

回答4

0

基本モデルから、考え直します。

投稿2020/05/19 23:47

K.Kawamoto

総合スコア5

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

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

0

ベストアンサー

LE privacyというルールがあって、高価なデバイスは常にアドバタイズしないようになっています。定期的に、MACアドレスを変える仕様になっています。
イヤーフォンなどは、接続中はアドバタイズしないのが基本です。切断した後の数分はアドバタイズしますね。ですが、何分後に切れるとかは不明です。イヤーフォンはBluetooth Classicを使っている事が多いので、高価なSnifferがないとアドバタイズの内容は見えません。
nRF52か、TIのCC26XXのボードを買って、LEのSnifferを使ってトラフィックを見ましょう。何秒間隔でアドバタイズしているか分かります。5千円程度で用意できます。
最近のiPhoneは、Bluetooth LEと、Bluetooth Classicの両方スキャンした結果を出している事もあります。私も、Bluetooth ClassicのSnifferは高価で使えていません。

投稿2020/05/19 19:02

Himadeus

総合スコア81

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

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

K.Kawamoto

2020/05/19 23:45

Himadesuさん、 お返事、ありがとうございました。 Implement に当たっては、色々決まりがありそうな気がしていましたが、はっきりしました。 アプリのモデル、もう一度最初から考えてみます。 と言うことで、この質問一度 Close にしたいと思います。 もう一度、本当にありがとうございました。
guest

0

ラップトップPCやタブレットは、常にBluetooth Low Energy(BLE)のアドバタイズは出していません。以前は常に出しているデバイスもありましたが、カージャックの被害に合いやすくなり、短時間しかアドバタイズを出さなくなりました。ブートした後や、BLEの設定を変えた数分間は、アドバタイズを出すようです。

投稿2020/05/16 17:51

Himadeus

総合スコア81

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

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

K.Kawamoto

2020/05/17 00:35

お答え、ありがとうございます、 実は、その辺の基本に戻って考えてみる必要があると考え始めています。ただ、どうもBluetooth(BLE), まだ一部の専門の人たちの分野なのか、素人用にまとまった記述があまり見つからなくて・・・ ただ、Advatiseが出ているのか、添付−3の「kkののiPhone」は私のスマホですし、「ASUS_Z01BDA」は、別のスマホですし、また「添付−4」の「USERのMacBook Pro」は, これを書いているMacです。 別の例ですが、上記「kkののiPhone」で使っているオーディオ テクニカのイヤーフォンですが、 普通はAdvertiseを消して居るのか、例えば「添付−3」Macでは表示されません。ただし「kkのiPhone」で、接続を解消すると、Macに表示されます。当然iPhoneでつなげば、また消えます。 その他、無線マウスを何個は使って居ますが、例えば、Macでは、見えません(例えば添付−4のLightBlueでは見えているのかも?)ので、親のレシバーに固定されていて、Advztiseは出さない様になっている様です。??? 等々、手探りしています。
guest

0

BLEの通信ですと、Zenfoneをアドバタイズさせる必要があります。
(添付4で見つからなかったのはこれが原因)
最初からAndroidのBLEアプリも作ろうとしても大変ですので、
AndroidのPlayストアでBLEアプリを探して入れてみてください。

参考になりそうな記事を見つけましたので貼っておきます。
AndroidとiOS間のデータのやりとりをBluetooth LEで行う

投稿2020/04/28 03:34

Wind

総合スコア442

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

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

K.Kawamoto

2020/04/28 07:23

Wind様 先のご指摘の、ClassicとBLEについても、きちんとした返事が出来ていないのに、まだ気にかけていてくださいり、感謝です。 1. 実は、あの後観点を変えて、「ひょっとして、Logに出てるのに、読み取れてないのでは?」と言う点から、少し追っかけていました。成果は今の所ありません・・・ 2. ただ、図4の「SMU***001016」がもしやZenfoneではと考えたりしてますが??? 所で、 SMUと言うのは、何でしょうか?(恥ずかしい) 3. 今回、「Zenfone」側から アドバタイズをかけたらとのことですが、図3にはZenfone(ASUS_Z01BDA)が出てますので、Zenfioneからアドバタイズは出てるのでは無いでしょうか? とにかく、この点も悩んでみます。 4.もう1つ、確認ですが、やりたいのはデバイスを見つける所までで、その先データの交換とかは、考えていません。 またもや、役に立ちそうな記事 「AndroidとiOS・・・」、ありがとうございます。じっくり見てみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問