2025年4月12日 星期六 乙巳(蛇)年 正月十三 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

PyBluez,一个超实用的 Bluetooth 开发库!

时间:03-29来源:作者:点击数:7

咱们搞 Python 开发的都知道,蓝牙设备已经遍地开花了,从耳机到手环,从智能家居到工业控制,可不得整明白怎么用 Python 跟这些设备唠嗑?PyBluez这个库就是来帮咱们解决这个问题的。

1.安装那些事

装这玩意儿可不像装其他包那么简单,得先把环境搞好。Windows 用户要先装 Visual C++ 编译工具,Linux 党得装 libbluetooth-dev,Mac 用户还得装 XCode。环境搞定了,就能愉快地 pip 了:

  • pip install PyBluez

哦对了,要是装不上,别慌,看看是不是 Python 版本太新了,PyBluez 最多支持到 Python 3.8。

2.找设备玩耍

想跟蓝牙设备玩,得先找到它们在哪儿躲着:

  • import bluetooth
  • nearby_devices = bluetooth.discover_devices(lookup_names=True)
  • for addr, name in nearby_devices:
  • print(f“找到设备:{name} - {addr}”)

温馨提示:有些设备可能处于隐身模式,这时候就找不着了,得让它们现个身。

3.建立连接整活

找着设备了,咱们就可以连上它搞事情了:

  • sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
  • target_address = “XX:XX:XX:XX:XX:XX” # 这是设备的MAC地址
  • port = 1 # 端口号,不同设备可能不一样
  • try
  • sock.connect((target_address, port))
  • print(“连上了!”)
  • sock.send(“你好呀!”)
  • data = sock.recv(1024)
  • print(f“收到消息:{data}”)
  • except Exception as e:
  • print(f“哎呀,出事了:{e}”)
  • finally
  • sock.close()

4.RFCOMM 服务器整起来

要是想让你的电脑变身蓝牙服务器,接收其他设备发来的消息,也不难:

  • server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
  • server_sock.bind((“”, bluetooth.PORT_ANY))
  • server_sock.listen(1)
  • port = server_sock.getsockname()[1]
  • uuid = “94f39d29-7d6d-437d-973b-fba39e49d4ee”
  • bluetooth.advertise_service(server_sock, “我的蓝牙服务”,
  • service_id=uuid,
  • service_classes=[uuid, bluetooth.SERIAL_PORT_CLASS],
  • profiles=[bluetooth.SERIAL_PORT_PROFILE])
  • print(“等待连接...”)
  • client_sock, client_info = server_sock.accept()
  • print(f“接到连接:{client_info}”)

温馨提示:UUID 是服务的唯一标识,建议用在线工具生成一个,别直接抄我的。

5.异步操作不卡顿

同步操作容易把程序卡住,咱们用 asyncio 来搞定这事:

  • import asyncio
  • import bluetooth
  • from concurrent.futures import ThreadPoolExecutor
  • async def scan_devices():
  • loop = asyncio.get_event_loop()
  • with ThreadPoolExecutor() as pool:
  • devices = await loop.run_in_executor(
  • pool, bluetooth.discover_devices, True, True
  • )
  • return devices
  • async def main():
  • print(“开始扫描...”)
  • devices = await scan_devices()
  • for addr, name in devices:
  • print(f“设备:{name} - {addr}”)
  • asyncio.run(main())

蓝牙开发看着高大上,其实搞明白了也就那么回事。PyBluez 虽说有点年纪了,但该有的功能都有,性能也还不赖。平时写写小工具,跟蓝牙设备互动一下,都够用。不过写项目之前记得看看你要连的设备支持啥协议,免得白忙活。

搞不定就去翻翻文档,多试试,蓝牙这玩意儿就是得多倒腾才能玩明白。代码写得不对劲儿了也别怕,重启一下设备、重连一下,世界就清净了。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:使用Python进行蓝牙配对的指南 下一篇:很抱歉没有了
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐