web-dev-qa-db-ja.com

Bluezを使用したC / C ++ BLE読み取り/書き込みの例

マイクロコントローラーとRaspberryPi(tardis BLEドングル)を使用して、単純なBLEネットワークを構築し始めています。出発点として、コマンドラインで実行できるのと同様に、BLEデバイスを読み書きするための簡単なCまたはC++の例を探しています。私がこれまでに見つけた例は非常に複雑です。 BLEの初心者として、より複雑な設計に進む前に、いくつかの非常に単純な例を作成する必要があります。以下のgatttoolの例のように、BLEデバイス名をハードコーディングしても問題ありません。

これが、Bluezのコマンドラインオプションを現在どのように使用しているかを示しています。

コマンドラインから使用できます:

$ Sudo hcitool lescan
LE Scan ...
BB:A0:50:02:18:07 MyDevice

次に、コマンドラインでgatttoolを使用してデバイスに接続できます。

$ Sudo gatttol -b BB:A0:50:02:18:07 -I
[BB:A0:50:02:18:07][LE]> connect
Attempting to connect to BB:A0:50:02:18:07
Connection successful

最後に、適切なハンドルを使用して読み取りと書き込みを行うことができます

[BB:A0:50:02:18:07][LE]> char-write-req 000f 0100
Characteristic value was written successfully
[BB:A0:50:02:18:07][LE]> char-write-cmd 0011 4C467A

私が最初の調査と開始に使用したいくつかのサイト:
http://people.csail.mit.edu/albert/bluez-intro/c404.html
https://github.com/carsonmcdonald/bluez-experiments/blob/master/experiments/scantest.c

9
Cole Wilson

何か簡単なこと?紐はどれくらい短いですか?個人的には、gatttoolコード自体は、自分の目的のために追跡して抽出するのに十分単純だと思います(最近実行しました)。しかし、それが本当にあなたに適していない場合は、別のオプションは libgatt です。これは基本的にgatttoolが使用するコードと同じですが、より便利にパブリックライブラリAPIにバンドルされています。接続/読み取り/書き込みなどがある gatt.h を見てください。うまくいけば、それを使用する方法が自明であるはずです。

4
kaylum

Bluez(Linuxの公式Bluetoothスタック)は、APIのために [〜#〜] dbus [〜#〜] に移動しました。以前は、LinuxでBLEサポートにアクセスするためにbluezコードを「フォーク」することが「受け入れられ」ていましたが、現在のアプローチはDBUSを使用することです。 Bluez DBUS APIはここに文書化されています: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc

Bluetooth C/C++アプリケーションについてDBUSに直接話すか、GATTライブラリをヘルパーとして使用します。 2つ目は、初心者にとっておそらく最良のアプローチです(また、他のOSやBluez pre-DBUS APIをサポートしたり、ソースを読みやすくしたりするために、プログラムをBluezに依存しないようにしたい初心者にとっても最適です)。

最新のD-BUSAPIをサポートするこれらのGATTライブラリの1つは gattlib です(注:私はこのライブラリの作成者です)。 BLEデバイスの読み取り/書き込み用のこのライブラリに基づく簡単な例を次に示します。 https://github.com/labapart/gattlib/blob/master/examples/read_write/read_write.c

1
OlivierM