BlueZ示例gatt服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BlueZ示例gatt服务器相关的知识,希望对你有一定的参考价值。

我正在学习BlueZ和BLE。在bluez / test目录中有一个python'example gatt server'。我已经阅读了代码,几乎了解它是如何工作的,但有些事情并不清楚。例如,这种方法可以通知特征值何时发生变化(在此示例中为电池电量值):

    def notify_battery_level(self):
    if not self.notifying:
        return
    self.PropertiesChanged(
            GATT_CHRC_IFACE,
            { 'Value': [dbus.Byte(self.battery_lvl)] }, [])

PropertiesChanged方法如此定义:

@dbus.service.signal(DBUS_PROP_IFACE,
                     signature='sa{sv}as')
def PropertiesChanged(self, interface, changed, invalidated):
    pass

我开始做广告并运行这个例子,然后我在我的智能手机上使用BLE扫描仪应用程序来读取特性(在这种情况下是电池电量)。好吧,self.battery_lvl是一个整数(例如24),但在ble扫描仪上,作为特征值,我看到“24%电池电量”。问题是代码中没有任何地方将'%battery level'添加到self.battery_lvl(仅为24)。那么这些额外的信息又添加到了哪里?对不起我的英语不好。如果您需要其他信息,请告诉我

答案

电池级示例使用蓝牙服务采用UUID(0x180F)和属性格式(请参阅this)。因此,当移动电话应用找到服务并看到UUID时,它将知道这是电池服务,并在读取值时添加%。当使用所采用的服务/特性与自定义服务/特性时,这是一个主要优势,您可以在远程端添加智能,因为本地端具有预定义的格式。请注意,这也适用于采用的心率服务/特性(应用程序将立即添加bpm),采用温度服务/特性(应用程序将立即添加(°C),等等。

有关采用的服务和特征的完整列表,请参阅以下链接: -

有关此主题的进一步阅读: -

我希望这有帮助。

以上是关于BlueZ示例gatt服务器的主要内容,如果未能解决你的问题,请参考以下文章

GATT 服务器不适用于 Bluez 5.32、5.37

BlueZ DBUS API - GATT 接口对 BLE 设备不可用

GATT API bluez - MI乐队2

BlueZ BLE GATT 写入请求 (0x12) 而不是 (0x16)

Bluez BLE 连接监控使用 DBUS-Python

BLE GATT 服务器特性定义