You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于bluepy启用Sensirion Smartgadget温度更新通知

解决Sensirion Smartgadget BLE温度通知问题

我之前折腾过Sensirion Smartgadget的BLE通知功能,结合官方文档和bluepy的使用经验,给你梳理下关键步骤,应该能解决你的问题:

核心原理:启用BLE通知的关键是配置CCCD

BLE设备的通知功能需要通过**客户端特征配置描述符(CCCD)**来开启,这个描述符的UUID是固定的00002902-0000-1000-8000-00805f9b34fb。针对温度特征,我们需要向它写入特定指令来启用通知。

具体操作步骤(附代码示例)

1. 定义通知回调类

首先要创建一个回调类来处理设备发来的通知数据,bluepy需要通过继承DefaultDelegate实现:

from bluepy.btle import DefaultDelegate, Peripheral

class TempNotificationHandler(DefaultDelegate):
    def __init__(self):
        super().__init__()
    
    def handleNotification(self, char_handle, data):
        # 解析Sensirion的温度数据:16位小端格式,单位0.01℃
        temperature = int.from_bytes(data, byteorder='little') / 100.0
        print(f"实时温度更新: {temperature} °C")

2. 连接设备并定位目标特征

Smartgadget使用标准的环境监测服务(UUID: 0000181a-0000-1000-8000-00805f9b34fb),温度特征的UUID是00002a6e-0000-1000-8000-00805f9b34fb,我们需要先定位到这个特征:

# 替换成你的设备MAC地址
DEVICE_MAC = "AA:BB:CC:DD:EE:FF"

# 连接设备
peripheral = Peripheral(DEVICE_MAC)
# 设置回调处理器
peripheral.setDelegate(TempNotificationHandler())

# 获取环境监测服务
env_service = peripheral.getServiceByUUID("0000181a-0000-1000-8000-00805f9b34fb")
# 获取温度特征
temp_characteristic = env_service.getCharacteristics("00002a6e-0000-1000-8000-00805f9b34fb")[0]

3. 写入指令启用通知

找到温度特征对应的CCCD描述符,写入\x01\x00(小端字节序,代表启用通知):

# 获取CCCD描述符
cccd_descriptor = temp_characteristic.getDescriptors(forUUID="00002902-0000-1000-8000-00805f9b34fb")[0]
# 写入启用通知的指令,withResponse=True确保设备确认收到
cccd_descriptor.write(b"\x01\x00", withResponse=True)

4. 循环等待通知

最后进入循环等待设备推送的温度数据:

print("已启用温度通知,等待数据更新...")
while True:
    # waitForNotifications(1.0)表示每隔1秒检查一次是否有通知
    if peripheral.waitForNotifications(1.0):
        continue
    print("等待中...")

常见问题排查

  • 指令字节序错误:很多人会把指令写成b"\x00\x01",这是启用**指示(Indication)**而非通知,设备可能不会推送数据,一定要用b"\x01\x00"。
  • 权限问题:运行bluepy脚本需要蓝牙操作权限,建议用sudo执行,或者给bluepy设置cap_net_raw权限。
  • 特征UUID找错:如果你的设备用了自定义UUID(而非标准环境服务),需要对照你手上的第10页文档确认特征UUID,替换代码中的对应值。
  • 设备未进入通知模式:部分Smartgadget可能需要先通过特定特征写入指令开启推送模式,如果上述步骤无效,可以尝试向设备的配置特征写入对应指令(参考文档第10页的配置命令)。

内容的提问来源于stack exchange,提问作者Burner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:41:21