BTZen - 异步访问蓝牙设备的库
项目描述
BTZen 是一个使用 Python 语言异步访问蓝牙设备的库。它通过复杂的 D-Bus Bluez 接口提供简单的 API。
特征
BTZen 的主要特点是
使用 Python 异步协程并行连接和访问多个蓝牙设备。
GATT 通知接口集成到库的主要 API 中。
自动重新连接到设备。
访问实现 Stollmann (Telit) 协议的串行设备。
支持不完全遵循蓝牙规范的设备,如 SensorTag (CC2650STK) 或 Thingy:52。
支持设备的 Bluez 管理接口,即电池电量。
允许轻松实现对新设备的支持。
该库可与任何蓝牙智能设备一起使用。它经过测试
SensorTag (CC2650STK) 读取温度、压力、湿度、光线、加速度计数据和按钮状态。
Thingy:52读取温度、压力、湿度、光照数据和按键状态。
小米智能秤读取体重数据。
OSTC 潜水电脑使用 Stollmann (Telit) 协议读取串行设备数据。
该库使用默认的asyncio事件循环及其替代品uvloop进行了测试。使用 uvloop 可以提高库的性能。
scripts目录中的脚本演示了从各种设备读取数据。
注意:目前不支持 SensorTag (CC2541DK) 的第一个版本。如果您仍然拥有该设备并希望它得到支持,请提出问题。
API 更改
请注意,从 0.6.0 版开始,API 发生了变化。好处是
使用单一 API 支持不同品牌的设备
为新设备实现功能要容易得多
关闭BTZen连接会话更可靠
如果需要 BTZen 0.6.0 之前的版本,则在项目的安装要求中使用适当的版本控制。
文档
目前缺少该项目的文档。一些有用的提示可以在这个 README 文件和文件中找到
安装
使用pip安装BTZen库(需要先安装Cython),例如:
pip install --user cython pip install --user btzen
BTZen 使用 Bluez 适配器接口的实验性 API 连接蓝牙设备。bluetoothd守护进程必须在实验选项开启的情况下启动。这可以通过 在/etc/bluez/main.conf文件中将Experimental设置为true来永久实现。
在/etc/bluetooth/main.conf 中将AutoEnable选项更改为 true以自动启动蓝牙控制器。否则,可能需要使用bluetoothctl工具手动打开控制器。BTZen 库不执行此操作。
连接管理
BTZen 使用Bluez 适配器接口的ConnectDevice方法来发现和连接蓝牙设备。需要知道设备的 MAC 地址才能进行连接。
BTZen 连接管理器允许在不重新启动应用程序的情况下连接和断开蓝牙设备。如果应用程序正在从多个蓝牙设备读取数据,则应用程序可以继续工作,例如,传感器需要更换电池。
请注意
尝试使用 BTZen 库连接到设备时,不要使用其他程序开始扫描,即bluetoothctl
如果设备与外部程序断开连接,则必须使用外部程序重新连接
获取 MAC 地址
如果蓝牙设备 MAC 地址未知
启动bluetoothctl。
开始扫描。
保存发现的 MAC 地址。
或者,使用bluetoothctl 实用程序的remove命令删除设备。
使用发现的 MAC 地址启动基于 BTZen 的应用程序。
表现
该库使程序员能够在不使用线程的情况下与多个设备并行通信。这避免了线程的上下文切换并最小化了内存需求,这使得 BTZen 比其他类似的库更高效。为了尽可能快地保持库,Cython 用于访问 Bluez D-Bus API。BTZen 可以与uvloop一起使用,以进一步提高应用程序的性能。
支持 GATT 通知接口允许高效使用蓝牙设备。例如,来自加速度计等传感器的数据只能在传感器唤醒时读取,并在传感器移动后传输数据。这限制了传输的数据量并避免耗尽传感器的电池,如果定期、短时间间隔轮询数据,就会发生这种情况。
要求
BTZen 库需要以下软件组件
蟒蛇 3.9
蓝兹 5.64
sd-bus(systemd的一部分)
赛通 0.29
执照
BTZen 库根据 GPL 许可证第 3 版的条款获得许可,有关详细信息,请参阅 COPYING文件。