web-dev-qa-db-ja.com

BlueZ Stackを周辺機器として使用(広告主)

  • 目標:BlueZとBluetooth 4LEドングルを使用して、「Hello World」に相当するBluetoothを宣伝する周辺機器を作成します。

  • 現在の場所:現在、BlueZスタックのセットアップとダウンロードが完了しているため、hciツールを使用してBluetoothドングルを認識および確認できます。私はhciconfig leadvをいじくり回しましたが、何が起こっているのか理解していません。

  • 必要だと思うこと:次のステップに進む必要があります。誰かが私を良いリソースに向けて指示したり、これやその他を私に教えてくれたりすることができれば、とても感謝しています。追加の脚(検索)作業を行う必要がある場合は可能ですが、GoogleとSOを考えて、この質問のさまざまな派生物を探しました。

* iOS開発者がいつかこれをいじくり回すことを期待して、これをCoreBluetoothとしてタグ付けしました。

編集:コメントに応じて、私の最終目標が何であるかを述べることは賢明なようです。最終的には、ドングルを介して最もシンプルなシンプルなメッセージ/信号をアドバタイズし、それをiOSデバイス(CoreBluetooth)で取得したいと思います。私は物事のiOS側をうまく機能させることができました(物事のLinux側と比較してドキュメントのトン)、私にとってその難しい部分は周辺機器としてこのアダプターのセットアップを得ることです。 BlueZスタックは私にとってひどいエニグマです。

編集:さらに掘り下げた後、私は最終的にこの投稿につまずいた: Raspberry Pi Bluetooth 4.0接続 。これにより、GATTサーバーのトピックに導かれました。このトピックの追求を続けます。

編集:わかりましたので、学習のための私の探求は続きます。過去数日間にわたって、hci *、sdptool、およびgatttoolツールの詳細を調べました。アドバタイズするようにアダプターを設定できるようになりました、「hciconfig hci0 leadv」。この時点で、アダプターを正常に「見る」ことができますが、実際にはアダプターから何も読み取れません。フレンドリ名さえ見ていません。私はトラックを続けますが、いつものように、どんな助け/提案も歓迎です。

編集:関連リンク、iOSに関連するBluetooth LEのしっかりした概要。 https://developer.Apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//Apple_ref/doc/uid/TP40013257-CH1-SW1

最後の編集:ちょっとすべて、このリンクはRaspberry Pi + BlueZを使用してiBeaconを作成する方法をカバーしています... http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with -the-raspberry-pi /

49
Ceryni

Bluetoothドングルが接続されている状態で、次のコマンドを実行すると、デバイス名と状態が表示されます。

$ hciconfig

出力は次のようになります。

hci0:    Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     DOWN
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

これは、デバイスがhci0と呼ばれ、ダウン状態にあることを示します。次のコマンドを発行して起動します。

$ Sudo hciconfig hci0 up

次のようになります。

$ hciconfig
hci0:   Type: BR/EDR  Bus: USB
     BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
     UP RUNNING
     RX bytes:1000 acl:0 sco:0 events:47 errors:0
     TX bytes:1072 acl:0 sco:0 commands:47 errors:0

次に、次のコマンド例を実行して、送信する広告データを構成します。

$ Sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

16進バイト(1eから始まる)を変更して、広告に異なるバイトシーケンスを送信できます。 「HELLO WORLD」のASCIIコードを文字通り送信するものは、次を使用します:48 45 4c 4c 4f 57 4f 52 4c 44EDIT:ただし、このメッセージの前に有効なヘッダーを付ける必要もあります。 here。 を参照してください)

次に、次のコマンドを使用してドングルの広告を有効にします。これにより、「Helo World」パケットの送信が開始されます。

$ Sudo hciconfig hci0 leadv 0

EDIT:上記のコマンドは、アドバタイズされたサービスを接続可能にします。接続を許可しない場合は、$ Sudo hciconfig hci0 leadv 3に変更します

次のコマンドを使用して、広告を無効にすることもできます。

$ Sudo hciconfig hci0 noleadv

41
davidgyoung

ここにさらに情報を追加します(参照BlueZ5.x):

  • bluezは、gattサーバー登録用のDBUS APIを公開していません。いくつかのプロファイル実装を利用できますが、--enable-experimentalオプションを使用して設定およびコンパイルするか、プラグインフォルダの下でgatt-exampleを有効にして、いくつかのgattサーバーを例として登録する必要があります

  • hciconfig hci0 leadvを実行してアドバタイズするときは、アドバタイズされたデータに注意してください。以下の例では、iBeaconについて

    Sudo hcitool -i hci0 cmd 0x08 0x0008 1e **02 01 1a** ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00

    太字の部分は、フラグフィールドに関連するAD構造用です(advertisginデータ形式については、Bluetooth仕様で確認してください)。このフラグ設定により、デバイスはLEとBR-EDRを同時に同時にアドバタイズします。

    この方法で広告するときの経験では、BLE周辺機器として動作するbluezデバイスをスキャンするAndroidデバイスは、BLE設定ではなくClassic bluetooth経由で接続をトリガーします(接続に注意してくださいLEとクラシックでは手順が異なります。この場合、Apple中央デバイスがどのように動作するかはわかりません。とにかく1Aではなく06を設定して、BR-EDRサポートがアドバタイズされないようにします。これにより、BLE経由の接続が表示されます。

中央のAndroidデバイスを使用してテストする場合、そのための無料の北欧アプリがあります。

6
user3891941