1. 前言
上一章节介绍了特征及描述的发现,有些特征是具备通知属性的,通知使能就像是打开一个开关,打开了就相当于允许服务端设备向客户端发送数据。现在我们来看看在Bleak上如何打开通知的开关。
本文是基于源码例子的 enable_notifications.py 来展开的。
2. 准备一个心率带设备
为了更好得介绍,我们用NORDIC模拟了个心率带设备,现在通过nRF Connect来看看它的服务及其下面的特征和描述。
可以看到特征Heart Rate Measurement 是具备NOTIFY属性的,等会我们去使能它看对方会发来什么数据。
3. 源码解析
import sys
import asyncio
import platform
from bleak import BleakClient
CHARACTERISTIC_UUID = "f000aa65-0451-4000-b000-000000000000"
ADDRESS = (
"24:71:89:cc:09:05"
if platform.system() != "Darwin"
else "B9EA5233-37EF-4DD6-87A8-2A875E821C46"
)
def notification_handler(sender, data):
"""Simple notification handler which prints the data received."""
print("{0}: {1}".format(sender, data))
async def main(address, char_uuid):
async with BleakClient(address) as client:
print(f"Connected: {client.is_connected}")
await client.start_notify(char_uuid, notification_handler)
await asyncio.sleep(5.0)
await client.stop_notify(char_uuid)
if __name__ == "__main__":
asyncio.run(
main(
sys.argv[1] if len(sys.argv) > 1 else ADDRESS,
sys.argv[2] if len(sys.argv) > 2 else CHARACTERISTIC_UUID,
)
)
从以上代码可以得知:
🔔 调用该脚本时可输入2个参数,第一个参数是设备地址,第二个参数是特征UUID,无填参数的话使用代码内默认的
🔔 连接成功后,使能指定特征的通知功能
🔔 在 notification_handler 里将服务端发过来的通知数据打印出来
🔔 5秒后关闭通知功能
4. 运行及结果
从上一章中,发现特征的结果中可知道 Heart Rate Measurement的UUID是:
00002a37-0000-1000-8000-00805f9b34fb
设备地址依然是 D7:18:EE:D9:E0:7A。
运行及结果:
结果中的15是 Heart Rate Measurement 的特征 Handle,冒号后面的是原始数据。
5. 写在最后
使能通知是控制是否接收服务端数据的开关,当需要该数据的时候使能它,不需要的时候disable掉。
通知功能是BLE通讯的最主要方式之一。
看完觉得有收获点个赞吧 ❤️ 或者关注Bleak专栏查看更多Bleak相关使用⏩