_bleio –低功耗蓝牙 (BLE) 通信

_bleio模块为使用蓝牙低功耗 (BLE) 进行通信提供了必要的低级功能。'_' 前缀表示该模块供图书馆内部使用,但不供最终用户使用。它的 API 可能会在 CircuitPython 的次要版本之间发生不兼容的变化。请改用 adafruit_bleCircuitPython 库,该库基于_bleio,并提供更高级别的便利功能,包括预定义的信标、客户端、服务器。

在这些板上可用
  • ARAMCON 徽章 2019
  • ARAMCON2 徽章
  • ATMegaZero ESP32-S2
  • Adafruit CLUE nRF52840 Express
  • Adafruit Circuit Playground Bluefruit
  • Adafruit EdgeBadge
  • Adafruit Feather Bluefruit Sense
  • Adafruit Feather M4 CAN
  • Adafruit Feather M4 Express
  • Adafruit Feather MIMXRT1011
  • Adafruit Feather RP2040
  • Adafruit Feather STM32F405 Express
  • Adafruit Feather nRF52840 Express
  • Adafruit FunHouse
  • Adafruit Grand Central M4 Express
  • Adafruit Hallowing M4 Express
  • Adafruit ItsyBitsy M4 Express
  • Adafruit ItsyBitsy RP2040
  • Adafruit ItsyBitsy nRF52840 Express
  • Adafruit LED Glasses Driver nRF52840
  • Adafruit Macropad RP2040
  • Adafruit MagTag
  • Adafruit Matrix Portal M4
  • Adafruit Metro ESP32S2
  • Adafruit Metro M4 Airlift Lite
  • Adafruit Metro M4 Express
  • Adafruit Metro nRF52840 Express
  • Adafruit Monster M4SK
  • Adafruit PyGamer
  • Adafruit PyPortal
  • Adafruit PyPortal Pynt
  • Adafruit PyPortal Titano
  • Adafruit Pybadge
  • Adafruit QT Py RP2040
  • Adafruit QT2040 Trinkey
  • Adafruit Trellis M4 Express
  • AloriumTech Evo M51
  • Arduino Nano 33 BLE
  • Arduino Nano RP2040 Connect
  • Artisense Reference Design RD00
  • AtelierDuMaker nRF52840 Breakout
  • BDMICRO VINA-D51
  • BLE-SS dev board Multi Sensor
  • BastBLE
  • BastWiFi
  • BlueMicro840
  • CP32-M4
  • Capable Robot Programmable USB Hub
  • Challenger RP2040 WiFi
  • CircuitBrains Deluxe
  • CrumpS2
  • Cytron Maker Pi RP2040
  • DynOSSAT-EDU-OBC
  • ESP 12k NodeMCU
  • Electronut Labs Blip
  • Electronut Labs Papyr
  • EncoderPad RP2040
  • Espruino Pico
  • Espruino Wifi
  • Feather ESP32S2 without PSRAM
  • Feather MIMXRT1011
  • Feather MIMXRT1062
  • FeatherS2
  • FeatherS2 Neo
  • FeatherS2 PreRelease
  • Franzininho WIFI w/Wroom
  • Franzininho WIFI w/Wrover
  • Gravitech Cucumber M
  • Gravitech Cucumber MS
  • Gravitech Cucumber R
  • Gravitech Cucumber RS
  • HMI-DevKit-1.1
  • HiiBot BlueFi
  • IMXRT1010-EVK
  • IkigaiSense Vita nRF52840
  • Kaluga 1
  • LILYGO TTGO T8 ESP32-S2 w/Display
  • MDBT50Q-DB-40
  • MDBT50Q-RX Dongle
  • MORPHEANS MorphESP-240
  • MakerDiary nRF52840 MDK
  • MakerDiary nRF52840 MDK USB Dongle
  • Makerdiary M60 Keyboard
  • Makerdiary Pitaya Go
  • Makerdiary nRF52840 M.2 Developer Kit
  • Melopero Shake RP2040
  • Metro MIMXRT1011
  • Mini SAM M4
  • NUCLEO STM32F746
  • NUCLEO STM32F767
  • NUCLEO STM32H743
  • OPENMV-H7 R1
  • Oak Dev Tech BREAD2040
  • Oak Dev Tech PixelWing ESP32S2
  • Open Hardware Summit 2020 Badge
  • PCA10056 nRF52840-DK
  • PCA10059 nRF52840 Dongle
  • PCA10100 nRF52833 Dongle
  • PYB LR Nano V2
  • Particle Argon
  • Particle Boron
  • Particle Xenon
  • Pimoroni Interstate 75
  • Pimoroni Keybow 2040
  • Pimoroni PGA2040
  • Pimoroni Pico LiPo (16MB)
  • Pimoroni Pico LiPo (4MB)
  • Pimoroni PicoSystem
  • Pimoroni Plasma 2040
  • Pimoroni Tiny 2040
  • PyCubedv04
  • PyCubedv04-MRAM
  • PyKey60
  • PyboardV1_1
  • Raspberry Pi Pico
  • Robo HAT MM1 M4
  • S2Mini
  • SAM E54 Xplained Pro
  • SAM32v26
  • SPRESENSE
  • ST STM32F746G Discovery
  • STM32F411E_DISCO
  • STM32F412G_DISCO
  • STM32F4_DISCO
  • Saola 1 w/Wroom
  • Saola 1 w/Wrover
  • Seeeduino Wio Terminal
  • Silicognition LLC M4-Shim
  • Simmel
  • SparkFun MicroMod RP2040 Processor
  • SparkFun MicroMod SAMD51 Processor
  • SparkFun MicroMod nRF52840 Processor
  • SparkFun Pro Micro RP2040
  • SparkFun Pro nRF52840 Mini
  • SparkFun STM32 MicroMod Processor
  • SparkFun Thing Plus - RP2040
  • SparkFun Thing Plus - SAMD51
  • TG-Boards' Datalore IP M4
  • TG-Watch
  • Targett Module Clip w/Wroom
  • Targett Module Clip w/Wrover
  • Teensy 4.0
  • Teensy 4.1
  • Teknikio Bluebird
  • The Open Book Feather
  • TinkeringTech ScoutMakes Azul
  • TinyS2
  • UARTLogger II
  • WarmBit BluePixel nRF52840
  • iMX RT 1020 EVK
  • iMX RT 1060 EVK
  • micro:bit v2
  • microS2
  • nanoESP32-S2 w/Wrover
  • nanoESP32-S2 w/Wroom
  • nice!nano
  • stm32f411ce-blackpill
  • stm32f411ce-blackpill-with-flash

_bleio.adapter :Adapter

BLE 适配器用于管理设备发现和连接。该对象是 的唯一实例_bleio.Adapter.

exception _bleio.BluetoothError

基地:Exception

蓝牙相关错误的 Catchall 异常。

初始化自我。请参阅 help(type(self)) 以获得准确的签名。

exception _bleio.RoleError

基地: BluetoothError

当资源用作不匹配的角色时引发。例如,如果尝试设置本地 CCCD,但只能在远程设置时才能设置。

初始化自我。请参阅 help(type(self)) 以获得准确的签名。

exception _bleio.SecurityError

基地:BluetoothError

发生与安全相关的错误时引发。

初始化自我。请参阅 help(type(self)) 以获得准确的签名。

_bleio.set_adapter(adapter: Optional[Adapter])None

将适配器设置为用于 BLE,例如在使用 HCI 适配器时。NotImplementedError当适配器为单例且无法设置时引发。

class _bleio.Adapter(*, uart: busio.UART, rts: digitalio.DigitalInOut, cts: digitalio.DigitalInOut)

BLE 适配器对象管理与附近其他低功耗蓝牙设备的发现和连接。低功耗蓝牙规范的这一部分称为通用访问配置文件 (GAP)。

其他设备的发现发生在扫描过程中,该过程会侦听未加密广播的小信息包(称为广告)。广告数据包有两种不同的用途。第一种是向任何关心的人广播一小段数据,仅此而已。这些被称为信标。第二类广告是在设备建立连接后宣传可用的附加功能。例如,BLE 心率监测器会宣传它提供标准的 BLE 心率服务。

适配器可以完成此过程的两个部分:它可以扫描其他设备广告,也可以广告自己的数据。此外,适配器可以接受传入连接并启动连接。

在没有本地 BLE 的板上,您可以使用 HCI 协处理器。传递用于与协处理器(例如 Adafruit AirLift)通信的 UART 和引脚。协处理器必须事先通过适当的引脚操作复位并进入 BLE 模式。这uart, rts, 和 cts对象用于与HCI协处理器在HCI模式进行通信。Adapter 在此调用期间启用该对象。

实例化一个Adapter后,调用_bleio.set_adapter() set _bleio.adapter

在带有本机 BLE 的板上,您不能创建_bleio.Adapter; 此构造函数将引发NotImplementedError使用_bleio.adapter 访问的唯一实例已经可用。

enabled :bool

BLE 适配器的状态。

address :Address

BLE 适配器的 MAC 地址。

name :str

连接后使用的 BLE 适配器的名称。名称是“CIRCUITPY”+ 的最后四位十六进制数字adapter.address, t以便于区分多个 CircuitPython 板。

advertising :bool

当适配器当前正在做广告时为真。(只读)

connected :bool

当适配器连接到另一台设备时为真,而不管是谁发起了连接。(只读)

connections :Tuple[Connection]

活动连接的元组,包括通过 _bleio.Adapter.connect(). (只读)

start_advertising(self, data: _typing.ReadableBuffer, *, scan_response: Optional[_typing.ReadableBuffer] = None, connectable: bool = True, anonymous: bool = False, timeout: int = 0, interval: float = 0.1, tx_power: int = 0, directed_to: Optional[Address] = None)None

开始广告直到stop_advertising被调用或如果可连接,另一个设备连接到我们。

警告

如果数据长于 31 字节,则这将自动作为扩展广告进行广告,旧的 BLE 4.x 客户端将无法扫描。

笔记

如果设置 anonymous=True, 则必须指定超时。如果未指定超时,则将自动选择允许的最大超时。

Parameters
  • data (ReadableBuffer) – 广告数据包字节

  • scan_response (ReadableBuffer) – 扫描响应数据包字节。None 如果不需要扫描响应。

  • 可连接 (bool) –如果True允许其他设备连接到此外围设备。

  • 匿名 (bool) – 如果True 此设备的 MAC 地址在广告之前是随机的。

  • timeout (int) – 如果设置,我们将只广告这么多秒。零表示没有超时。

  • interval (float) – 广告间隔,以秒为单位

  • int (tx_power) – 以 dBm 为单位广播时的发射机功率

  • Address (directed_to) – 直接向对等点做广告

stop_advertising(self)None

停止发送广告数据包。

start_scan(self, prefixes: _typing.ReadableBuffer = b'', *, buffer_size: int = 512, extended: bool = False, timeout: Optional[float] = None, interval: float = 0.1, window: float = 0.1, minimum_rssi: int = - 80, active: bool = True)Iterable[ScanEntry]

启动 BLE 扫描并返回结果迭代器。广告和扫描响应被分别过滤和返回。

Parameters
  • prefixes (ReadableBuffer) – 用于过滤广告数据包的字节字符串前缀序列。没有匹配前缀之一的广告结构的数据包将被忽略。格式为长度(n)一个字节和前缀n个字节,并且可以重复。

  • buffer_size (int) – 要缓冲的最大广告字节数。

  • extended (bool) – 为 True 时,支持扩展广告数据包。设置时建议增加 buffer_size。

  • timeout (float) – 以秒为单位的扫描超时。如果 None 或零,将扫描直到stop_scan被调用。

  • interval (float) – 两个连续扫描窗口开始之间的间隔(以秒为单位)必须在 0.0025 - 40.959375 秒的范围内。

  • window (float) – 扫描单个 BLE 通道的持续时间(以秒为单位)。窗口必须 <= 间隔。

  • minimum_rssi (int) – 要返回的条目的最小 rssi。

  • active (bool) – 检索可扫描广告的扫描响应。

Returns

一个可迭代的_bleio.ScanEntry 对象

返回类型

可迭代的

stop_scan(self)None

停止当前扫描。

connect(self, address: Address, *, timeout: float)Connection

尝试连接到具有给定地址的设备。

Parameters
  • address (Address) – 要连接的外设的地址

  • timeout (float/int) – 尝试连接超时秒。

erase_bonding(self)None

擦除存储在闪存中的所有绑定信息。

class _bleio.Address(address: _typing.ReadableBuffer, address_type: int)

封装BLE设备的地址。

创建一个封装地址值的新地址对象。值本身可以是以下之一:

Parameters
address_bytes :bytes

构成设备地址的字节(只读)。

请注意, bytes 返回的对象是小端顺序:最低有效字节是 address_bytes[0]。因此,如果您打印原始bytes 对象,地址将被颠倒。如果您str()Attribute对象本身上打印或使用,地址将按预期顺序打印。例如:

>>> import _bleio
>>> _bleio.adapter.address
<Address c8:1d:f5:ed:a8:35>
>>> _bleio.adapter.address.address_bytes
b'5\xa8\xed\xf5\x1d\xc8'
type :int

地址类型(只读)。

一个整数值的: PUBLIC, RANDOM_STATIC, RANDOM_PRIVATE_RESOLVABLE, 或RANDOM_PRIVATE_NON_RESOLVABLE

PUBLIC :int

一个公开的地址,带有公司 ID(高 24 位)和公司分配的部分(低 24 位)。

RANDOM_STATIC :int

不经常更改的随机生成的地址。它可能永远不会改变,或者可能会在电源循环后改变。

RANDOM_PRIVATE_RESOLVABLE :int

当对等方知道其他设备的秘密身份解析密钥 (IRK) 时可用的地址。

RANDOM_PRIVATE_NON_RESOLVABLE :int

随机生成的地址,每次连接都会改变。

__eq__(self, other: object)bool

如果两个 Address 对象的地址和地址类型相等,则它们相等。

__hash__(self)int

返回地址数据的哈希值。

class _bleio.Attribute

与所有 BLE 属性相关的定义:特性、描述符等。

Attribute理论上是 CharacteristicDescriptor的超类, ,但没有定义为这些类的 Python 超类。

您不能创建 的实例 Attribute.

NO_ACCESS :int

安全模式:不允许访问

OPEN :int

security_mode: 无安全性(链接未加密)

ENCRYPT_NO_MITM :int

security_mode: 未经身份验证的加密,没有中间人保护

ENCRYPT_WITH_MITM :int

security_mode: 经过身份验证的加密,具有中间人保护

LESC_ENCRYPT_WITH_MITM :int

security_mode: LESC 加密,具有中间人保护

SIGNED_NO_MITM :int

security_mode: 未经身份验证的数据签名,没有中间人保护

SIGNED_WITH_MITM :int

security_mode: 经过身份验证的数据签名,没有中间人保护

class _bleio.Characteristic

存储有关 BLE 服务特性的信息并允许读取和写入特性值。

特征没有常规的构造函数。可以通过调用创建新的本地特性并将其附加到服务add_to_service()。远程特征对象是Connection.discover_remote_services() 作为远程服务的一部分创建的。

properties :int

表示设置了哪些属性的 int 位掩码,指定为这些可能值的按位或运算。 BROADCAST, INDICATE, NOTIFY, READ, WRITE, WRITE_NO_RESPONSE.

uuid :Optional[UUID]

此特性的 UUID。(只读)

将是 None如果这种特征的128位UUID是不知道。

value :bytearray

这个特性的价值。

max_length :int

此特征的最大长度。

descriptors :Descriptor

Descriptor与此特征相关的对象元组。(只读)

service :Service

此特性所属的服务。

BROADCAST :int

属性:允许在广告包中

INDICATE :int

属性:服务器将在设置值时向客户端指示并等待响应

NOTIFY :int

属性:服务器会在设置值时通知客户端

READ :int

属性:客户端可以读取这个特性

WRITE :int

属性:客户端可以写这个特性;回复将被发回

WRITE_NO_RESPONSE :int

属性:客户端可以写这个特性;不会回复任何回复

add_to_service(self, service: Service, uuid: UUID, *, properties: int = 0, read_perm: int = Attribute.OPEN, write_perm: int = Attribute.OPEN, max_length: int = 20, fixed_length: bool = False, initial_value: Optional[_typing.ReadableBuffer] = None, user_description: Optional[str] = None)Characteristic

创建一个新的 Characteristic 对象,并将其添加到此服务中。

Parameters
Returns

新特性。

set_cccd(self, *, notify: bool = False, indicate: bool = False)None

设置远程特性的 CCCD 以启用或禁用通知和指示。

Parameters
  • notify (bool) – 如果 Characteristic 应接收远程写入通知,则为 True

  • indicate (float) – 如果 Characteristic 应接收远程写入的指示,则为 True

class _bleio.CharacteristicBuffer(characteristic: Characteristic, *, timeout: int = 1, buffer_size: int = 64)

在 FIFO 缓冲区中累积特性的传入值。

监视给定的特征。每次向特性写入新值时,都会将新写入的字节添加到 FIFO 缓冲区。

Parameters
  • characteristic (Characteristic) – 要监控的特性。它可能是由外围服务提供的本地特征,或者是中央已连接到的远程服务中的远程特征。

  • timeout (int) – 等待第一个字符和后续字符之间的超时时间(以秒为单位)。

  • buffer_size (int) – 存储来自客户端的传入数据的环形缓冲区的大小。必须 >= 1。

in_waiting :int

输入缓冲区中可供读取的字节数

read(self, nbytes: Optional[int] = None)Optional[bytes]

读取字符。如果nbytes指定,则最多读取那么多字节。否则,读取到达的所有内容,直到连接超时。强烈建议提供预期的字节数,因为它会更快。

Returns

数据读取

Return type

bytesNone

readinto(self, buf: _typing.WriteableBuffer)Optional[int]

将字节读入 buf. 最多读取len(buf) 字节。

Returns

读取和存储的字节数 buf

Return type

intNone(非阻塞错误)

readline(self)bytes

读取一行,以换行符结尾。

Returns

读取的行

Return type

intNone

reset_input_buffer(self)None

丢弃输入缓冲区中的任何未读字符。

deinit(self)None

永久禁用。

class _bleio.Connection

到另一台设备的 BLE 连接。用于发现其他设备上的服务并与之交互。

用法:

import _bleio

my_entry = None
for entry in _bleio.adapter.scan(2.5):
    if entry.name is not None and entry.name == 'InterestingPeripheral':
        my_entry = entry
        break

if not my_entry:
    raise Exception("'InterestingPeripheral' not found")

connection = _bleio.adapter.connect(my_entry.address, timeout=10)

不能直接建立连接。相反,要启动连接,请使用Adapter.connect当另一个设备发起连接时,也可以建立连接。要使用由对等方创建的连接,请阅读该 Adapter.connections属性。

connected :bool

如果连接到远程对等方,则为真。

paired :bool

如果与远程对等方配对,则为真。

connection_interval :float

传输之间的时间(以毫秒为单位)。将是 1.25ms 的倍数。较低的数字会提高速度并减少延迟,但会增加功耗。

设置 connection_interval 时,对等方可能会拒绝新的时间间隔, connection_interval然后将保持不变。

Apple 有额外的指导方针,规定应该是 15 毫秒的倍数,除非 HID 可用。当 HID 可用时,Apple 设备可能接受 11.25 毫秒的间隔。

max_packet_length :int

在单次传输中可以发送的最大数据字节数,不包括开销字节。

这是通知中可以发送的最大字节数,必须在单个数据包中发送。但是对于一个普通的特征读或者写,可能会分多个包发送,所以这个限制不适用。

disconnect(self)None

断开与远程外围设备的连接。如果已经断开连接,则不执行任何操作。

pair(self, *, bond: bool = True)None

与对等方配对以提高安全性。

discover_remote_services(self, service_uuids_whitelist: Optional[Iterable[UUID]] = None)Tuple[Service, Ellipsis]

对所有服务或给定服务 UUIDS 进行 BLE 发现,以找到它们的句柄和特征,并返回发现的服务。 Connection.connected 必须是 True。

Parameters

service_uuids_whitelist (iterable) –

an iterable of UUID 您要使用的外围设备提供的服务的对象的可迭代对象。

外设可能提供更多服务,但未列出的服务将被忽略且不会返回。

如果 service_uuids_whitelist 为 None,则所有服务都将进行发现,这可能会很慢。

如果服务 UUID 是 128 位,或其特征 UUID 是 128 位,您必须已经UUID为该 UUID创建了一个对象,以便发现服务或特征。创建 UUID 会导致注册 UUID 以供使用。(未来可能会取消此限制。)

Returns

_bleio.Service 远程外围设备提供的对象元组。

class _bleio.Descriptor

存储有关 BLE 描述符的信息。

描述符附加到 BLE 特性并提供有关特性的上下文信息。

描述符没有常规的构造函数。可以通过调用创建新的本地描述符并将其附加到特征add_to_characteristic()。远程描述符对象是由Connection.discover_remote_services()发现的远程服务中的远程特征的一部分创建的。

uuid :UUID

描述符 uuid。(只读)

characteristic :Characteristic

此描述符所属的特征。

value :bytearray

此描述符的值。

classmethod add_to_characteristic(cls, characteristic: Characteristic, uuid: UUID, *, read_perm: int = Attribute.OPEN, write_perm: int = Attribute.OPEN, max_length: int = 20, fixed_length: bool = False, initial_value: _typing.ReadableBuffer = b'')Descriptor

创建一个新的 Descriptor 对象,并将其添加到此服务中。

Parameters
Returns

新的描述符。

class _bleio.PacketBuffer(characteristic: Characteristic, *, buffer_size: int, max_packet_size: Optional[int] = None)

在 FIFO 缓冲区中累积特性的传入数据包,并促进数据包感知传出写入。数据包的大小是特征长度或最大传输单元 (MTU) 减去开销,以较小者为准。MTU值可以改变,因此检查incoming_packet_lengthoutgoing_packet_length 创建一个缓冲区来存储数据之前。

当我们是服务器时,除了第一个订阅通知的连接之外,我们会忽略所有连接。

监视给定的特征。每次向特性写入新值时,都会将新写入的字节添加到 FIFO 缓冲区。

监视给定的特征。每次向特性写入新值时,都会将新写入的字节数据包添加到 FIFO 缓冲区。

Parameters
  • characteristic (Characteristic) – 要监控的特性。它可能是由外围服务提供的本地特征,或者是中央已连接到的远程服务中的远程特征。

  • buffer_size (int) – 环形缓冲区的大小(以特征最大长度的数据包为单位),用于存储来自对等方的传入数据包。

  • max_packet_size (int) – 数据包的最大大小。覆盖特征中的值。(远程特征可能没有正确的长度。)

incoming_packet_length :int

我们正在读取的数据包的最大长度(以字节为单位)。

outgoing_packet_length :int

我们正在写入的数据包的最大长度(以字节为单位)。

readinto(self, buf: _typing.WriteableBuffer)int

将单个 BLE 数据包读入buf. 如果下一个数据包比给定的缓冲区长,则引发异常。使用 incoming_packet_length 读取单个数据包的最大长度。

Returns

读取和存储的字节数buf

返回类型

整数

write(self, data: _typing.ReadableBuffer, *, header: Optional[bytes] = None)int

将数据中的所有字节写入同一个传出数据包。当挂起的数据包当前为空时,报头中的字节包含在数据之前。

在发送数据之前这不会阻塞。它只会阻塞直到数据挂起。

Returns

写入的字节数。当数据包为空时,可能包括报头字节。

返回类型

整数

deinit(self)None

永久禁用。

class _bleio.ScanEntry

封装有关在扫描期间收到的设备的信息。它可以是广告或扫描响应数据。此对象只能由 a 创建_bleio.ScanResults:它没有用户可见的构造函数。

不能直接实例化。使用_bleio.Adapter.start_scan.

address :Address

设备的地址(只读),类型为_bleio.Address.

advertisement_bytes :bytes

数据包中存在的所有广告数据,作为 bytes 对象返回。(只读)

rssi :int

扫描时设备的信号强度,以整数 dBm 为单位。(只读)

connectable :bool

如果设备可以连接到,则为真。(只读)

scan_response :bool

如果条目是扫描响应,则为真。(只读)

matches(self, prefixes: ScanEntry, *, match_all: bool = True)bool

如果 ScanEntry 在match_all为 True时匹配所有前缀,则返回 True。这比接受与任何前缀匹配的任何广告的扫描过滤更严格,其中match_all 为 False。

all 也适用于 match_all 但将在 CircuitPython 8 中删除。

class _bleio.ScanResults

迭代扫描时收到的广告数据。此对象始终由 a 创建_bleio.Adapter:它没有用户可见的构造函数。

不能直接实例化。使用_bleio.Adapter.start_scan.

__iter__(self)Iterator[ScanEntry]

返回自身,因为它是迭代器。

__next__(self)ScanEntry

返回下一个_bleio.ScanEntry。如果没有收到并且扫描仍处于活动状态,则阻止。 StopIteration 如果扫描完成且没有其他可用结果,则引发。

class _bleio.Service(uuid: UUID, *, secondary: bool = False)

存储有关 BLE 服务及其特征的信息。

创建由指定的 UUID 标识的新服务。它可以被所有连接访问。这称为服务服务器。客户服务对象是通过 Connection.discover_remote_services.

要将服务标记为次要服务,请将其True 作为 secondary.

Parameters
  • uuid (UUID) – 服务的 uuid

  • secondary (bool) – 如果服务是次要服务

Returns

新服务

characteristics :Tuple[Characteristic, Ellipsis]

Characteristic 指定此服务提供的特征的元组。(只读)

remote :bool

如果这是远程设备提供的服务,则为真。(只读)

secondary :bool

如果这是次要服务,则为真。(只读)

uuid :Optional[UUID]

此服务的 UUID。(只读)

None如果该服务的128-bit的UUID是不知道。

class _bleio.UUID(value: Union[int, _typing.ReadableBuffer, str])

16 位或 128 位 UUID。可用于服务、特征、描述符等。

创建一个新的 UUID 或 UUID 对象来封装 uuid 值。该值可以是以下之一:

  • int0 到 0xFFFF 范围内的值(蓝牙 SIG 16 位 UUID)

  • 按小端顺序(128 位 UUID)的 16 字节缓冲区对象(字节数组、字节)

  • 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' 形式的一串十六进制数字

创建 128 位 UUID 会将 UUID 注册到板载 BLE 软件,并提供一个临时的 16 位 UUID,可用于代替完整的 128 位 UUID。

参数

value (int, ReadableBufferstr) – 要封装的 uuid 值

uuid16 :int

UUID 的 16 位部分。(只读)

Type

整数

uuid128 :bytes

如果这是 16 位 UUID,则 UUID 的 128 位值引发 AttributeError。(只读)

Type

字节

size :int

128 如果此 UUID 表示 128 位供应商特定的 UUID。16 如果此 UUID 表示 16 位蓝牙 SIG 分配的 UUID。(只读)当前不支持 32 位 UUID。

Type

int

pack_into(self, buffer: _typing.WriteableBuffer, offset: int = 0)None

在给定的偏移量处将 UUID 打包到给定的缓冲区中。

__eq__(self, other: object)bool

如果两个 UUID 对象的值匹配并且它们都是 128 位或都是 16 位,则它们相等。