🛠 Créer un périphérique Bluetooth LE piloté depuis le téléphone
Objetivos
Activar el Bluetooth Low Energy del módulo NINA-W102 con la biblioteca ArduinoBLE: la placa se convierte en periférico, difunde un servicio personalizado con una característica de lectura/escritura, y un teléfono (aplicación gratuita nRF Connect) enciende el LED D6 al escribir 0 o 1. La MKR WiFi 1010 es una de las pocas plataformas de microcontrolador que funciona como cliente BLE y como host.
Material
- 1 × Arduino MKR WiFi 1010
- 1 × smartphone Android/iOS con nRF Connect (o la app Arduino NINA BLE)
- Biblioteca ArduinoBLE instalada a través del IDE
- Firmware NINA actualizado (el BLE comparte el módulo con el WiFi)
Código completo
#include "ArduinoBLE.h"
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedCharCharacteristic ledChar(
"19B10001-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);
void setup {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT); // D6
if (!BLE.begin) { Serial.println("BLE KO"); while (1); }
BLE.setLocalName("MKRWiFi1010");
BLE.setAdvertisedService(ledService);
ledService.addCharacteristic(ledChar);
BLE.addService(ledService);
ledChar.writeValue(0);
BLE.advertise;
Serial.println("en attente d'un central...");
}
void loop {
BLEDevice central = BLE.central;
if (central) {
Serial.printf("connecte: %s\n", central.address.c_str);
while (central.connected) {
if (ledChar.written)
digitalWrite(LED_BUILTIN, ledChar.value);
BLE.poll; // fait tourner la pile BLE
}
Serial.println("deconnecte");
}
}
Verificación esperada
En nRF Connect, el dispositivo «MKRWiFi1010» aparece en el escaneo; al conectarse, se encuentra el servicio y su característica, y escribir 01 enciende el LED D6, 00 lo apaga. El monitor serie muestra la dirección MAC del central conectado y luego «deconnecte» al desconectarse.
Errores frecuentes
- Olvidar
BLE.pollen el bucle interno: las escrituras del central nunca se procesan. - Probar BLE y WiFi simultáneamente con el firmware estándar de Arduino: el firmware oficial está orientado a WiFi; el uso combinado requiere reprogramar el módulo (y rompe la certificación RF — advertencia oficial de Arduino).
- UUID propios no únicos: reutilice el prefijo
19B1xxxx-E8F2-537E-4F6C-D104768A1214para evitar colisiones con servicios estándar. BLE.beginfalla (BLE KO): el firmware NINA no está actualizado, o otro sketch aún ocupa el módulo — reinicie la placa.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
scan-wifi.inoArduinoconnexion-wpa2.inoArduinohttp-get.inoArduinoserveur-web-led.inoArduinohorloge-ntp.inoArduinoudp-diffusion.inoArduino