BlueZ 示例 gatt 服务器

BlueZ example gatt server

我正在学习 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(仅 24)。那么这些附加信息在哪里添加呢? 对不起我的英语不好。如果您需要更多信息,请告诉我

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

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

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

希望对您有所帮助。