我正在学习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)。那么,这些附加信息又添加在哪里呢? 对不起我的英语不好。如果您需要其他信息,请告诉我
答案 0 :(得分:0)
电池电量示例使用Bluetooth服务采用的UUID(0x180F)和属性格式(请参阅this)。这样,当手机应用程序找到该服务并看到UUID时,它将知道这是电池服务,并在读取该值时添加%。当使用已采用的服务/特性与自定义特性时,这是一个主要优势,因为本地端具有预定义的格式,因此可以在远程端添加智能。请注意,这也适用于采用的心率服务/特性(应用程序将立即添加bpm),采用的体温服务/特性(应用程序将立即添加(°C),依此类推。
有关采用的服务和特性的完整列表,请参阅以下链接:-
有关此主题的进一步阅读:-
我希望这会有所帮助。