🛠 Périphérique BLE : pont série air ↔ USB (Bluefruit)
Objetivos
Crear un dispositivo BLE con la pila Nordic SoftDevice mediante Bluefruit52Lib (core Adafruit nRF52): el servicio Nordic UART (NUS) actúa como puente entre un teléfono (app Bluefruit LE Connect) y el puerto serie USB. Comprender la publicidad, la conexión y la restricción clave: la SoftDevice tiene una prioridad superior a todo el código de usuario cuando la radio está activa.
Material
- 1× Adafruit Feather nRF52840 Express + cable micro-USB con datos
- 1× smartphone Android/iOS con la app Bluefruit LE Connect
- Core Adafruit nRF52 Boards ≥ 1.1.x + biblioteca Adafruit Bluefruit nRF52 Libraries
Código completo
// nrf52840-ble-peripheral-bluefruit.ino — inspire de l'exemple officiel bleuart
#include <bluefruit.h>
BLEUart bleuart; // service Nordic UART (caracteristiques RX/TX)
void setup {
Serial.begin(115200); // console USB CDC
Bluefruit.begin; // demarre la SoftDevice (orchestree FreeRTOS)
Bluefruit.setTxPower(4); // jusqu'a +8 dBm sur le module MDBT50Q
Bluefruit.setName("Feather52840");
bleuart.begin;
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addService(bleuart);
Bluefruit.Advertising.start(0); // advertising illimite
}
void loop {
if (bleuart.available) // telephone -> carte -> USB
Serial.write((uint8_t)bleuart.read);
if (Serial.available) // USB -> carte -> telephone
bleuart.write((uint8_t)Serial.read);
}
Verificación esperada
En Bluefruit LE Connect, el dispositivo «Feather52840» aparece, la conexión se realiza correctamente y la página UART muestra lo que se escribe en el monitor USB — y viceversa. El NeoPixel de la placa parpadea en azul durante la conexión (comportamiento de estado del BSP).
Errores frecuentes
- Timing estricto durante la radio: la SoftDevice «tiene una prioridad superior a todo el código de usuario, incluidas las interrupciones» — un control en tiempo real (NeoPixel estricto, tramas WS2812) puede fallar cuando BLE está activo.
- Perfil incorrecto seleccionado en la app: es el servicio *UART* el que se debe abrir, no «Bluetooth Low Energy» genérico.
Bluefruit.beginolvidado o después debleuart.begin: la pila debe iniciarse antes que los servicios.- Publicidad detenida silenciosamente: sin
start(0), no hay descubrimiento tras una desconexión.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
neopixel_pulsation.pyPythonled_bouton.pyPythonentrees_num.pyPythonanalogique_lumiere.pyPythonservo_pwm.pyPythonscanner_i2c.pyPython