1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import asyncio from bleak import BleakScanner async def scan_for_devices(): print("Escaneando dispositivos BLE...") devices = await BleakScanner.discover() return devices async def main(): devices = await scan_for_devices() if not devices: print("No se encontraron dispositivos BLE.") return for device in devices: print(f"Dispositivo encontrado: {device.name} - {device.address}") # Ejecutar el escaneo asyncio.run(main()) |
Explicación línea a línea:
import asyncio
from bleak import BleakScanner
import asyncio
: Importa el móduloasyncio
, que es una biblioteca estándar de Python para escribir código asincrónico utilizando corutinas y eventos.from bleak import BleakScanner
: Importa la claseBleakScanner
del paquetebleak
.BleakScanner
es una clase que permite escanear dispositivos Bluetooth Low Energy (BLE) cercanos.
async def scan_for_devices():
print("Escaneando dispositivos BLE...")
devices = await BleakScanner.discover()
return devices
async def scan_for_devices()
: Define una corutina asincrónica llamadascan_for_devices
. La palabra claveasync
indica que la función es asincrónica y puede usarawait
para llamar a otras corutinas.print("Escaneando dispositivos BLE...")
: Imprime un mensaje para indicar que el escaneo de dispositivos BLE está en progreso.devices = await BleakScanner.discover()
: Utilizaawait
para esperar a queBleakScanner.discover()
termine de ejecutar.BleakScanner.discover()
es una función asincrónica que realiza el escaneo y devuelve una lista de dispositivos BLE encontrados.return devices
: Devuelve la lista de dispositivos BLE encontrados.
async def main():
devices = await scan_for_devices()
if not devices:
print("No se encontraron dispositivos BLE.")
return
for device in devices:
print(f"Dispositivo encontrado: {device.name} - {device.address}")
async def main()
: Define la corutina asincrónicamain
, que es la función principal del programa. Aquí es donde se ejecuta el flujo principal del programa.devices = await scan_for_devices()
: Llama a la corutinascan_for_devices
y espera a que termine. La lista de dispositivos encontrados se guarda en la variabledevices
.if not devices:
: Verifica si la lista de dispositivos está vacía.print("No se encontraron dispositivos BLE.")
: Si no hay dispositivos en la lista, imprime un mensaje indicando que no se encontraron dispositivos BLE.return
: Sale de la funciónmain
si no se encontraron dispositivos.
for device in devices:
: Itera sobre la lista de dispositivos encontrados.print(f"Dispositivo encontrado: {device.name} - {device.address}")
: Imprime el nombre y la dirección de cada dispositivo encontrado.
# Ejecutar el escaneo
asyncio.run(main())
asyncio.run(main())
: Ejecuta la corutinamain
utilizandoasyncio.run
, que maneja el bucle de eventos necesario para ejecutar corutinas asincrónicas.asyncio.run
crea un nuevo bucle de eventos, ejecuta la corutinamain
y cierra el bucle al finalizar.