Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取未连接蓝牙设备的RSSI_Python_Python 3.x_Bluetooth_Raspberry Pi_Raspberry Pi4 - Fatal编程技术网

Python 获取未连接蓝牙设备的RSSI

Python 获取未连接蓝牙设备的RSSI,python,python-3.x,bluetooth,raspberry-pi,raspberry-pi4,Python,Python 3.x,Bluetooth,Raspberry Pi,Raspberry Pi4,我目前正在使用raspberry pi,希望获得未连接蓝牙地址的RSSI。 我正在使用 import bluetooth result=bluetooth.lookup_name('XX:XX:XX:XX:XX:XX',timeout=5) if(result !=None): print("user near") else: print("user far") 但是我想更精确一点,在更近的距离内转到else块,因此我需要一个RSSI值。请

我目前正在使用raspberry pi,希望获得未连接蓝牙地址的RSSI。 我正在使用

import bluetooth

result=bluetooth.lookup_name('XX:XX:XX:XX:XX:XX',timeout=5)

if(result !=None):
  print("user near")
else:
  print("user far")

但是我想更精确一点,在更近的距离内转到else块,因此我需要一个RSSI值。请帮忙。我对覆盆子和蟒蛇很陌生。
(我在python3中工作)

Bluepy库看起来对树莓型病毒有益。别忘了你应该像我一样跑步
“sudo python3 name.py”
来自终端

有关更多信息:


获取Raspberry Pi上的RSSI值受支持

在下面的示例中,我将其用作访问BlueZ的D-BusAPI的库。本例扫描60秒,并将设备地址和RSSI值写入文件。您可以修改代码,以便在找到特定地址和RSSI值时执行操作

从日期时间导入日期时间
从pathlib导入路径
导入pydbus
从gi.repository导入GLib
发现时间=60
log_file=Path('/home/pi/device.log')
def写入日志(地址,rssi):
“”“将设备和rssi值写入日志文件”“”
now=datetime.now()
当前时间=现在。strftime(“%H:%M:%S”)
使用日志文件。打开('a')作为开发日志:
dev_log.write(f'Device seen[{current_time}]:{address}@{rssi}dBm\n')
总线=pydbus.SystemBus()
mainloop=GLib.mainloop()
类别设备监视器:
“”“表示发现的远程蓝牙设备的类”“”
定义初始化(自我,路径对象):
self.device=bus.get('org.bluez',path_obj)
self.device.onPropertiesChanged=self.prop\u已更改
rssi=self.device.GetAll('org.bluez.Device1').get('rssi'))
如果rssi:
打印(f'设备添加到监视器{self.Device.Address}@{rssi}dBm')
其他:
打印(f'Device added to monitor{self.Device.Address}')
def道具更改(自身、iface、道具更改、道具移除):
“”“当设备上的属性值更改时要调用的方法”“”
rssi=props\u changed.get('rssi',None)
如果rssi不是无:
打印(f'\t看到的设备:{self.device.Address}@{rssi}dBm')
写入日志(self.device.Address,rssi)
def end_discovery():
“”“在发现扫描结束时调用的方法”“”
mainloop.quit()
adapter.StopDiscovery()
def新iface(路径、iface道具):
“”“如果新的dbus接口是设备,请将其添加到要监视的设备”“”
device_addr=iface_props.get('org.bluez.Device1',{}.get('Address'))
如果设备地址:
设备监视器(路径)
#BlueZ对象管理器
mngr=bus.get('org.bluez','/'))
mngr.onInterfacesAdded=新
#连接到蓝牙适配器的DBus api
adapter=bus.get('org.bluez','/org/bluez/hci0')
adapter.DuplicateData=False
#迭代已知设备并添加到监视器
打印('正在将已知设备添加到监视器…')
mng_objs=mngr.GetManagedObjects()
对于mng_objs中的路径:
device=mng_objs[path].get('org.bluez.Device1',{}).get('Address',[])
如果设备:
设备监视器(路径)
#在发现时间运行发现
适配器。StartDiscovery()
GLib.timeout\u add\u seconds(发现时间,结束发现)
打印('查找附近的设备…')
尝试:
mainloop.run()
除键盘中断外:
(完)

如果您需要安装
gi.repository
库,请按照“安装系统提供的PyGObject”中的Debian说明进行操作:

看起来您正在使用pybluez,并且repo()中有一个示例不适用于您?我想扫描移动电话和btle设备。我想那不行,谢谢。但我想扫描手机,而不是btle设备。它不会扫描普通的bt设备。我认为这对你有好处
from bluepy.btle import Scanner

while True:
    try:
        #10.0 sec scanning
        ble_list = Scanner().scan(10.0)
        for dev in ble_list:
            print("rssi: {} ; mac: {}".format(dev.rssi,dev.addr))
    except:
        raise Exception("Error occured")