BlueZ示例gatt服务器

问题描述 投票:1回答:1

我正在学习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)。那么这些额外的信息又添加到了哪里?对不起我的英语不好。如果您需要其他信息,请告诉我

python server bluetooth-lowenergy bluez gatt
1个回答
0
投票

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

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

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

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.