El Handle es un número entero que actúa como un identificador único para una característica, un servicio, o un descriptor dentro de un dispositivo BLE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
import asyncio from bleak import BleakScanner, BleakClient async def scan_for_devices(): print("Escaneando dispositivos BLE...") devices = await BleakScanner.discover() return devices async def list_writable_characteristics(device): try: async with BleakClient(device) as client: print(f"Conectado a {device.name} ({device.address})") try: services = await client.get_services() for service in services: print(f"Servicio: {service.uuid}") for characteristic in service.characteristics: if "write" in characteristic.properties: handle = characteristic.handle # Obtener el handle de la característica print(f" Característica escribible: {characteristic.uuid} - Propiedades: {characteristic.properties} - Handle: {handle}") except Exception as e: print(f"Error al obtener servicios: {e}") except Exception as e: print(f"Error al conectar con el dispositivo {device.name}: {e}") async def main(): devices = await scan_for_devices() if not devices: print("No se encontraron dispositivos BLE.") return for device in devices: if device.name: # Verificar que el dispositivo tenga un nombre print(f"Dispositivo encontrado: {device.name} - {device.address}") await list_writable_characteristics(device) else: print(f"Dispositivo encontrado sin nombre: {device.address}") # Ejecutar el escaneo y listar características escribibles asyncio.run(main()) |