Python 获取未连接蓝牙设备的RSSI
我目前正在使用raspberry pi,希望获得未连接蓝牙地址的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值。请
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")