BlueZ示例GATT服务器

时间:2019-03-18 14:08:27

标签: python server bluetooth-lowenergy 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%电池电量”。问题在于代码中没有在'self.battery_lvl'中添加'%Battery Level'(仅24)。那么,这些附加信息又添加在哪里呢? 对不起我的英语不好。如果您需要其他信息,请告诉我

1 个答案:

答案 0 :(得分:0)

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

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

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

我希望这会有所帮助。