# bluetooth 模块 API 文档 ## API 创建具有指定值的 UUID 实例 该值可以是 - 一个 16 位整数. 例如`0x2908` - 一个 32 位整数. 例如`0x29081234` - 一个 128 位的 UUID 字符串。例如`'6E400001-B5A3-F393-E0A9-E50E24DCCA9E'`. ### class UUID(): ``` python def __init__(self,value):... ``` ``` python def _UUID_to_bytes(self,value):... ``` ### class BLE(_bluetooth.BLE): ``` python def __init__(self):... ``` ``` python def test(self):... ``` ``` python def test2(self):... ``` ``` python def test3(self,connhandle,valuehandle):... ``` ``` python def test4(self,data):... ``` ``` python def test_call_some_name(self):... ``` ``` python def _check_active(self):... ``` 可选择更改 BLE 无线电的活动状态,并返回当前状态。 Args: - active(bool): 为 1 则开启BLE, 否则关闭BLE; 为空则查询当前BLE状态 Returns: - bool:设置状态时,返回操作成功与否; 查询状态时, 返回状态, True为活跃 ``` python def active(self,active_flag=None):... ``` 获取或设置 BLE 接口的配置值。 要获得一个值,参数名称应该被引用为一个字符串,并且一次只查询一个参数。 如 `config("gap_name")` 要设置值,请使用关键字语法,并且一次可以设置一个或多个参数。 如 `config(gap_name="nimble")` 当前支持的值是: - `'mac'`: TODO:需要支持设置任意值嘛?有点困难 - `'addr_mode'`: - `'gap_name'`: - `'rxbuf'`: TODO:暂未支持, 没找到对应函数 - `'mtu'`: TODO:不明意义 - `'bond'`: TODO: 目前提供的接口不支持 - `'mitm'`: TODO: 目前提供的接口不支持 - `'io'`: TODO:未找到对应函数 - `'lesure'`: TODO:只支持设置 ``` python def config(self,*param_name,**kv):... ``` 为来自 BLE 堆栈的事件注册回调。 处理程序采用两个参数,event(在下面的代码中的一个) 和 data(其是值的特定事件元组)。 ``` python def irq(self,func):... ``` ``` python def _callback(self,data):... ``` 以指定的时间间隔(以微秒为单位)开始广播。 adv_data和resp_data可以是任何实现缓冲协议的类型(例如bytes, bytearray, str)。adv_data包含在所有广播中,并且resp_data被发送以响应主动扫描。 注意:如果adv_data(或resp_data)是None, 则传递给前一个调用的数据 gap_advertise将被重新使用。 要清除广告有效负载, 请传递一个空值bytes, 即b'' Args: - interval_us(int):广播时间间隔, 单位us. 此间隔将向下舍入到最接近的 625us的倍数。要停止广告, 请将interval_us设置 为 None。 - adv_data(bytes, bytearray, str): 自定义广播数据(添加到默认广播数据后),默认值为none TODO:1.append模式只能是0XFF数据; 归零模式全部自定义输入 - resp_data(bytes, bytearray, str): 扫描响应数据,默认值为none - connectable(bool): 是否可连接, True 为可连接. - adv_data_append: 是否是增加数据 TODO:存在问题 ``` python def gap_advertise(self,interval_us,adv_data=None,resp_data=None,connectable=None,adv_data_append=None):... ``` 运行持续指定持续时间(以毫秒为单位)的扫描操作。 要无限期扫描, 请将duration_ms设置为0;要停止扫描,请将duration_ms设置为 None. 使用interval_us和window_us可选择配置占空比。扫描器将每interval_us微秒运行window_us 微秒,总共持续duration_ms毫秒。 默认间隔和窗口分别为 1.28 秒和 11.25 毫秒(后台扫描). 对于每个扫描结果, _IRQ_SCAN_RESULT将引发事件, 并带有事件数据。`(addr_type, addr, adv_type, rssi, adv_data)` Args: - duration_ms(int):扫描持续时间。要无限期扫描, 请将duration_ms设置为0;要停止扫描,请将duration_ms设置为 None. - interval_us(int): 扫描间间隔时间。默认值为1280000 - window_us(int): 扫描窗口时间。默认值为11250 - active(bool): 是否接受扫描响应。默认值False(不接受) Return: - 操作成功返回 0; 否则返回错误代码 events: - 单个扫描结果触发 _IRQ_SCAN_RESULT - 扫描结束触发 _IRQ_SCAN_DONE ``` python def gap_scan(self,duration_ms,interval_us=1280000,window_us=11250,active=False):... ``` central 设备连接 peripherals 设备 Args: - peer_addr(list,bytes,bytearray): 需要连接的设备的mac地址 - peer_addr_type(int): 连接设备的地址类型 - 0x00 - PUBLIC - 使用控制器的公共地址。 - 0x01 - RANDOM - 使用生成的静态地址。 - 0x02 - RPA - 使用可解析的私有地址。 - 0x03 - NRPA - 使用不可解析的私有地址。 Return: - (int): 操作成功返回 0; 否则返回错误代码 events: - 连接成功触发 CENTRAL设备:_IRQ_PERIPHERAL_CONNECT; PERIPHERAL设备:_IRQ_CENTRAL_CONNECT ``` python def gap_connect(self,peer_addr,peer_addr_type,scan_duration_ms=2000):... ``` Args: - conn_handle(int): 连接句柄 Return: - (int): 操作成功返回 0; 否则返回错误代码 events: - 断连成功触发 CENTRAL设备:_IRQ_PERIPHERAL_DISCONNECT; PERIPHERAL设备:_IRQ_CENTRAL_DISCONNECT ``` python def gap_disconnect(self,conn_handle):... ``` 使用指定的服务配置服务器,替换任何现有服务。 Args: - services(嵌套多层tuple): Return: - (int): 操作成功返回 0; 否则返回错误代码 ``` python def gatts_register_services(self,services):... ``` Args: - value_handle(int): 蓝牙特性句柄 Return: - (int): 操作成功返回 0; 否则返回错误代码 ``` python def gatts_read(self,value_handle):... ``` Args: - value_handle(int): 蓝牙特性句柄 - data(str,int,bytes,list(元素为小于256大于0的整数)): 修改的数据 - send_update(bool):是否通知客户端, False为不通知, 默认为False Return: - (int): 操作成功返回 0; 否则返回错误代码 events: - send_update 为 True 时, 触发tx事件 ``` python def gatts_write(self,value_handle,data,send_update=False):... ``` 向连接的客户端发送通知请求。 Args: - conn_handle(int): 连接句柄 - value_handle(int): 蓝牙特性句柄 - data(str,int,bytes,list(元素为小于256大于0的整数)): 发送的数据, 默认值为None 如果data不是None, 则该值将作为通知的一部分发送给客户端。本地值不会被修改。否则, 如果data是None, 则将发送当前本地值 Return: - (int): 操作成功返回 0; 否则返回错误代码 events: - ``` python def gatts_notify(self,conn_handle,value_handle,data=None):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gatts_indicate(self,conn_handle,value_handle,data=None):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gatts_set_buffer(self,value_handle,len,append=False):... ``` 打印全部本地服务 ``` python def gatts_show_local(self):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gattc_discover_services(self,conn_handle,uuid:UUID=None):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gattc_discover_characteristics(self,conn_handle,start_handle,end_handle,uuid:UUID=None):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gattc_discover_descriptors(self,conn_handle,start_handle,end_handle):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gattc_read(self,conn_handle,value_handle):... ``` Args: - Return: - 操作是否成功 注意:单次传输最多95个byte events: - ``` python def gattc_write(self,conn_handle,value_handle,data,mode=0):... ``` Args: - Return: - 操作是否成功 events: - ``` python def gattc_exchange_mtu(self,conn_handle):... ``` ``` python def gattc_subscribe(self,conn_handle,value_handle,subscribe=0):... ``` ``` python def _c2value(self,handle):... ``` ``` python def _py2value(self,handle):... ``` ``` python def _c2_change_value(self,handle,value):... ``` ``` python def _py2_change_value(self,handle,value):... ``` ``` python def _convert_ble_service_info(data):... ``` ``` python def _count_chrs(srvs_tuple):... ``` ``` python def _to_bytes(data,size=None):... ``` ## Examples