python - BlueZ 示例 GATT 服务器

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

最佳答案

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

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

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

我希望这会有所帮助。

关于python - BlueZ 示例 GATT 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55223284/

相关文章:

python - 使用哈希函数赋予对象令人难忘的个性

python - 不使用 Tk python 创建秒表(不是倒计时或计时器)

reactjs - 从 URL 中的前端 ReactJS 检索 Golang 服务器中的表单值

android - 写入特征后 GATT 内部错误

linux - 通过命令行将蓝牙文件设备设置为广播模式

python - 还有其他人在 pandas 系列划分中遇到符号查找错误 mkl_serv_getenv 吗?

javascript - 在 Jetty 9 中使用 doGET 转发到另一个 html 页面时出错

javascript - Node : Save generated Stripe "Customer ID" in variable

java - NoSuchMethod 异常

python - 在 Chaquopy 中更改 UI 元素