在Windows 10上使用Python进行蓝牙通信

4

我发现有多个类似的问题,但它们似乎都已经过时或者没有有效的答案,所以我在这里再次询问。

我想从运行Windows 10的笔记本电脑连接到另一台设备(我使用的是Raspberry Pi)的蓝牙。

我知道通过socket模块有原生支持,但是它对我来说报错了。在搜索后,我发现有一个答案声称Python蓝牙套接字在Windows上不起作用(?)

所以我继续搜索,并发现PyBluez被推荐为一个很好的蓝牙库。但是,这也对我抛出了一个“OSError”的错误,而且我听说PyBluez不支持Windows 10。

我找到了一个名为“pybluez-win10”的模块,但基本上没有关于如何使其工作的文档。从这里安装Windows的预编译版本也没有成功,我猜这是因为最新版本是针对Python 3.5构建的,而我正在使用3.7。

如果您有任何建议要尝试或您知道其他推荐的库,请告诉我。谢谢!


唯一适用于 Python 3.11 的软件包是:bleak (github.com/hbldh/bleak) - Alwin
1个回答

7

Python 3.9将为Windows 10增加对蓝牙RFCOMM的支持。

https://bugs.python.org/issue36590

我在一台安装了Windows 10的计算机上安装了Python 3.9.0a6,并能够从Bluedot应用程序连接到它。https://play.google.com/store/apps/details?id=com.stuffaboutcode.bluedot&hl=en_GB

我的PC上的简单测试代码如下:

import socket

adapter_addr = 'e4:a4:71:63:e1:69'
port = 3  # Normal port for rfcomm?
buf_size = 1024

s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
s.bind((adapter_addr, port))
s.listen(1)
try:
    print('Listening for connection...')
    client, address = s.accept()
    print(f'Connected to {address}')

    while True:
        data = client.recv(buf_size)
        if data:
            print(data)
except Exception as e:
    print(f'Something went wrong: {e}')
    client.close()
    s.close()

1
我测试了你的代码@ukBaz,但根据端口号的选择会得到OSError:[WinError 10013]或OSError:[WinError 10049]。我正在以管理员身份运行带有Python 3.9.5(tags/v3.9.5:0a7dcbd,May 3 2021,17:27:52)[MSC v.1928 64 bit (AMD64)]的pyCharm,运行在win32上。适配器地址是根据https://www.youtube.com/watch?v=a7vDG0V5FIc检索的。 - Oscar
1
嗨@Oscar,你需要开一个新的问题,这样人们才能回答你的问题。 - ukBaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接