编程打卡:玩玩bluepy

想要尝试用python连接我的小米手环,感觉或许会有一些有趣的应用,比如实时检测心率,当我熬夜编程,心率过高猝死之后,能够立刻用脚本删掉电脑上的所有内容之类的,笑.所以大概看了看这方面的东西.具体参考
https://github.com/satcar77/miband4 项目 和 https://ianharvey.github.io/bluepy-doc/peripheral.html bluepy 的文档。
bluepy是 Linux Only的,不幸的是暂时手上没有跑Linux的机器,我在尝试着用支持Windows平台的 pybluez 做到一样的事情,其实现在还在读。。

周边类
Bluepy的Peripheral类封装了一个与Bluetooth LE外围设备的连接。你通过指定MAC地址直接创建一个Peripheral对象;当连接建立后,该设备提供的服务和特性可以被发现并被读取或写入。

构造函数
Peripheral([deviceAddress=None[, addrType=ADDR_TYPE_PUBLIC[, iface=None]])
如果deviceAddress不是无,则创建一个Peripheral对象,并与deviceAddress指示的设备建立连接。deviceAddress应该是一个由六个十六进制字节组成的字符串,用冒号隔开,例如:"11:22:33🆎cd:ed"。

如果deviceAddress是None,则创建一个未连接的Peripheral对象。你必须在这个对象上调用connect()方法(传给它一个设备地址),然后它才能被使用。

addrType参数可以用来选择固定(btle.ADDR_TYPE_PUBLIC)和随机(btle.ADDR_TYPE_RANDOM)地址类型,这取决于目标外围设备的要求。更多细节见蓝牙4.0规范的第10.8节。

iface参数允许设置进行连接的蓝牙接口。在Linux上,0表示/dev/hci0,1表示/dev/hci1,以此类推。

deviceAddress也可以是一个ScanEntry对象。在这种情况下,设备地址、地址类型和接口号都来自ScanEntry值,而addrType和iface参数被忽略。

如果与设备的连接失败,构造函数将抛出一个BTLEException。

实例方法
connect(deviceAddress[, addrType=ADDR_TYPE_PUBLIC[, iface=None]])
与deviceAddress指示的设备建立连接,地址类型为addrType,接口号为iface(详见Peripheral构造函数)。你应该只在外设未被连接的情况下调用这个方法(即你没有向构造函数传递deviceAddress);一个给定的外设对象一旦被连接就不能被重新连接。

disconnect()
放弃与设备的连接,并清理相关的操作系统资源。尽管外设的Python析构器会尝试调用这个方法,但你不应该在任何特定的时间依赖这种情况的发生。因此,如果你已经完成了与设备的通信,总是明确地调用 disconnect() 。

getServices()
返回代表外围设备所提供的服务的服务对象的列表。如果还没有进行蓝牙服务发现,这将执行蓝牙服务发现;否则,它将立即返回一个缓存的服务列表。

在Python 3.x上,它返回一个字典视图对象,而不是一个列表。

getServiceByUUID(uuidVal)
uuidVal 可以是一个 UUID 对象,也可以是任何可以用来构造 UUID 对象的字符串或整数,返回一个具有指定 UUID 的服务对象实例。如果先前发现了该服务(例如,通过getServices()),该方法将立即返回,否则将查询外围。如果没有找到该服务,它会引发一个BTLEEException。

getCharacteristics(startHnd=1, endHnd=0xFFFF, uuid=None)
返回一个包含外围设备特性对象的列表。如果没有给出参数,将返回所有特性。如果startHnd和/或endHnd被给定,列表被限制在手柄在给定范围内的特性上--注意,通常使用Service.getCharacteristics()来获取与特定服务相关的特性更为方便。uuid可以是任何字符串、整数或UUID类型,可用于构造UUID对象。

如果没有找到匹配的特征,返回一个空列表。

getDescriptors(startHnd=1, endHnd=0xFFFF)
返回一个包含外围设备描述符对象的列表。如果没有给出参数,将返回所有描述符。如果startHnd和/或endHnd被给定,列表被限制在手柄在给定范围内的描述符。同样,通常使用Service.getDescriptors()来获取与特定服务相关的描述符更为方便。

如果没有找到匹配的描述符,则返回一个空列表。

withDelegate(delegate)
这存储了一个对 "委托 "对象的引用,当蓝牙通知等异步事件发生时,会调用该对象。这应该是DefaultDelegate类的一个子类。更多信息请参见与通知一起工作。该方法返回Peripheral对象。

setDelegate(delegate)
(自0.9.10起已废弃) 与withDelegate()相同。

waitForNotifications(timeout)
阻塞,直到收到来自外设的通知,或者直到给定的超时时间(秒)已过。如果收到了通知,委托对象的handleNotification()方法将被调用,然后waitForNotifications()将返回True。

如果在超时结束前没有收到任何通知,这将返回False。

writeCharacteristic(handle, val, withResponse=False)
将数据val (在Python 2.x中为str类型,在3.x中为byte类型) 写到handle标识的特性中,handle应该是1到65535范围内的一个整数。如果你知道一个特性的GATT句柄,但没有一个特性对象,这很有用。

如果withResponse为真,将等待来自设备的写入成功的确认。

readCharacteristic(handle)
读取由句柄标识的特性的当前值。如果你知道该特性的句柄,但没有合适的特性对象,这就很有用。

特性
下面列出的所有属性都是只读的。

addr
设备MAC地址(用冒号分隔的十六进制字符串)。

addrType
设备地址类型 - ADDR_TYPE_PUBLIC或ADDR_TYPE_RANDOM之一;这将是一个可打印的字符串。

接口(iface
用于连接的蓝牙接口号(0 = /dev/hci0)。

posted @ 2023-05-14 01:07  satou_matsuzaka  阅读(185)  评论(0编辑  收藏  举报

This is a Test

メイドノココロハ アヤツリドール