2016-02-14 485 views
4

我有一個有幾個定製GATT服務的設備,我想編寫一個Linux程序來與它交互。經過一番搜索後,我發現Linux正在使用BlueZ來處理藍牙LE協議。我在BlueZ 5.35上使用了Ubuntu 15.10,但我無法弄清楚如何在用戶空間程序中使用這個BlueZ。我無法在任何地方找到API文檔,沒有教程,示例,也沒有。除了只使用默認服務連接到藍牙設備之外,是否有可能使用此BlueZ堆棧來做其他任何事情?如果是這樣,文檔在哪裏? (最好是C/C++ API,但在這一點上什麼都行)在Linux上的藍牙低功耗API

+0

是的,這是可能的。但是有一條學習曲線。 bluez APIS記錄在[bluez樹](https://github.com/r10r/bluez/blob/master/doc/)中。這些都是DBUS API。所以要使用它們,你首先需要了解一下DBUS。使用DBUS有不同的綁定。它們包括python,Glib和QT。還有其他人。 – kaylum

回答

3

在Linux上編寫shell腳本來做你需要做的事情可以說更簡單,更快捷。 BlueZ命令相對簡單直接,並且有許多關於如何使用它的教程和問題。

教程: -

http://www.jaredwolff.com/blog/get-started-with-bluetooth-low-energy/ https://learn.adafruit.com/reverse-engineering-a-bluetooth-low-energy-light-bulb/control-with-bluez https://lilyhack.wordpress.com/2014/02/03/ble-read-write-arduino-raspberry-pi/ http://joost.damad.be/2013/08/experiments-with-bluetooth-low-energy.html

問題: -

一旦您更熟悉手動使用這些命令,您就可以編寫一個最小的shell腳本,以便爲您自動執行這些腳本。

+1

我已經使用了很多這些命令來測試BlueZ的功能,並且它具有我需要的功能。但我需要創建比shell腳本更復雜的東西。 – UnTraDe

0

我有一個類似的問題,就是用GATT C/C++ API與BLE設備進行交互。我意識到沒有這樣的API存在。 我解決我的問題的方式是編寫我自己的GATT庫。我在Github上推送了代碼:https://github.com/labapart/gattlib

我在我自己的BLE項目中使用這個庫,它滿足我的需求。我創建了幾個例子https://github.com/labapart/gattlib/tree/master/examples,它們使用庫來鼓勵人們使用它並獲得更好的反饋。

3

看看藍色光源中的attrib/gatttool.c [1]。 Gatttool是一個命令行工具,用於使用C「API」連接BTLE設備。儘管如此,GATT界面並未在libbluetooth中公開。一個更新的替代gatttool,因此另一個可以學習的例子是btgatt-client,您可以在tools/btgatt-client.c中找到它(使用--enable-experimental啓用編譯配置bluez)。除了C接口bluez集成了一個DBUS接口。 bluetoothctl是使用DBUS接口的示例工具。 bluetoothctl的代碼可以在client/ [2]中找到。另一個使用bluez的C接口的示例程序是Anki Drive SDK [3]。它將bluez GATT C接口封裝在自己的庫libbzle中[4]。使用C接口時,建立BTLE連接時必須連接套接字。 gattool通過GATT界面來完成這個操作,而GATT界面又使用了glib iirc。但是,您也可以使用syscalls(socket,connect,...)來解決這個問題。這裏[5]。此文檔還解釋:

不幸的是,截至目前還沒有官方的API參考文獻可供參考,因此建議更多好奇的讀者下載並檢查BlueZ源代碼。

吉爾伯特Brault還提取到GATT接口[7]與下面的免責聲明的一個基本Doxygen文檔從的bluez [6]和鏈接關貿總協定接口:

這是正在進行的工作與記錄所有重要功能和數據結構的意圖

另外Szymon Janc在2016年嵌入式Linux大會上他的演講「現代Linux上的藍牙」中給出了一個很好的概述[8]。從42:00開始,他談到了未曝光的C界面。但總的來說,他似乎推薦使用DBUS API(請參閱45:30「提示」幻燈片)。一些DBUS文檔可以在doc/gatt-api.txt [9]中找到,使用DBUS接口的Python示例可以在test/中找到。

希望這會有所幫助。

[1] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/attrib/gatttool.c
[2] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/client/
[3] https://github.com/anki/drive-sdk/
[4] https://github.com/anki/drive-sdk/tree/master/deps/bzle/
[5] https://people.csail.mit.edu/albert/bluez-intro/c404.html
[6] https://github.com/gbrault/gattclient
[7] http://gbrault.github.io/gattclient/index.html
[8] https://www.youtube.com/watch?v=tclS9arLFzk
[9] http://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc/gatt-api.txt