UnT*_*aDe 8 linux bluetooth bluetooth-lowenergy bluez
我有一个设备有一些自定义GATT服务,我想编写一个Linux程序来与它进行交互.经过一番搜索,我发现Linux正在使用BlueZ来处理蓝牙LE协议.我正在使用UZntu 15.10和BlueZ 5.35,但我无法弄清楚如何在用户空间程序中使用这个BlueZ.我无法在任何地方找到API文档,没有教程,示例,什么都没有.甚至可以使用这个BlueZ堆栈来做除了使用默认服务连接蓝牙设备之外的任何事情吗?如果是这样,文档在哪里?(最好是C/C++ API,但此时一切顺利)
JJJ*_*idt 14
我感觉到你的痛苦。我需要将来自自定义 BLE 外设(一个简单的远程按钮)的用户输入添加到在 Raspberry Pi 上的 Linux (Stretch) 下运行的嵌入式程序。我对 BlueZ API 不必要的复杂性和 Spartan(不是恭维)文档感到震惊。所有 BlueZ“示例”都是从蓝牙是宇宙中心的角度编写的,用户希望支持有史以来发明的每一个蓝牙设备。就我而言,我确切地知道我需要与之交互的设备、服务和 GATT 特征,并且我想要一个能够在低优先级线程中完成任务的最小开销任务。
事实证明,使用 BlueZ 的 BLE 中央客户端非常简单,但从 5.49 版中的 BlueZ 实用程序 bluetoothctl 的源开始,这是一条艰巨的道路。我只使用来自 BlueZ 发行版的三个未修改的源文件和另外三个源文件的摘录来满足我的需求。由于 BlueZ 源代码不可避免地依赖于 D-Bus 和 Gnome GLib 主循环,因此我勉强将它们包含在内。
遵循 OlivierM 的慷慨领导,并希望我在时间上令人尴尬的大量投资可以为其他人节省一个月的生命,我在 GitHub 上发布了我的示例蓝牙 BLE 客户端:https : //github.com/jjjsmit/BluetoothBLEClient
看看attrib/gatttool.cbluez来源[1].Gatttool是一个命令行实用程序,用于使用C"API"连接到BTLE设备.但是,GATT接口不会暴露在libbluetooth中.gatttool的一个新的替代品,因此另一个学习的例子是btgatt-client,你可以在其中找到tools/btgatt-client.c(为了启用编译配置bluez --enable-experimental).除了C接口bluez集成了DBUS接口.bluetoothctl是使用DBUS接口的示例工具.bluetoothctl的代码可以在client/[2].另一个使用bluez的C接口的示例程序是Anki Drive SDK [3].它将bluez GATT C接口打包在自己的库libbzle [4]中.使用C接口时,必须在建立BTLE连接时连接套接字.gatttool通过GATT接口完成此操作,GATT接口又使用glib iirc.但您也可以使用系统调用(socket,connect,...)来完成此操作,如此处所述[5].该文件还解释了:
不幸的是,截至目前还没有官方API参考,所以建议更多好奇的读者下载并检查BlueZ源代码.
Gilbert Brault还从bluez [6]中提取了GATT接口,并链接到GATT接口的基本doxygen文档[7],其中包含以下免责声明:
这是一项正在进行的工作,旨在记录所有重要的功能和数据结构
此外,Szymon Janc在2016年嵌入式Linux大会上的演讲"蓝牙现代Linux"中给出了很好的概述[8].在42:00关闭时,他谈到了未曝光的C接口.但总的来说,他似乎推荐使用DBUS API(请参阅45:30的"提示"幻灯片).在doc/gatt-api.txt[9]中可以找到一些DBUS文档,可以在中找到使用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
在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脚本,以便为您自动化。
| 归档时间: |
|
| 查看次数: |
9685 次 |
| 最近记录: |