对使用 BlueZ 用户空间工具的任何人的免责声明:
OP 在他使用的评论中提到hcitool
。最好不要使用hciconfig
它们,hcitool
因为它们正在逐步退出 BlueZ 并且已经很久没有维护了。它们容易出错,并且这些程序进行的原始调用会阻塞并干扰其他蓝牙应用程序。
BlueZ 发布了一些方法,以便用户将其蓝牙 (LE) 功能用于应用程序或任务:DBus 和较低级别的方法。BlueZ 用户空间包中包含的程序包括bluetoothctl
,它使用 DBus 执行蓝牙相关任务,例如扫描、广告和 GATT。类似的工具btmgmt
,可以被认为是 的维护版本hcitool
,使用较低级别的库。BlueZ 建议对应用程序使用DBus API。请务必编译源代码并按照推荐的说明使用上述工具。还要始终检查上述工具和源文件的许可,因为有些工具和源文件不能包含在专有软件中。
无 DBus 解决方案:
如果使用bluetoothctl
orDBus
不适合你,我建议你使用btmgmt
. 它可以在用户空间源代码/tools
的文件夹中找到。
如果您正在寻找或想要包含与 GATT 相关的任务,您可以btgatt-client
用作 GATT 客户端或从同一文件夹btgatt-server
中充当 GATT 服务器。/tools
这些不使用 DBus,相应的蓝牙守护进程 ( bluetoothd
)bluetoothctl
也一样
DBus解决方案:
但是,您没有看到使用 的服务的最可能原因是您bluetoothctl
没有运行上述带有-E
标志的蓝牙守护程序(实验性)。目前,所有与 GATT 相关的功能仅在此实验模式下运行时可用。(他们正在努力让它脱离实验模式)我认为因为它仍在开发中。如果我没记错的话,BlueZ 也可以在这个实验模式下配置/安装,因此不需要手动操作。
要在启用 GATT 的情况下重新启动 BlueZ 守护程序 ( bluetoothd
),请运行:
sudo service bluetooth stop && bluetoothd -E
在大多数情况下,停止蓝牙服务时,您的蓝牙控制器会断电,并且bluetoothctl
不会响应用户输入/启动时冻结。如果确实是这种情况,请使用btmgmt
并发出 apower on
再次为蓝牙控制器供电。