使用Python通过蓝牙发送消息或数据

10

我如何在Python中通过蓝牙发送消息,而无需像输入数字一样进行密钥认证?

我使用了pybluez,但是出现了以下错误:

File "./send", line 12, in <module>
    connect()
File "./send", line 8, in connect
    sock.connect((bd_addr, port))
File "<string>", line 5, in connect
    bluetooth.btcommon.BluetoothError: (111, 'Connection refused')

以下是代码

#!/usr/bin/python

import bluetooth

def connect ():
    bd_addr = "x:x:x:x:x:x"
    port = 1
    sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    sock.connect((bd_addr, port))
    sock.send("hello!!")
    sock.close()

connect()

请编辑完整的错误消息,包括堆栈跟踪。 - brc
4个回答

9

正如@TJD所说,您需要确保绑定正确的端口,以便使用所需的服务。

>>> from bluetooth import *
>>> from pprint import pprint
>>>
>>> devices = discover_devices()
>>> devices
['xx:yy:tt:zz:44:BD', '00:yy:72:zz:bb:aa']

接着作为第二步,尝试在您想要连接的设备上找到该服务。

>>> service = find_service(address='00:yy:72:zz:bb:aa')
>>> pprint(service)
[{'description': None,
  'host': '00:yy:72:zz:bb:aa',
  'name': 'Headset Audio Gateway',
  'port': 12,
  'profiles': [('1108', 258)],
  ...},
 {'description': None,
  'host': '00:yy:72:zz:bb:aa',
  'name': 'Dial-Up Networking',
  'port': 1,
  'profiles': [('1103', 256)],
  'protocol': 'RFCOMM',
  ...}]
基于这些信息,您可以连接到运行在设备上的服务。根据服务/配置文件规范,您可以发送特定于服务的命令并从设备获取信息。例如,在上面的列表中,您可以看到“耳机音频网关”和带有号码“1108”的配置文件列表,这是该服务的短UUID。现在,您可以查找该配置文件的命令,并且应该能够工作。

3

我曾经遇到过同样的错误。绑定地址后,错误消失了。

rfcomm bind 0 <address> 1

0指的是您的蓝牙设备。1指的是端口号。 如果您正在运行Linux,则可以运行hciconfig来获取设备编号。


0将绑定到/dev/rfcomm0,1将绑定到/dev/rfcomm1。 - Eric Smekens

0

我尝试运行了你问题中的相同代码,它对我来说是有效的,我可以发送一些数据并通过串口监视器看到数据进入arduino。

但是,在此之前,我进行了一步操作,即首先将HC-05与我的设备配对(我用它来尝试发送数据,在我的情况下,它是一个Linux机器)

我使用bluetoothctl工具进行配对。

  1. sudo bluetoothctl #这将在cli中启动工具
  2. scan on #这将显示hc-05的MAC地址
  3. pair <MAC_ADDRESS_OF_HC-05> #这将要求输入用户名和密码
  4. 对于我的模块,密码是1234

工作图片


0

使用pip install pybluez安装。 - Adam Jenča

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