web-dev-qa-db-ja.com

CでのBluetoothLowEnergy-Bluezを使用してGATTサーバーを作成する

LinuxボックスでGATTを使用して、さまざまな特性を備えたカスタムサービスをセットアップしようとしています。

この質問 とそれがリンクしているものを使用して、(gatt_service_add()関数を使用して)作成する必要のあるコードを特定することができました。

Gatt_service.cという別のファイルを作成し、必要だと思うコードを記述しました。ただし、ソリューションをコンパイルして実行するために、コードをBluezライブラリにリンクする方法を理解できません。たとえば、 このサイト (BLE開発用ではありません)は、gccパラメーターとして-lbluetoothを使用してlibbluetoothに対してリンクし、コードを機能させるために何に対してリンクするかを理解できません。

何を投稿すればよいかわからないため、サンプルを投稿していません。必要なものがある場合、または何かについて言及しなかった場合は、お知らせください。

前もって感謝します。

編集-詳細情報:

コメントに続いて、私はプラグイン/時間をベースとして使用して、自分の「Broadcasterサービス」用の自分のファイルを作成しました。完全なコードが見つかりました: ここ (答えにコードのどのビットを入れるべきかわかりません!)。

私のコンパイルコマンドは次のとおりです:gcc gatt_broadcaster_service.c -Wall -o gatt_broadcaster_service -lbluetooth 'pkg-config --cflags --libs glib-2.0' -I/home/alexander/Documents/bluez-5.29/lib(報告された問題を修正するためのglibビットを含む ここ )。

私が得るエラーは次のとおりです:gatt_broadcaster_service.c:11:27:致命的なエラー:lib/bluetooth.h:そのようなファイルまたはディレクトリはありません#include "lib/bluetooth.h"

私のCファイルはドキュメントに保存されていますが、正しい場所を探していないため、lib/bluetooth.hが見つからないことが調査でわかっています( this および this ファイルが一般的な場所にない場合にコンパイラにインクルードフラグを使用することについて話しますが、それを機能させることはできません。

再度、感謝します!

6
Alex

BlueZ 5.31用に実行されているGATTサーバーの例を入手しました(この投稿の時点で最新):

私の環境:
Vagrant
Virtual Box
ゲストOSとしてのUbuntuTrusty Tahr(v。14.0432ビットOS)
Linuxカーネル3.19に更新
インストールされたパッケージ:
* libglib2.0-dev
* libdbus-1-dev
* libudev-dev
* libical-dev
* libreadline-dev

ここからBlueZ5.31をダウンロード: https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
更新されたカーネルのインストール(v。3.19):
Sudo apt-get update
Sudo apt-get install --install-recommends linux-generic-lts-vivid

再起動が必要です。 Vagrantを使用していますが、共有フォルダーへのアクセスが失われました。これが発生した場合は、vagrantがエラーを報告するのを待ち、とにかくVM(vagrant ssh)に入ります。VMで、次のコマンドを発行して共有フォルダーの問題を修正します。
Sudo /etc/init.d/vboxadd setup

共有フォルダが再びアクティブになっていることを確認するために、再度再起動します(おそらく必要ありません)。
VMに戻ったら、BlueZ5.31のインストールを続行します。
cd〜
Sudo apt-get install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev
wget https://www.kernel.org/pub/linux/bluetooth/bluez-5.31.tar.xz
tar xvf bluez-5.31.tar.xz
cd bluez-5.31
./ configure --prefix =/usr --mandir =/usr/share/man --sysconfdir =/etc --localstatedir =/var --disable-systemd --enable-experimental --enable-メンテナモード
make
Sudo make install
Sudo cp attrib/gatttool/usr/bin

インストールの完了。次のように確認してください。
hciconfig
次の応答(または同様のもの)を取得する必要があります:
hci0:タイプ:BR/EDRバス:USB
BDアドレス:00:1A:7D:DA:71:0C ACL MTU:310:10 SCO MTU:64:8
ダウン
RXバイト:15528acl:126 sco:0イベント:683エラー:0
TXバイト:6459acl:146 sco:0コマンド:234エラー:0

Bluetoothアダプターを構成し、広告を開始し、冗長をオンにしてサンプルGATTサーバー(心拍数サービス)を開始します(私のアダプターはhci0です)。
cdBlueZ 5.31ディレクトリ
Sudo tools/btmgmt -ihci0電源オフ
Sudo tools/btmgmt -i hci0 le on
Sudo tools/btmgmt -ihci0接続可能
Sudo tools/btmgmt -i hci0 name "友好的な名前"
Sudo tools/btmgmt -ihci0広告
Sudo tools/btmgmt -ihci0電源オン
tools/btgatt-server -i hci0 -s low -t public -r -v

別のデバイス(iPod、Android-Samsung Galaxy 5SとNexusタブレット-およびBlueZを実行している別のPC)を使用しました)に移動し、サービスに接続します。 BlueZを実行している別のPCでそれ:
gatttool -bGATTサーバーのMACアドレス-I
接続
プライマリ
特性

他のコマンドを発行して、GATTサーバーの読み取りと書き込みを行うことができます。

また、次のファイルをコピーして編集することにより、カスタムGATTサーバー(元のリクエスト)を作成しました:tools/btgatt-server.c。 Makefile.toolsファイルを編集して、カスタムサーバーをビルドに含めることができます。実行するには、automake、make、およびSudo makeinstallを実行する必要があります。

12
Johnas Cukier

C用のスタンドアロンGATTサーバーを探しているときに、この質問に何度か行き着きました。ここでの答えは、BlueZスタックを使用してGATTサーバーを構築する必要があります。 BlueZは、スタンドアロンGATTサーバーを許可するためにD-Busサポートを追加し、Python用のスタンドアロンサンプルGATTサーバーも含まれていますが、C用ではありません。

まだサーバーが必要なので、サンプルをリリースするつもりでサーバーの作業を開始しましたが、最小限の実装でも、sampleを呼び出すよりもコードが多くなります。

最初の実装は現在行われており、LGPLの下でリリースされています(編集:ライセンスはGPL-3からLGPLに変更されました):

https://github.com/nettlep/gobbledegook

それが誰かを助けるなら、かっこいい。それが私を助けてくれたコードをリリースした誰かを助けるなら、さらに良いでしょう。

2
pauln

1)Bluezフォルダに移動します

2)Sudo ./configure --prefix =/usr --mandir =/usr/share/man --sysconfdir =/etc --localstatedir =/var --disable-systemd --enable-experimental --enable-maintainer-モード

3)Sudoがすべてを作る

4)接続可能なパケットをアドバタイズします

ブルートゥースをアクティブにする

Sudo hciconfig hci0 up

広告データの設定:「helloworld」

Sudo hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44

接続可能なものとして広告を開始する

Sudo hciconfig hci0 Leadv 0

5)SudoサービスBluetoothストップ

6)Sudo src/bluetoothd -d -n

7)他のPCから、(MAC ID gatt server macの変更)と入力します。

gatttool -b gatt_server_mac --interactive

ステップ6コンパイルしたい場合のためにplugins/gatt-example.c

server.cをprofile/timeまたはprofle/alert(時間の代わりにalertに置き換える)またはプロファイルフォルダー内の他のファイルからコンパイルする場合は、手順6を置き換えます。

Sudo src/bluetoothd --plugin = time -n

2
Jagdish

タイムサーバーの作成は、最初から始めるのが良いでしょう。profile/time良いカスタム例があり、コードをクリーンアップし、最小限のコードを維持して、クライアントとしてgatttoolを使用して実行してください。両方のカスタムが必要な場合あなたが見ることができるよりもクライアントとカスタムサーバーtools/btgatt-client.ctools/btgatt-server.c

tools/btgatt-server.cを1つのPCで実行し、Sudo ./btgatt-server1つのPCで実行

およびSudo ./btgatt-client -d server_mac別のPC

1
Jagdish