web-dev-qa-db-ja.com

Gattサーバーを作成しますか?

私はここでより広い範囲の質問をしているので、誰かがこれを説明できるドキュメントまたは記事を私に指摘することができれば、それで十分です。言うまでもなく、1日分のグーグルでどこにも行かなくなったので、救いの手を使うことができました。

BlueZ 5.9で BeagleBoard に接続していますが、私の意図は次のとおりです。

  1. Gattサーバーを作成します。
  2. いくつかの書き込み可能な属性をロードします。
  3. Androidデバイスに接続するようにそのサーバーをアドバタイズします。

私はAndroidアプリを接続して中央として動作するように作成しました。レンダリング3は基本的に完全です。コマンド、つまり文字どおりに入力することで、Gattサーバーを起動する方法がわかりません。/BeagleBoardで属性を作成します。ハードウェアの書き込みが大きいことがわかっているので、用語が完全に間違っている可能性があります-とにかく、1と2を完了するのに役立ちます。正しい方向ですありがとう

21
Alxjrvs

あなたの用語は主に正しいです。

通常、GATTデータベースには x1800(Generic Access) および x1801(Generic Attribute) のサービスがあります。 Generic Access Serviceには、2つの必須の特性( デバイス名 および Appearance )が含まれています。 Generic Attributeサービスは空である必要があります。

したがって、最小のGATTデータベースは次のようになります。

Handle  Description
 0000   Service: Generic Access (1800)
 0001   Characteristic: Device Name (2A00, readable)
 0002   Characteristic Value (string)
 0003   Characteristic: Appearance (2A01, readable)
 0004   Characteristic Value (16bit enum)
 0005   Service: Generic Attribute (1801) 

これら2つのサービスの後に、独自のサービスを追加できます。あなたの場合、有名なサービスを対象としないようなので、独自のサービスを作成します。

まず、たとえばMacのコマンドラインでuuidgenツールを使用して、128ビットUUIDを作成します

$ uuidgen
DCDF2725-56C8-4235-A4BC-F7951D5C3762

これがサービスのUUIDになります

 0006   Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

次に、いくつかの書き込み可能な特性が必要だと述べました。それでは、そのUUIDの別のUUIDを作成しましょう。

$ uuidgen
4C06C6F4-C90D-4C58-8E31-20C8C74FF832

そして、サービスに特性を追加します

 0007   Characteristic: Custom Characteristic (4C06C...FF832, writeable)
 0008   Characteristic Value (hex, 20 bytes)

特性値は20バイトを超えてはならず、「書き込み要求」を選択して、書き込みの確認が中央に送信されるようにする必要があります。 「書き込みコマンド」を選択した場合、書き込みは携帯電話のスタックまたは周辺機器によって破棄される可能性があります。

この特性を定義したら、コーディングを開始する準備が整います。

BeagleBoard SDKは知りませんが、通常は、GATTライブラリと追加のモジュールを初期化することから始めます(たとえば、書き込みをサポートするには、ライブラリの2番目の部分を初期化する必要があります)。

この初期化の後、GATTデータベースを登録します。バイナリデータを生成するための素晴らしいツールがない場合は、自分で作成する必要があります。 Bluetooth Core Spec V4. で説明されています。変換を行うAPIを見つけられることを願っています:-)

登録が成功したら、アドバタイズパラメータを設定する必要があり、アドバタイズを開始できます(これについては、SDKのドキュメントとサンプルを参照してください)。

今何が起こっているかというと、ある時点で、接続が確立されたことを示すコールバックを取得し、その後、特定のハンドルの属性リクエストを取得します。次に、ハンドル、提供された値、および操作のタイプ(読み取り/書き込み)を確認して、要求を処理する必要があります。要求に応じて常に成功値またはエラーコードを返すことを忘れないでください。そうしないと、Bluetooth通信がロックされてしまいます。

通常、これらのBluetoothチップは常に非同期操作で動作します。リクエストを送信し、リクエストが完了するまで待ってから次のリクエストを送信します。プログラミングするときに、時間を節約できることを忘れないでください:-)。

Androidの方が使い慣れているため、最初に試してみたい場合は、Android 4.2でGalaxy S 4を試すことができます。また、LE周辺機器もあります。モード-ただし、その信頼性はテストしていません。LEペリフェラルとして機能する現時点で最も信頼性の高いスマートフォンスタックは現在iOS 7にあります。したがって、iPod touchを試してみるのが手頃な価格であれば、ピックアップする価値があります。

15
Etan

チェックアウト bleno 、これは最近node.js用に作成したBLE周辺機器スタックライブラリです。現在、Linux(BlueZ 4.101でテスト済み)とOS X 10.9をサポートしています。

使用例 here および here の例があります。

5
sandeepmistry

Gattサービスをカスタマイズする鍵は、bluezのbluetoothdデーモンプログラムです。

my blogger でgattサービスをカスタマイズする方法を説明しました。確認してください。

2
Gaiger Chen