标签: pybluez

我不得不重置适配器后,蓝牙的Python代码抛出错误

我在python中尝试蓝牙编程.它一直工作到昨天.今天早上有停电,由于某种原因,蓝牙模块被禁用,无法打开.所以,我做了一个sudo hciconfig hci0 reset,然后打开它.从那时起,最简单的程序无法执行.就拿这一次的例子.它卡在advertise_servicebluetooth模块中并抛出以下错误(仅供参考:virtualenv在这里不是问题.系统范围的python也做同样的事情).

Traceback (most recent call last):
  File "bt.py", line 17, in <module>
    advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
  File "/home/machinename/.virtualenvs/py27/local/lib/python2.7/site-packages/bluetooth/bluez.py", line 242, in advertise_service
    raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')
Run Code Online (Sandbox Code Playgroud)

有时在编译和重新安装Bluez驱动程序时出现了不同的错误:

Traceback (most recent call last):
  File "build/bdist.linux-x86_64/egg/bluetooth/bluez.py", line 268, in advertise_service
  bluetooth.btcommon.BluetoothError: error no advertisable device.
Run Code Online (Sandbox Code Playgroud)

但所有这些在这台机器之前就像一个魅力; 事实上,当我写这篇文章的时候,所有的程序都可以和我的其他ubuntu(14.04LTS)机器一起工作.我检查了源代码,并追溯到一个_bluetooth.so文件 …

python bluetooth bluez pybluez

10
推荐指数
1
解决办法
7461
查看次数

bluez5中哪个工具取代了gatttool?

似乎commit b1eb2c4cd057624312e0412f6c4be000f7fc3617 gatttool已被弃用,但我无法找到任何替代gattool的信息.

每个Python蓝牙LE包都在gatttool上进行了中继,现在我的ArchLinux系统坏了,因为bluez包没有用--enabled-deprecatedflag 构建(这将构建gatttool二进制).

pygatt只是在我的系统上打破并且bluepy没有构建,因为他们自己(在我的系统坏了)上运行bluez代码来构建gatttool.

无论如何我想在任何替换的gatttool周围写一个新包装但我无法找到关于这个主题的任何信息.

那么我可以使用bluez堆栈中的哪个工具编写新的Python蓝牙LE包装器?

linux bluetooth bluez pybluez

9
推荐指数
1
解决办法
3368
查看次数

除了blueZ(Pybluez)之外,还有其他方法可获取RSSI值

我在这方面很努力,所以任何帮助/指针都将不胜感激。

我一直在尝试使用pyblueZ从RSSI获取精确值

我得到了一些不错的结果,但这是我不想要的(来自blueZ doc):

对于BR / EDR控制器,将Connection_Handle用作Handle命令参数和返回参数。RSSI参数返回测得的接收信号强度指示(RSSI)与到另一个BR / EDR控制器的Connection_Handle的黄金接收功率范围限制之间的差。Connection_Handle应为ACL连接的Connection_Handle。控制器返回的任何正RSSI值表示RSSI高于上限多少dB,任何负值表示RSSI低于下限多少dB。零值表示RSSI在黄金接收功率范围内。

换句话说,当接收器靠近发生器时,RSSI值仍将为0(可能是2/3米的范围),这确实让我感到困扰。

我使用的方法是BlueZ 的命令HCI_Read_RSSI,这里有一个示例:https : //github.com/ewenchou/bluetooth-proximity

获取RSSI值的另一种方法是通过事件获取它:HCI_Inquiry_Result_with_RSSI,这里我得到RSSI的真实值,但它是发现模式,有点慢,并且将所有设备的mac地址返回给我。而且我也不想。

以我的知识和我无法让Google找到想要的东西这一事实,我似乎陷入了困境。

所以我的问题是:

  1. 无论如何,有没有要研究blueZ提供的蓝牙API?我似乎在任何地方都找不到!并且不要开始与我谈论他们的文档,这几乎是不存在的!

  2. 有什么方法可以使HCI_Inquiry_Result_with_RSSI与单个mac地址一起工作?

  3. 还有其他获取RSSI值的方法吗?我尝试了hcitool(出现了同样的问题?),l2ping(在4/5成功后,我得到了100%的ping损失,我没有对此进行深入研究)

  4. 难道是我的加密狗被操纵了吗?

  5. 如果我尝试从BLE设备检测RSSI会有所不同吗?

(我现在暂时要坚持使用蓝牙,但是如果您想到我可以使用的任何其他射频信号,只需提及它,我将牢记在心以便以后使用。)

感谢您到那里阅读我的问题的任何人。

对我的英语感到抱歉,这已经很漫长了。

和平

编辑:使用Bluez,我可以发现BT classic,或者向RSSI询问特定的地址(但是获得的值超出黄金范围)。我也可以发现BLE,但找不到任何可用于RSSI的特定地址(适用于BLE)的信息...

python bluetooth rssi pybluez

8
推荐指数
1
解决办法
267
查看次数

在python中使用Passkey/Password配对蓝牙设备 - RFCOMM(Linux)

我正在研究一个Python脚本来搜索蓝牙设备并使用RFCOMM连接它们.此设备具有密码/密码.我正在使用PyBlueZ,据我所知,这个库无法处理Passkey/Password连接(Python PyBluez连接到passkey protected device).

我能够发现设备并检索它们的名称和地址:

nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True,
                                                      flush_cache=True, lookup_class=False)
Run Code Online (Sandbox Code Playgroud)

但如果尝试使用以下方法连接到特定设备:

s = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
s.connect((addr,port)) 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误'Device or resource busy (16)'.

我使用hcitoolbluetooth-agent尝试了一些bash命令,但我需要以编程方式进行连接.我能够使用此处描述的步骤连接到我的设备:如何在Linux上从命令行配对蓝牙设备.

我想询问是否有人使用Python连接到使用Passkey/Password的蓝牙设备.我正在考虑在Python中使用bash命令subprocess.call(),但我不确定这是不是一个好主意.

谢谢你的帮助.

python linux bluetooth pybluez

6
推荐指数
1
解决办法
2万
查看次数

对于使用 PyBluez 的蓝牙连接,即使在配对后,套接字连接也不会被接受

我有一个使用 Rasbian OS 启动的 Raspberry pi B 型,并插入了一个蓝牙适配器。当从我的 PC 搜索时,我能够发现我的 pi,并且能够使用 Blueman GUI 进行配对。这是我用于配对过程的 python 程序:

from bluetooth import *

server_sock=BluetoothSocket(L2CAP)
server_sock.bind(("", 17))

with open(sys.path[0] + "/sdp_record.xml", "r") as fh:
        service_record = fh.read()
self.bus = dbus.SystemBus()
self.manager = dbus.Interface(self.bus.get_object("org.bluez", "/"),"org.bluez.Manager")
adapter_path = self.manager.DefaultAdapter()
self.service = dbus.Interface(self.bus.get_object("org.bluez",adapter_path),
                                                       "org.bluez.Service")
service_handle = service.AddRecord(service_record)
print "Service record added"
server_sock.listen(1)

print("Waiting for connection on L2CAP")

try:
    client_sock, client_info = server_sock.accept()
    print("Accepted connection from ", client_info)

    while True:
        data = client_sock.recv(1024)
        if len(data) == 0:
                break …
Run Code Online (Sandbox Code Playgroud)

python bluetooth pybluez

5
推荐指数
1
解决办法
3719
查看次数

python蓝牙 - 检查连接状态

我正在使用 python 的蓝牙模块import bluetooth,我相信它是 PyBluez 包。我能够很好地从 bluetooth.BluetoothSocket 类连接、发送和接收,但是当涉及到连接状态时,我的应用程序完全不知情。

我希望我的应用程序在设备断开连接时禁用某些功能,但似乎没有任何类型的 BluetoothSocket.is_connected() 方法。我希望它能在蓝牙状态发生变化时立即检测到它们。

通常有很多关于像这样简单的事情的主题,所以如果这是重复的,请道歉。我已经多次搜索这个网站寻找答案,但没有发现任何特定于 python 的内容。

python bluetooth pybluez

5
推荐指数
1
解决办法
8487
查看次数

Python蓝牙如何将文件发送到手机

在我当前的项目中,需要通过蓝牙将文件从 Windows 计算机发送到 android 设备,除了标准状态和配对的蓝牙连接之外,手机上没有任何内容。我查看了 pybluez,它似乎很简单,可以在客户端和服务器架构之间发送文件(实际上它在我的笔记本电脑和台式机之间发送的速度相当快),但我一生都找不到任何方法让 python 到建立连接后,将文件从计算机发送到 android;我的尝试一直是从设备上抓取蓝牙 mac 地址之类的东西

nearby_devices = bluetooth.discover_devices(
    duration=8, lookup_names=True, flush_cache=True, lookup_class=False)
Run Code Online (Sandbox Code Playgroud)

然后尝试像这样发送文件

port = 1
for addr, name in nearby_devices:
    bd_addr = addr
sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sock.connect((bd_addr, port))

sock.send("download-app")
sock.close()
Run Code Online (Sandbox Code Playgroud)

当然,使用 pybluez 文档给出的示例脚本,我可以在客户端和服务器之间无缝发送文件,但我仍然无法将文件发送到所选的 android 设备(即使我指定了它的地址并知道它在范围)

python windows android bluetooth pybluez

5
推荐指数
1
解决办法
1万
查看次数

使用 BlueZ 5 模拟键盘

我正在进行一项设置,希望将 RaspberryPi-3 连接到另一台机器。大多数时候它是一台 Windows 机器。在 Pi 上,我想通过蓝牙将所有键盘敲击转发到另一台(Windows)机器。

因此我做了一些研究,几年前一个叫 Liam 的人写了一个 Python 脚本,显然它在 BlueZ 4 上运行得很好。所以我决定在 BlueZ 5 上尝试一下。到目前为止还没有运气。

好吧,我想,好吧,我们降级版本吧。所以我从源代码编译了它,版本 4.10。没有运气。树莓派甚至不知道它安装了蓝牙适配器,可能是一些驱动程序出了问题。

于是我开始接触 BlueZ 5,一开始很简单。但实际上我现在正在努力注册 sdp_Record.xml。以及稳定的连接。

首先是 BlueZ 4 实现的参考文件:

BlueZ4.py:

#!/usr/bin/python2.7
#
# PiTooth allows the Raspberry Pi to act as a Bluetooth keyboard, and relays
# keypresses from a USB keyboard to a Bluetooth client. Written by Liam Fraser
# for a Linux User & Developer tutorial.
#

import os # Used to call external commands
import sys # Used …
Run Code Online (Sandbox Code Playgroud)

python linux raspberry-pi bluez pybluez

5
推荐指数
1
解决办法
8229
查看次数

Pybluez 找不到设备,但 bluetoothctl 可以

我一直在尝试在运行 ubuntu 18 的 lenovo y50-70 笔记本电脑上运行一个简单的 python 蓝牙示例。但是在执行此操作时,我注意到 Pybluez 库无法找到任何设备,而使用 bluetoothctl 工具可以。

import bluetooth
print("performing inquiry...")
nearby_devices = bluetooth.discover_devices(duration=8, 
lookup_names=True, flush_cache=True, lookup_class=False)

print("found %d devices" % len(nearby_devices))

for addr, name in nearby_devices:
try:
    print("  %s - %s" % (addr, name))
except UnicodeEncodeError:
    print("  %s - %s" % (addr, name.encode('utf-8', 'replace')))
Run Code Online (Sandbox Code Playgroud)

运行上面的代码会得到输出:found 0 devices。运行 bluetoothctl 时给出以下输出:

[NEW] Controller 40:B8:9A:44:E0:46 daan-Lenovo-Y50-70 [default]
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 40:B8:9A:44:E0:46 Discovering: yes
[NEW] Device 30:AE:A4:37:A2:4A 30-AE-A4-37-A2-4A
[NEW] …
Run Code Online (Sandbox Code Playgroud)

python bluetooth pybluez

5
推荐指数
1
解决办法
905
查看次数

PyBluez:PyBluez 设置命令错误:use_2to3 无效

我在尝试着pip install pybluez,但收到此错误:

\n
Collecting PyBluez\n  Using cached PyBluez-0.23.tar.gz (97 kB)\n  Preparing metadata (setup.py) ... error\n  error: subprocess-exited-with-error\n\n  \xc3\x97 python setup.py egg_info did not run successfully.\n  \xe2\x94\x82 exit code: 1\n  \xe2\x95\xb0\xe2\x94\x80> [1 lines of output]\n      error in PyBluez setup command: use_2to3 is invalid.\n      [end of output]\n\n  note: This error originates from a subprocess, and is likely not a problem with pip.\nerror: metadata-generation-failed\n\n\xc3\x97 Encountered error while generating package metadata.\n\xe2\x95\xb0\xe2\x94\x80> See above for output.\n\nnote: This is an issue with the …
Run Code Online (Sandbox Code Playgroud)

python pip pybluez

5
推荐指数
1
解决办法
9506
查看次数

标签 统计

pybluez ×10

python ×9

bluetooth ×8

bluez ×3

linux ×3

android ×1

pip ×1

raspberry-pi ×1

rssi ×1

windows ×1