#python #bluetooth #raspberry-pi
Вопрос:
Я использовал и изменил код, который показан ниже, из https://www.instructables.com/Monitor-and-Record-Temperature-With-Bluetooth-LE-a/
Проблема, с которой я сталкиваюсь, заключается в том, что устройство, похоже, блокирует мне доступ к его значениям, хотя я в этом не уверен.
Вот мой код:
from bluepy.btle import Scanner, DefaultDelegate
import time
import struct
SENSOR_ADDRESS = [""ec:fe:4e:12:b8:72""]
class DecodeErrorException(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
print("Discovered device", dev.addr)
elif isNewData:
print("Received new data from", dev.addr)
scanner = Scanner().withDelegate(ScanDelegate())
ManuDataHex = []
ReadLoop = True
try:
while (ReadLoop):
devices = scanner.scan(2.0)
ManuData = ""
for dev in devices:
entry = 0
TempData = 0
for saddr in SENSOR_ADDRESS:
entry = 1
if (dev.addr == saddr):
CurrentDevAddr = saddr
for (adtype, desc, value) in dev.getScanData():
if (desc == "Manufacturer"):
ManuData = value
if (ManuData == ""):
print("No data received, end decoding")
continue
print(ManuData)
for i, j in zip(ManuData[::2], ManuData[1::2]):
ManuDataHex.append(int(i j, 16))
if ((ManuDataHex[0] == 0x85) and (ManuDataHex[1] == 0x00)):
print("Header byte 0x0085 found")
else:
print("Header byte 0x0085 not found, decoding stop")
continue
idx = 7
print("TotalLen: " str(len(ManuDataHex)))
while idx < len(ManuDataHex):
if (ManuDataHex[idx] == 0x43):
idx = 1
TempData = ManuDataHex[idx]
TempData = ManuDataHex[idx 1] * 0x100
TempData = TempData * 0.0625
idx = 2
else:
idx = 1
print("Device Address: " CurrentDevAddr)
print("Temp Data: " str(TempData))
ReadLoop = False
except DecodeErrorException:
pass
Исключение составляет следующее:
Обратная трассировка (самый недавний призыв последнего): файл «/home/pi/Desktop/lameteo/print.py», строка 31, в устройствах = сканера.файл сканирования(2.0) «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py», линия 852, в скан самостоятельно.старт(пассивный=пассивного) файл «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py» линия 790, в себя начните._mgmtCmd(«Ле») файл «/usr/local/lib/python3.7/dist-packages/bluepy/btle.py», строка 312, в _mgmtCmd поднять BTLEManagementError(«не удалось выполнить руководства команды» %s «» % (УМК), РСП) bluepy.бтл.BTLEManagementError: Не удалось выполнить команду управления «Файл включен» (код: 20, ошибка: > Отказано в разрешении)
Если у вас есть какие-либо знания в этой области, я был бы очень признателен вам за помощь.