Laboratorio de funciones Bluetooth SILICON LABS 21Q2
Manual de laboratorio de características de Bluetooth 21Q2
Este manual de laboratorio lo guía a través de algunas de las nuevas funciones del SDK de Bluetooth que se introdujeron entre las versiones 20Q4 y 21Q2. En este laboratorio crearemos un NCP examparchivo y escriba un software host en lenguaje Python. Usando la nueva característica dinámica de GATT, también construiremos la base de datos de GATT desde el software host en lugar de usar el Configurador de GATT. Finalmente, la función LE Power Control se presenta al extender el software host.![]()
Prerrequisitos
Para completar este laboratorio, necesitará lo siguiente:
- Dos Thunderboard BG22 o dos WSTK con cualquier placa de radio EFR32BG/EFR32MG o la combinación de estos
- Simplicity Studio 5 instalado, con Gecko SDK v3.2 que incluye Bluetooth SDKv3.2
- Una PC en la que esté instalado Python v3.6 o posterior
Actualización de los dispositivos de destino para la funcionalidad NCP
- Conecte sus dos placas de radio y abra Simplicity Studio 5
- Seleccione una de las placas de radio en la pestaña Adaptadores de depuración
- Establezca el SDK preferido en v3.2.0 en Overview pestaña del lanzador view
- abre el examppestaña Proyectos y demostraciones
- Encuentre la nueva demostración de Bluetooth – NCP.
- Haga clic en Ejecutar para mostrar la imagen de destino NCP en la placa.

(Nota: a diferencia de Bluetooth – NCP Empty, este proyecto no incluye una base de datos GATT preconstruida, pero tiene habilitada la API GATT dinámica, que es un requisito previo para las siguientes secciones)
- Repita los mismos pasos para la otra placa de radio.
Creación de una aplicación de servidor Bluetooth en Python
Empezando
- El paquete pybgapi brinda la posibilidad de emitir comandos BGAPI hacia el dispositivo de destino desde la PC utilizando el lenguaje de programación Python. Para instalar este paquete, escriba lo siguiente en la línea de comando: pip install pybgapi Para obtener más información sobre el paquete, visite https://pypi.org/project/pybgapi/
- Localice la última definición de BGAPI file bajo
- C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2.0\protocol\bluetooth\api\sl_bt.xapi y cópielo en su carpeta de trabajo.
- Abra python bash (escriba python en la CLI)
- Importe la biblioteca bgapi con el siguiente comando: >>> import bgapi
- Encuentre el número de puerto COM (por ejemplo, COM49) de una de sus placas de radio. Debe buscar el "Puerto JLink CDC UART" en el Administrador de dispositivos o en su aplicación de terminal favorita.

- Conéctese a su placa de radio:
- >>> conexión = bgapi.SerialConnector('COM49')
- Inicialice la biblioteca pybgapi para este nodo:
- >>> nodo = bgapi.BGLib(conexión,'sl_bt.xapi')
- Abra la comunicación BGAPI hacia este nodo:
- >>> nodo.abierto()
- Compruebe si puede comunicarse con la placa mediante el comando system_hello(). Debería obtener una respuesta system_hello:
- >>> nodo.bt.sistema.hola()
- bt_rsp_system_hello(resultado=0)
- >>> nodo.bt.sistema.hola()
- Reinicie su nodo con el siguiente comando:
- nodo.bt.sistema.reset(0)
- Ahora debería obtener un evento system_boot. Para obtener el último evento, use el siguiente comando:
- evt = nodo.get_events(max_events=1)
- imprimir (evt)
- [bt_evt_system_boot(mayor=3, menor=2, parche=0, compilación=774, gestor de arranque=17563648, hw=1, hash=1181938724)]
Creación de la base de datos del GATT
- La aplicación de destino Bluetooth – NCP no incluye una base de datos GATT preconstruida. Aquí construiremos la base de datos a partir del código. Primero inicie una sesión para la construcción de la base de datos:
- >>> sesión = nodo.bt.gattdb.nueva_sesión().sesión
- Agregar un nuevo servicio a la base de datos del GATT. Aquí añadiremos el servicio Acceso Genérico adoptado por el Bluetooth SIG. Este es un servicio principal (0x0) sin indicadores establecidos (0x0) y con un UUID de 16 bits (0x1800).
- servicio = node.bt.gattdb.add_service(sesión, 0, 0, bytes.fromhex(“0018”)).servicio
- Agregar una nueva característica al servicio. Aquí agregaremos la característica Nombre del dispositivo al servicio Acceso genérico con propiedad LEER (0x2), sin requisitos de seguridad (0x0), sin marcas (0x0), UUID de 16 bits (0x2a00), longitud variable (0x2), longitud máxima de 20 y con valor inicial de “PyBGAPI
Example”:
- >>> char = node.bt.gattdb.add_uuid16_characteristic(sesión, servicio, 2, 0, 0, bytes.fromhex('002a'), 2,
- 20, bytes('PyBGAPI Example','utf-8′)).característica
- 3.15 Activar el nuevo servicio:
- >>> node.bt.gattdb.start_service(sesión,servicio)
- bt_rsp_gattdb_start_service(resultado=0)
- Activar la nueva característica:
- >>> nodo.bt.gattdb.start_characteristic(sesión, carácter)
- bt_rsp_gattdb_start_characteristic(resultado=0)
- >>> nodo.bt.gattdb.start_characteristic(sesión, carácter)
- Guarde los cambios y cierre la sesión de edición de la base de datos:
- >>> nodo.bt.gattdb.commit(sesión)
- bt_rsp_gattdb_commit(resultado=0)
Conectando al servidor
- 3.18 Ahora que tenemos un nombre de dispositivo en la base de datos de GATT, podemos comenzar a anunciar. La pila anunciará automáticamente el dispositivo con el nombre definido en su base de datos GATT:
- >>> conjunto_anunciante = node.bt.advertiser.create_set().handle
- >>> nodo.bt.anunciante.start(conjunto_anunciante, 2, 2)
- bt_rsp_advertiser_start(resultado=0)
- Inicie EFR Connect en su teléfono y encuentre la publicidad de su dispositivo como “PyBGAPI Exampla"
- Puede conectarse al dispositivo y descubrir su base de datos GATT que ahora tiene la característica Nombre del dispositivo
Nota: si quieres una ex muy rápidaamparchivo sin molestarse con la base de datos GATT, aún puede actualizar el Bluetooth - NCP vacío examparchivo a su tablero, que tiene una base de datos GATT básica preconstruida. En este caso, todo lo que tiene que hacer en el lado del host es:
- >>> importar bgapi
- >>> conexión = bgapi.SerialConnector('COM49')
- >>> nodo = bgapi.BGLib(conexión,'sl_bt.xapi')
- >>> nodo.abierto()
- >>> conjunto_anunciante = node.bt.advertiser.create_set().handle
- >>> nodo.bt.anunciante.start(conjunto_anunciante, 2, 2)
- bt_rsp_advertiser_start(resultado=0)
Creación de una aplicación de cliente Bluetooth en Python
- Crear un cliente es más complicado que implementar un servidor. Por lo tanto, escribiremos un script en python. Abra su editor de texto favorito y cree un nuevo file, llamémoslo cliente.py
- Importa lo siguiente:

- Al igual que en el caso del servidor, nos conectaremos al nodo a través de UART. Use el número de puerto COM de su segunda placa aquí:

- A partir de aquí, nuestra aplicación será impulsada por eventos. Siempre que la pila genere un evento de Bluetooth, manejaremos el evento e impulsaremos la aplicación:

- Definamos la función del controlador de eventos y agreguemos un controlador para el evento system_boot, donde comenzaremos a buscar dispositivos periféricos. Tenga en cuenta que esta función debe definirse antes del bucle while (y después de la definición de la variable de nodo).

- Una vez que se inicia el escáner, el nodo recibirá informes de escaneo. Agreguemos un controlador de eventos para informes de análisis dentro de la función sl_bt_on_event(). Si se encuentra un informe de escaneo con el nombre de dispositivo anunciado "PyBGAPI Example”, el cliente abrirá una conexión hacia ese dispositivo:

- Una vez que haya llegado a este punto, vale la pena verificar si su cliente encuentra el servidor. Asegúrese de haber iniciado el anuncio en el otro dispositivo, luego guarde client.py e inícielo desde la línea de comando. Debería ver algo como esto:

- El cliente debe descubrir servicios y características en el servidor. Aquí descubriremos el servicio Acceso genérico y la característica Nombre del dispositivo y, finalmente, leeremos el valor de la característica Nombre del dispositivo. Reemplace su función sl_bt_on_event() actual con el siguiente código:

- Guarde client.py e inícielo desde la línea de comandos. Debería ver algo como esto:

Adición de la función de control de potencia LE
Flasheo de los dispositivos de destino
LE Power Control no está habilitado en el Bluetooth example proyectos por defecto. Para agregar esta función, debe estar instalado el componente de software Bluetooth > Función > PowerControl.
- Abre el lanzador view de Simplicity Studio 5.
- Seleccione uno de sus dispositivos en la pestaña Adaptadores de depuración. Asegúrese de que el SDK preferido sea v3.2.
- abre el exampHaga clic en la pestaña Proyectos y demostraciones y busque Bluetooth – NCP Empty example. Pulse [Crear] para crear el proyecto. (Esta vez no queremos construir la base de datos GATT, así que usamos NCP Empty, que tiene uno predeterminado).
- Abra la pestaña Configurador GATT, seleccione la característica Nombre del dispositivo y sobrescriba el “Silabs Example” valor inicial con “PyBGAPI Example” (para que el cliente reconozca el servidor). También sobrescriba la longitud del valor con 15.
- Presione ctrl-s para guardar la base de datos.
- En el Configurador de proyectos, abra la pestaña Componentes de software.
- Busque el componente de software Bluetooth > Característica > PowerControl y haga clic en [Instalar].

- Haga clic en la rueda dentada junto al componente de software PowerControl para comprobar los límites superior e inferior del rango dorado. Establecer el límite inferior para 1M
- PHY a -45 (en lugar de -60). Aunque en la práctica este valor no es óptimo, resultará en más ajustes de potencia Tx, lo cual es bueno para propósitos de demostración.
- En la versión 3.2.0 del SDK, se debe aplicar una pequeña solución para configurar correctamente el rango dorado: abra sl_bluetooth.c file que se encuentra en la carpeta /autogen de su proyecto y mueva el sl_bt_init_power_control(); llamada de función ANTES de sl_bt_init_stack(&config);

- Crea el proyecto y muéstralo a tu tablero.
- Si sus dos tableros son del mismo tipo, muestre la misma imagen en el otro tablero también. Si su segundo tablero es un tablero diferente, repita los pasos anteriores para el segundo tablero.
Iniciar el servidor y el cliente
- Ahora nuevamente, abra Python bash, conéctese a su primer tablero y comience a anunciar

- Modifique su aplicación cliente para que no se cierre después de leer el nombre del dispositivo. Busque las siguientes líneas y póngalas en un comentario:

- Guarde y ejecute su aplicación cliente
- py .\cliente.py
- Coloca las dos tablas lejos, luego acércalas lentamente una a la otra. Ahora debería ver que la pila comienza a disminuir su nivel de potencia desde los 8dBm predeterminados hasta -3dBm (que es la potencia Tx mínima predeterminada):

Documentos / Recursos
![]() |
Laboratorio de funciones Bluetooth SILICON LABS 21Q2 [pdf] Manual de instrucciones 21Q2, laboratorio de funciones de Bluetooth, 21Q2 laboratorio de funciones de Bluetooth, laboratorio de funciones, laboratorio |


