Python蓝牙开发(一)——跨平台蓝牙库bleak
创始人
2025-01-16 08:04:46
0

前期开发中尝试在树莓派、windows平台使用pybluez库遇到一些问题(广播无法被检索等)。另外,由于该库作者已经没有继续维护,所以换用bleak库进行尝试。树莓派实现NI蓝牙OOB

1、关于bleak库

1.1 简介

Bleak是一款GATT客户端软件,能够连接到BLE GATT服务器设备。其旨在提供一个异步、跨平台的Python API,用于连接和与传感器等进行通信。

bleak项目github地址

特性:

  • 支持Windows 10,version 16299或更高版本;
  • 支持Linux,bluez > = 5.43,可以通过,$bluetoothd -v来查看相应版本;
  • OS X/macOS支持Core Bluetooth API,至少OS X 10.11版本以上;
  • Android后端兼容python-for-android

Bleak支持读、写、以及GATT服务的通知,以及相关函数用于发现BLE设备。

1.2 安装bleak库

  • windows平台,直接可以使用pip install bleak安装即可。

  • 在树莓派上进行测试,可以正常安装。sudo pip3 install bleak

    树莓派硬件平台:树莓派 3B
    系统:ubuntu-22.04.4-preinstalled-desktop-arm64

1.3 bleak库使用

BleakScanner类,用于搜索周边蓝牙设备。

import asyncio from bleak import BleakScanner  async def main():     devices = await BleakScanner.discover()     for d in devices:         print(d)  asyncio.run(main()) 

BleakClient类,用于连接蓝牙设备,读、写、接收GATT服务的通知。

import asyncio from bleak import BleakClient  address = "24:71:89:cc:09:05" 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("Model Number: {0}".format("".join(map(chr, model_number))))  asyncio.run(main(address)) 

1.4 搜索NUS并连接

NUS(Nordic Semiconductor(nRF)UART Service),Nordic公司的蓝牙串口服务,相应示例代码如下:

UART_SERVICE_UUID = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" UART_RX_CHAR_UUID = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" UART_TX_CHAR_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"  def match_nus_uuid(device: BLEDevice, adv: AdvertisementData): 	if UART_SERVICE_UUID.lower() in adv.service_uuids: 		return True 	return False  # 搜索设备, 查看是否匹配NUS UUID,找到后可尝试建立连接,进行读写。 device = await BleakScanner.find_device_by_filter(match_nus_uuid)  # 创建BleakClient客户端,连接后进行串口操作 async with BleakClient(device, disconnected_callback=handle_disconnect) as client: 	await client.start_notify(UART_TX_CHAR_UUID, handle_rx)    print("Connected, start typing and press ENTER...")  	loop = asyncio.get_running_loop()    nus = client.services.get_service(UART_SERVICE_UUID)    # 接收蓝牙串口信息    rx_char = nus.get_characteristic(UART_RX_CHAR_UUID)   

总结

bleak库能够跨平台使用,Linux(树莓派)、Windows平台均可以正常使用。当用于扫描蓝牙服务、作为Client连接操作较为方便,基于Python,开发相对也比较简单。但是其缺陷在于不支持作为GATT Server,不支持一些广播服务,对于一些应用场景,如实现蓝牙串口服务来说无法支持,导致应用场景限制,但整体还算一个不错的跨平台的项目。

相关内容

热门资讯

透视透视!阿拉游戏中心辅助教程... 透视透视!阿拉游戏中心辅助教程,雀友圈斗地主辅助器(透视)开挂辅助挂切实教程,透视透视!阿拉游戏中心...
三分钟开挂"情怀蒲仙... 三分钟开挂"情怀蒲仙辅助"本来有开挂透视辅助工具(有挂辅助);小薇(透视辅助)致您一封信;亲爱情怀蒲...
关于辅助!如何判断wpk辅助软... 关于辅助!如何判断wpk辅助软件的真假,小闲川南宜宾辅助,开挂(透视)辅助下载(了解有挂);1、完成...
透视透视!四川长牌辅助,新悠悠... 透视透视!四川长牌辅助,新悠悠辅助(透视)开挂辅助工具可靠教程;透视透视!四川长牌辅助,新悠悠辅助(...
8分钟开挂"aapo... 8分钟开挂"aapoker辅助插件工具"最初有透视开挂辅助挂(的确有挂);是一项软件透视开挂的竞技活...
详细开挂!德州局透视脚本免费版... 详细开挂!德州局透视脚本免费版下载手机版,三哥玩摆头可以控制,开挂(透视)辅助软件(有挂神器);三哥...
透视脚本!桃乐甘肃麻将辅助器,... 透视脚本!桃乐甘肃麻将辅助器,微信小程序游戏破解器(透视)开挂辅助插件可靠教程;透视脚本!桃乐甘肃麻...
第1分钟开挂"创思维... 第1分钟开挂"创思维正版辅助器下载"从前有开挂辅助软件(有挂透视);最新版2026是一款经典耐玩的益...
教会辅助!wepoker插件程... 教会辅助!wepoker插件程序激活码,八闽状元郎破解版辅助,开挂(透视)辅助工具(有挂教程);超受...
透视新版!新鸿狐软件下载,微乐... 透视新版!新鸿狐软件下载,微乐小程序微乐房间怎么开挂(透视)开挂辅助器黑科技教程;透视新版!新鸿狐软...