如何使用Bleak实现蓝牙设备配对?附扫描设备代码
基于Bleak实现蓝牙设备配对
蓝牙配对属于系统层面的操作,Bleak通过BleakClient提供了触发配对的接口,以下是在你现有扫描代码基础上添加配对功能的实现方案:
核心修改点
- 新增
BleakClient用于连接并触发设备配对 - 为扫描到的每个设备添加配对按钮
- 新增状态区域展示配对结果
修改后的完整代码
from bleak import BleakScanner, BleakClient import flet as ft import asyncio async def scan_devices(device_list, status_text, page): device_list.controls.clear() device_list.controls.append(ft.Text("Scanning for Bluetooth devices...")) status_text.value = "" page.update() devices = await BleakScanner.discover() device_list.controls.clear() if devices: for device in devices: # 为每个设备创建条目:名称地址信息 + 配对按钮 device_row = ft.Row( controls=[ ft.Text(f"Name: {device.name or 'Unnamed'}, Address: {device.address}, RSSI: {device.rssi}"), ft.ElevatedButton( text="Pair", on_click=lambda e, addr=device.address: asyncio.run( pair_device(addr, status_text, page) ) ) ], alignment=ft.MainAxisAlignment.SPACE_BETWEEN, width=page.window_width - 40 ) device_list.controls.append(device_row) else: device_list.controls.append(ft.Text("No devices found.")) page.update() async def pair_device(device_address, status_text, page): status_text.value = f"Attempting to pair with {device_address}..." page.update() try: # 连接设备并触发配对 async with BleakClient(device_address) as client: # 调用pair方法发起配对,不同平台会触发系统配对流程 paired = await client.pair() if paired: status_text.value = f"Successfully paired with {device_address}!" else: status_text.value = f"Failed to pair with {device_address}." except Exception as e: status_text.value = f"Pairing error: {str(e)}" page.update() def main(page: ft.Page): page.title = "Bluetooth Scanner & Pairer" page.horizontal_alignment = ft.CrossAxisAlignment.CENTER page.vertical_alignment = ft.MainAxisAlignment.CENTER page.scroll = ft.ScrollMode.AUTO page.padding = 20 device_list = ft.Column(spacing=10) status_text = ft.Text(color=ft.colors.BLUE_700, size=14) def on_scan_click(e): asyncio.run(scan_devices(device_list, status_text, page)) scan_button = ft.ElevatedButton(text="Scan for Devices", on_click=on_scan_click) page.controls.extend([scan_button, device_list, status_text]) page.update() ft.app(target=main)
关键说明
- 配对流程:调用
BleakClient.pair()后,系统会弹出配对提示(比如Windows的配对窗口、macOS的权限弹窗),部分设备需要输入PIN码(通常设备说明书会标注,或为0000/1234) - 平台差异:
- Windows:依赖系统蓝牙服务,配对后设备会出现在系统蓝牙列表中
- Linux:可能需要
bluetoothctl权限,确保用户有蓝牙操作权限 - macOS:配对前需要允许应用访问蓝牙权限
- 异常处理:代码中捕获了配对过程中的异常,比如设备不可达、配对超时等情况,会在状态区域显示错误信息
内容的提问来源于stack exchange,提问作者Subzee
相关产品推荐
相关产品推荐

