找回密码
 会员注册
查看: 28|回复: 0

Python蓝牙开发(一)——跨平台蓝牙库bleak

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71377
发表于 2024-9-9 18:56:30 | 显示全部楼层 |阅读模式
前期开发中尝试在树莓派、windows平台使用pybluez库遇到一些问题(广播无法被检索等)。另外,由于该库作者已经没有继续维护,所以换用bleak库进行尝试。树莓派实现NI蓝牙OOB1、关于bleak库1.1简介Bleak是一款GATT客户端软件,能够连接到BLEGATT服务器设备。其旨在提供一个异步、跨平台的PythonAPI,用于连接和与传感器等进行通信。bleak项目github地址特性:支持Windows10,version16299或更高版本;支持Linux,bluez>=5.43,可以通过,$bluetoothd-v来查看相应版本;OSX/macOS支持CoreBluetoothAPI,至少OSX10.11版本以上;Android后端兼容python-for-androidBleak支持读、写、以及GATT服务的通知,以及相关函数用于发现BLE设备。1.2安装bleak库windows平台,直接可以使用pipinstallbleak安装即可。在树莓派上进行测试,可以正常安装。sudopip3installbleak树莓派硬件平台:树莓派3B系统:ubuntu-22.04.4-preinstalled-desktop-arm641.3bleak库使用BleakScanner类,用于搜索周边蓝牙设备。importasynciofrombleakimportBleakScannerasyncdefmain():devices=awaitBleakScanner.discover()fordindevices:print(d)asyncio.run(main())123456789BleakClient类,用于连接蓝牙设备,读、写、接收GATT服务的通知。importasynciofrombleakimportBleakClientaddress="24:71:89:cc:09:05"MODEL_NBR_UUID="2A24"asyncdefmain(address):asyncwithBleakClient(address)asclient:model_number=awaitclient.read_gatt_char(MODEL_NBR_UUID)print("ModelNumber:{0}".format("".join(map(chr,model_number))))asyncio.run(main(address))1234567891011121.4搜索NUS并连接NUS(NordicSemiconductor(nRF)UARTService),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"defmatch_nus_uuid(device:BLEDevice,adv:AdvertisementData): ifUART_SERVICE_UUID.lower()inadv.service_uuids: returnTrue returnFalse#搜索设备,查看是否匹配NUSUUID,找到后可尝试建立连接,进行读写。device=awaitBleakScanner.find_device_by_filter(match_nus_uuid)#创建BleakClient客户端,连接后进行串口操作asyncwithBleakClient(device,disconnected_callback=handle_disconnect)asclient: awaitclient.start_notify(UART_TX_CHAR_UUID,handle_rx)print("Connected,starttypingandpressENTER...") loop=asyncio.get_running_loop()nus=client.services.get_service(UART_SERVICE_UUID)#接收蓝牙串口信息rx_char=nus.get_characteristic(UART_RX_CHAR_UUID)123456789101112131415161718192021222324总结bleak库能够跨平台使用,Linux(树莓派)、Windows平台均可以正常使用。当用于扫描蓝牙服务、作为Client连接操作较为方便,基于Python,开发相对也比较简单。但是其缺陷在于不支持作为GATTServer,不支持一些广播服务,对于一些应用场景,如实现蓝牙串口服务来说无法支持,导致应用场景限制,但整体还算一个不错的跨平台的项目。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:39 , Processed in 1.082033 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表