ich möchte die Verbindung zu einem ESP via bleak trennen. Einmal wenn ich den Sensor update. Hier wird zuerst eine Verbindung hergestellt, die Daten übermittelt und diese dann getrennt. Das klappt auch:
Code: Alles auswählen
# Klasse für das Updaten des ESP
class Worker(QThread):
completed = pyqtSignal()
received = pyqtSignal(str)
def run(self):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
async def do_work():
try:
self.received.emit("Suche Gerät") # Text "Suche Geräte" anzeigen
print("Suche Gerät")
einstellungen_window_ui.Update.setEnabled(False)
client = bleak.BleakClient(mac_address)
await self.connect_client(client) # Verbindung herstellen
update_progress(einstellungen_window_ui.progressBar) # Aktualisieren des Fortschrittsbalken im Einstellungsfenster
# String erstellen
str_parameters = f"{Variable1},{Variable2},{Variable3},{Variable4},{Variable5},{Variable6}"
# Byte-Array erstellen
byte_array = str_parameters.encode('ascii')
print("Sende Werte")
# Array senden
await client.write_gatt_char(UUID3, byte_array)
# Daten vom ESP32 ?ber BLE empfangen
received = False # Variable, um anzuzeigen, ob Daten empfangen wurden
while not received and not self.isInterruptionRequested():
data = await client.read_gatt_char(UUID3)
if data:
value = data.decode('utf-8')
print(f"{value}")
received = True
self.received.emit(value)
einstellungen_window_ui.Update.setEnabled(True) #Schaltet den Update Button wieder ein
await self.disconnect_client(client) # Verbindung trennen
except Exception as e:
print("Nicht verbunden")
einstellungen_window_ui.Update.setEnabled(True) #Schaltet den Update Button wieder ein
print(e)
self.received.emit("Gerät nicht gefunden")
einstellungen_window_ui.Parameter_Update_Text.setStyleSheet("color: red;")
Parameter_Update_Text = "Gerät nicht gefunden"
self.completed.emit()
loop.run_until_complete(do_work())
async def connect_client(self, client):
await client.connect()
async def disconnect_client(self, client):
await client.disconnect()
Code: Alles auswählen
class StoppThread (QThread):
clos_signal = pyqtSignal(str)
def __init__(self):
super().__init__()
def run(self):
print("Stopp Thread gestartet")
async def disconnect_client_async():
print("Führe Trennung Client aus")
async with BleakClient(mac_address) as client:
await client.disconnect()
print("Verbindung zum ESP über BLE getrennt.")
async def close_threads_async():
await safe_to_excel.close_threads()
async def stop_tasks():
await disconnect_client_async()
await close_threads_async()
# Starte die asynchronen Aufgaben im aktuellen Event Loop
loop.run_until_complete(stop_tasks())
# Sende ein Signal, um den Abschluss des Threads anzuzeigen
self.clos_signal.emit("Trennung abgeschlossen")
Code: Alles auswählen
Stopp Thread gestartet
Führe Trennung Client aus
Traceback (most recent call last):
File "C:\Users\emanu\source\repos\PythonApplication3\PythonApplication3\PythonApplication3.py", line 236, in run
loop.run_until_complete(stop_tasks())
File "C:\Users\emanu\miniconda34\lib\asyncio\base_events.py", line 649, in run_until_complete
return future.result()
File "C:\Users\emanu\source\repos\PythonApplication3\PythonApplication3\PythonApplication3.py", line 232, in stop_tasks
await disconnect_client_async()
File "C:\Users\emanu\source\repos\PythonApplication3\PythonApplication3\PythonApplication3.py", line 224, in disconnect_client_async
async with BleakClient(mac_address) as client:
File "C:\Users\emanu\miniconda34\lib\site-packages\bleak\__init__.py", line 491, in __aenter__
await self.connect()
File "C:\Users\emanu\miniconda34\lib\site-packages\bleak\__init__.py", line 531, in connect
return await self._backend.connect(**kwargs)
File "C:\Users\emanu\miniconda34\lib\site-packages\bleak\backends\winrt\client.py", line 440, in connect
self.services = await self.get_services(
File "C:\Users\emanu\miniconda34\lib\site-packages\bleak\backends\winrt\client.py", line 706, in get_services
characteristics: Sequence[GattCharacteristic] = _ensure_success(
File "C:\Users\emanu\miniconda34\lib\site-packages\bleak\backends\winrt\client.py", line 120, in _ensure_success
raise BleakError(f"{fail_msg}: Access Denied")
bleak.exc.BleakError: Could not get GATT characteristics for <_bleak_winrt_Windows_Devices_Bluetooth_GenericAttributeProfile.GattDeviceService object at 0x000001525B1D3D90>: Access Denied
starte update