观察者 (Scanner)
BLE.gap_scan(duration_ms[, interval_us][, window_us])
运行持续指定时间(以毫秒为单位)的扫描操作。
要无限期扫描,请将 duration_ms 设置为 0 。要停止扫描,请将 duration_ms 设置为 None 。
使用 interval_us 和 window_us 可以选择配置占空比。 扫描器将每间隔一微秒运行一次 window_us 微秒,总计持续时间为毫秒。默认间隔和窗口分别为1.28秒和11.25毫秒。
对于每个扫描结果,_IRQ_SCAN_RESULT 将引发该事件。
停止扫描(由于持续时间结束或明确停止)时,_IRQ_SCAN_COMPLETE 将引发该事件。
外围设备 (GATT Server)
BLE外围设备具有一组注册服务。每个服务可能包含特性,每个特性都有一个值。特征也可以包含描述符,描述符本身具有值。
这些值存储在本地,并通过在服务注册过程中生成的“值柄”进行访问。它们也可以被远程的中央设备读取或写入。 此外,外围设备可以通过连接句柄将特征“通知”到已连接的中央设备。
特征和描述符的默认最大为20个字节。任何由中央设备写给它们的都会被截短到这个长度。但是,任何本地写操作都会增加最大大小, 所以,如果你写想更长的数据,请注册后使用 gatts_write 。例如, gatts_write(char_handle, bytes(100))
BLE.gatts_register_services(services_definition)
使用指定的服务配置外围设备,替换所有现有服务。
services_definition 是一个服务的列表,其中每个服务都是一个包含UUID和特征列表的二元元组。
每个特征都是一个包含 UUID,flags 值以及一个可选的描述符列表的2或3元素元组。
每个描述符是一个包含UUID和一个flags值的二元元组。
flags是一个按位或组合的 ubluetooth.FLAG_READ,ubluetooth.FLAG_WRITE 和 ubluetooth.FLAG_NOTIFY 。如下文所定义的值:
返回值是元组的列表(每个服务一个元素)(每个元素是一个值句柄)。特征和描述符句柄按照定义的顺序被展平到相同的元组中。
以下示例注册了两个服务 (Heart Rate, and Nordic UART):
HR_UUID = bluetooth.UUID(0x180D)
HR_CHAR = (bluetooth.UUID(0x2A37), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,)
HR_SERVICE = (HR_UUID, (HR_CHAR,),)
UART_UUID = bluetooth.UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E')
UART_TX = (bluetooth.UUID('6E400003-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,)
UART_RX = (bluetooth.UUID('6E400002-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_WRITE,)
UART_SERVICE = (UART_UUID, (UART_TX, UART_RX,),)
SERVICES = (HR_SERVICE, UART_SERVICE,)
( (hr,), (tx, rx,), ) = bt.gatts_register_services(SERVICES)
这三个值柄(hr, tx, rx)可与使用 gatts_read, gatts_write, 和 gatts_notify 。
注意:注册服务之前,必须停止广告。
BLE.gatts_read(value_handle)
读取本地的值柄 (该值由 gatts_write 或远程的中央设备写入)。
BLE.gatts_write(value_handle, data)
写入本地的值柄,该值可由中央设备读取。
BLE.gatts_notify(conn_handle, value_handle[, data])
通知连接的中央设备此值已更改,并且应发出此外围设备的当前值的读取值。
如果指定了数据,则将该值作为通知的一部分发送到中央设备,从而避免了需要单独的读取请求的情况。请注意,这不会更新存储的本地值。
BLE.gatts_set_buffer(value_handle, len, append=False)
设置内部缓冲区大小(以字节为单位)。这将限制可以接收的最大值。默认值为20。 将 append 设置为 True 会将所有远程写入追加到当前值,而不是替换当前值。这样最多可以缓冲len个字节。 使用时 gatts_read ,将在读取后清除该值。这个功能在实现某些东西时很有用,比如Nordic UART服务。
中央设备 (GATT Client)
BLE.gap_connect(addr_type, addr, scan_duration_ms=2000)
连接到外围设备。成功,将触发 _IRQ_PERIPHERAL_CONNECT 事件。
BLE.gap_disconnect(conn_handle)
断开指定的连接句柄。成功,将触发 _IRQ_PERIPHERAL_DISCONNECT 事件。 如果未连接连接句柄,返回 False ,否则返回 True 。
BLE.gattc_discover_services(conn_handle)
查询已连接的外围设备的服务。
对于发现的每个服务, 会触发 _IRQ_GATTC_SERVICE_RESULT 事件。
BLE.gattc_discover_characteristics(conn_handle, start_handle, end_handle)
在已连接的外围设备上查询指定范围内的特征。 每次特征发现,会触发 _IRQ_GATTC_CHARACTERISTIC_RESULT 事件。
BLE.gattc_discover_descriptors(conn_handle, start_handle, end_handle)
在连接的外围设备中查询指定范围内的描述符。
每次特征发现,会触发 _IRQ_GATTC_DESCRIPTOR_RESULT 事件。
BLE.gattc_read(conn_handle, value_handle)
向连接的外围设备发出远程读取,以获取指定的特性或描述符句柄。
如果成功,会触发 _IRQ_GATTC_READ_RESULT 事件
BLE.gattc_write(conn_handle, value_handle, data, mode=0)
针对指定的特征或描述符句柄向连接的外围设备发出远程写操作。
mode
mode=0 (默认)是无响应写操作:写操作将发送到远程外围设备,但不会返回确认信息,也不会引发任何事件。
mode=1 i是响应写入:请求远程外围设备发送其已接收到数据的响应/确认。
如果从远程外围设备收到响应,_IRQ_GATTC_WRITE_STATUS 事件将触发。
UUID 类
构建
class ubluetooth.UUID(value)
用指定的值创建一个UUID实例。
该值可以是:
一个16位整数。例如 0x2908.
128位UUID字符串。例如 '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'.
常量
ubluetooth.FLAG_READ
ubluetooth.FLAG_WRITE
ubluetooth.FLAG_NOTIFY
|