Bleak 实战:用 Python 三分钟读取第一个蓝牙低功耗设备数据
Bleak 实战用 Python 三分钟读取第一个蓝牙低功耗设备数据【免费下载链接】bleakA cross platform Bluetooth Low Energy Client for Python using asyncio项目地址: https://gitcode.com/gh_mirrors/bl/bleak你新买了一块支持蓝牙的温湿度传感器或者一只带心率的运动手环兴冲冲地打开编辑器准备用 Python 把数据抓下来。结果一查协议文档满屏的 GATT、UUID、特征值、句柄扑面而来配套示例还全是 C 语言和 ObjC——那一刻你是不是又默默合上了电脑别急这篇文章要介绍的 Bleak就是专门把这条陡峭的学习曲线铲平的 Python 蓝牙低功耗BLE客户端库。它到底是什么又适合谁Bleak 是 Bluetooth Low Energy platform Agnostic Klient 的缩写翻译过来就是与平台无关的 BLE 客户端。它基于 asyncio 构建让你能用纯 Python、用几行 await去连接附近的 BLE 设备、读写 GATT 特征值、订阅通知。适合的场景很典型物联网原型开发、传感器数据采集、智能家居设备调试以及任何想快速和蓝牙硬件对话的 Python 项目。如果你只是想在树莓派上读一个传感器的值而不是花两周啃完蓝牙协议栈Bleak 就是为你准备的。它凭什么值得你选一套代码四个系统通吃这是 Bleak 最值钱的一点。原生开发时Linux 上你要面对 BlueZ 的 D-Bus 接口macOS 上得写 CoreBluetooth 的委托方法Windows 上又是一套 WinRT 的异步模型——三个平台三种语法换一次系统就要重写一遍。Bleak 把这些差异全部封装在bleak/backends/下bluezdbus、corebluetooth、winrt、p4android 四个后端各司其职对外暴露的永远是同一套接口。你写的业务代码不用关心底层是 D-Bus 还是 CoreBluetooth同一份脚本在 Windows、macOS、Linux 上都能跑。异步模型天生适合 BLEBLE 设备的数据是流式的传感器不停推送、通知频繁触发。用同步写法去阻塞等待程序一卡就是好几百毫秒多个设备同时接入时更是一场灾难。Bleak 基于 asyncio 设计所有操作都是非阻塞的协程天然支持并发处理多个通知、多台设备代码写起来却和顺序执行一样直观。上手成本几乎为零全库的核心就两个类BleakScanner负责扫描发现BleakClient负责连接通信。再加一个async with上下文管理器帮你自动处理连接和断开异常时也不会把句柄泄漏在系统里。没有复杂的配置没有继承关系要维护。三步跑通你的第一行结果第一步安装和装任何 Python 包一样简单$ pip install bleak想尝鲜开发分支的话也可以直接安装 develop 分支版本。在 iOS 的 Pythonista 上则记得用pip install bleak[pythonista]。第二步扫描找到你的设备先看看周围有哪些 BLE 设备在广播。BleakScanner.discover()会扫描几秒并返回设备列表import asyncio from bleak import BleakScanner async def main(): devices await BleakScanner.discover() for d in devices: print(d) asyncio.run(main())每台设备会打印出名称、MAC 地址和广播数据。你也可以用find_device_by_name()或find_device_by_address()精准定位某台设备这在设备很多时非常有用。第三步连接并读取数据拿到设备的地址后连接和读取只需一个上下文管理器。以读设备型号为例——型号这个特征值是 BLE 标准定义的UUID 固定为2A24import asyncio from bleak import BleakClient MODEL_NBR_UUID 2A24 async def main(address): async with BleakClient(address) as client: model_number await client.read_gatt_char(MODEL_NBR_UUID) print(fModel Number: {model_number.decode()}) asyncio.run(main(24:71:89:cc:09:05))read_gatt_char返回的是字节串解码后就是设备返回的型号文本。到这里你已经完成了扫描 → 连接 → 读取的最小闭环整个过程不到二十行代码。新手最容易踩的三个坑坑一反复调用 asyncio.run()这是出现频率最高的错误。Bleak 要求整个程序共享同一个事件循环而每次asyncio.run()都会新建一个循环用完即毁。分段调用会导致后续连接报错或行为诡异。错误写法device asyncio.run(scan()) asyncio.run(connect(device))**正确写法**把流程串进一个协程只调用一次async def main(): device await scan() await connect(device) asyncio.run(main())坑二把脚本命名为 bleak.py这点写在 README 的开头加粗警告过千万别把你的脚本命名成bleak.py否则会触发循环导入错误。因为 Python 会优先在当前目录找到你这份山寨 bleak而不是真正的库。随便起个别的名字比如my_ble.py问题立刻消失。坑三树莓派上蓝牙连不上在 Raspberry Pi 这类板子上如果 Wi-Fi 和蓝牙同时开启内置无线模块的相互干扰可能导致连接时断时续。快速验证方法是用sudo rfkill block wlan临时关掉 Wi-Fi若问题消失就该考虑外接一个 USB 蓝牙适配器了。另外如果你在开发自己的 BLE 设备并频繁改动服务结构操作系统可能缓存旧的服务信息。Linux 上可用bluetoothctl -- remove XX:XX:XX:XX:XX:XX清除更早的 BlueZ 版本还需手动删掉/var/lib/bluetooth/下的 GATT 缓存文件。进阶玩法让设备主动给你发消息读数据是你问它答而很多传感器是主动汇报的——比如心率带每秒钟推送一次数据。这时就该用通知Notify机制了def handler(characteristic, data): print(f{characteristic.description}: {data}) async with BleakClient(device) as client: await client.start_notify(UUID, handler) await asyncio.sleep(5.0) await client.stop_notify(UUID)start_notify订阅某个特征值的通知后设备每次推送数据都会调用你的回调函数。配合asyncio的队列机制你还可以把数据暂存起来异步处理避免回调阻塞。完整的可运行示例见 examples/enable_notifications.py。如果你需要同时维护多台设备原理也类似为每台设备创建一个BleakClient协程在同一个事件循环里并发运行即可参考 examples/two_devices.py。各平台的针对性小贴士macOS首次运行会弹出蓝牙权限请求请务必允许。若之后发现扫描不到设备去系统设置 → 隐私与安全性 → 蓝牙里确认你的终端应用Terminal、iTerm 等已被勾选授权如下图所示Windows普通读写无需特殊权限但如果你要做蓝牙数据包级别的抓包调试必须右键以管理员身份运行命令提示符否则部分操作会因权限不足而失败Linux要求系统装有 BlueZ 5.55 及以上版本。可以用bluetoothctl排查适配器状态遇到权限问题记得给用户加上bluetooth组。去哪里继续深入项目仓库里已经备好了不少现成资源完整的 API 说明在 docs/api/ 目录客户端、扫描器、参数文档齐全examples/ 下躺着大量可直接运行的示例从服务探索、UART 通信到 SensorTag 连接应有尽有遇到怪问题时docs/troubleshooting.rst 里汇总了社区常见问题的处理办法。想从源码层面理解后端的实现差异可以翻一翻bleak/backends/下的四个后端目录。现在轮到你动手了从pip install bleak到读出手环的型号整个过程可能不到十分钟。找一台身边的蓝牙设备把上面的扫描代码跑起来你会发现自己离蓝牙开发其实只差一个 Bleak 的距离。【免费下载链接】bleakA cross platform Bluetooth Low Energy Client for Python using asyncio项目地址: https://gitcode.com/gh_mirrors/bl/bleak创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

OpenClaw环境变量配置全攻略:从API Key获取到多平台部署

OpenClaw环境变量配置全攻略:从API Key获取到多平台部署

1. 项目概述:从零到一搞定OpenClaw环境变量 最近在折腾OpenClaw,想把DeepSeek或者阿里云的模型接进去,结果第一步就卡在了环境变量上。这玩意儿看着简单,不就是填几个Key吗?但真操作起来,各种报错能把人整懵…

2026/10/26 17:27:10 阅读更多 →
基于OpenClaw构建AI Agent军团,实现多平台自媒体全自动运营

基于OpenClaw构建AI Agent军团,实现多平台自媒体全自动运营

1. 从“手动肝”到“自动跑”:一个自媒体人的效率革命如果你和我一样,曾经同时运营超过10个自媒体平台,那你一定对那种“不是在写稿,就是在发稿”的窒息感深有体会。每天醒来,面对的是十几个待更新的后台,从…

2026/10/27 16:22:13 阅读更多 →
Win11重装系统格式化硬盘全攻略:从原理到实战解决系统顽疾

Win11重装系统格式化硬盘全攻略:从原理到实战解决系统顽疾

1. 项目概述:为什么重装Win11格式化硬盘是“大扫除”的第一步最近帮朋友处理一台用了四五年的旧电脑,开机慢、软件卡顿、C盘常年飘红,典型的“电子垃圾”症状。他问我有没有什么办法能让它“起死回生”,我的回答很直接&#xff1a…

2026/10/27 7:28:41 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →