Saludos a todos,
Estoy intentando conectar por Bluetooth dos placas Arduino (NANO 33 BLE y NANO 33 SENSE) como dispositivo central y periférico, respectivamente.
Hasta el momento, he conseguido que se conecten, pero no consigo avanzar más allá de ese punto.
A continuación pongo los códigos de ambos dispositivos y los mensajes que muestra el dispositivo central, para que vean hasta dónde llega a trabajar el código.
Si ven algo que me falta añadir para que el código llegue a realizar lo que en mi mente quiero que haga, por favor, indicádmelo, pues ya no veo más allá.
También me vale algún otro tutorial de la biblioteca BLE de Arduino (si puede ser que tenga ejemplos, mejor) pues al final me está liando más que ayudar.
Muchas gracias de antemano a todos.
Código de Arduino NANO 33 BLE, dispositivo central:
#include <ArduinoBLE.h> //libreria Bluetooth
BLEIntCharacteristic Caracteristica1("0002", BLERead | BLENotify); //declaramos caracteristica numero al servicio Servicio
unsigned int mseg = 4000;
bool ScanActive = 0;
int cuenta;
void setup() {
// put your setup code here, to run once:
delay(mseg);
Serial.begin(9600); //inicializamos la comunicacion monitor serie
if (!BLE.begin()) { //inicializamos Bluetooth
Serial.println("Fallo al inicializar BLE");
while (1);
}
Serial.println("Inicializamos el dispositivo BlueTooth central");
delay(mseg);
BLE.setLocalName("MiCentral"); //set nombre local
BLE.setConnectable(true); //el periferico es conectable después de publicitarlo
Serial.println("Indicamos dispositivo BLE central conectable");
delay(mseg);
}
void loop() {
// put your main code here, to run repeatedly:
if (!ScanActive) {
BLE.scan();
Serial.println("Escaneamos en busca de dispositivo BLE periferico");
ScanActive = 1;
delay(mseg);
}
BLEDevice periferico = BLE.available(); //dispositivo periferico disponible
Serial.println(periferico);
if (periferico) { //el dispositivo BLE esta disponible
Serial.println("Dispositivo BLE periferico esta disponible");
Serial.println(periferico);
delay(mseg);
if (periferico.hasLocalName()) { //dispone de localName?
Serial.print("Local name: ");
Serial.println(periferico.localName());
} //end haslocalname
else Serial.println("Local name: no encontrado");
if (periferico.hasAdvertisedServiceUuid()) { //dispone de Servicios?
Serial.print("Service UUIds: ");
for (int i = 0; i < periferico.advertisedServiceUuidCount(); i++) {
Serial.print(periferico.advertisedServiceUuid(i));
Serial.print(" ");
} //end for
Serial.println();
} //end hasadvertisedserviceuuid
else Serial.println("Service UUIDs: no encontrados");
delay(mseg);
if (periferico.localName() == "MiPeriferico") { //encontramos el dispositivo BLE que buscamos
BLE.stopScan(); //paramos el escaneo de dispositivos.
Serial.println("Conectando...");
delay(mseg);
if (periferico.connect()) { //Conectamos al dispositivo BLE encontrado
Serial.println("Conectado");
delay(mseg);
//añadimos descubrir atributos
Serial.println("Discovering attributes ...");
if (periferico.discoverAttributes()) {
Serial.println("Atributos descubiertos");
} else {
Serial.println("Fallo al descubrir atributos");
}
delay(mseg);
//fin del añadido descubrir atributos
Serial.print("Device name: ");
Serial.println(periferico.deviceName());
Serial.print("Local name: ");
Serial.println(periferico.localName());
delay(mseg);
if (Caracteristica1.valueUpdated()) {
cuenta = Caracteristica1.value();
Serial.println(cuenta);
delay(mseg);
} //end valueupdated
} //end periferico.connect
else {
Serial.println("Fallo en la conexion");
// BLE.disconnect();
periferico.disconnect();
Serial.println("Desconectado");
ScanActive = 0;
} //end else
delay(mseg);
} //end periferico.localName
} //end periferico
else {
Serial.println("Dispositivo BLE periferico no esta disponible");
Serial.println(periferico);
BLE.disconnect();
ScanActive = 0;
delay(mseg);
} //end else
} //end loop
Código de Arduino NANO 33 SENSE, dispositivo periférico:
#include <ArduinoBLE.h> //libreria Bluetooth
BLEService Servicio("0001"); //declaramos el servicio Servicio
BLEIntCharacteristic Caracteristica1("0002", BLERead | BLENotify); //declaramos caracteristica numero al servicio Servicio
int cuenta = 0;
unsigned int mseg = 4000;
bool Add = 0;
void setup() {
// put your setup code here, to run once:
delay(mseg);
Serial.begin(9600); //inicializamos la comunicacion monitor serie
if (!BLE.begin()) { //inicializamos Bluetooth
Serial.println("fallo al inicializar BLE");
while (1);
}
Serial.println("Inicializamos el dispositivo BlueTooth periferico");
delay(mseg);
BLE.setLocalName("MiPeriferico"); //set nombre local
BLE.setAdvertisedService(Servicio); //indicamos que el servicio tambien se publicite
Servicio.addCharacteristic(Caracteristica1); //añadimos caracteristica Caracteristica al servicio Servicio
BLE.addService(Servicio); //añadimos el servicio
BLE.setConnectable(true); //el periferico es conectable después de publicitarlo
Serial.println("Indicamos dispositivo BLE periferico conectable");
delay(mseg);
}
void loop() {
// put your main code here, to run repeatedly:
if (!Add) {
if (BLE.advertise()) { //publicitando periferico
Serial.println("Dispositivo BLE periferico visible");
Add = 1;
}
else {
Serial.println("Dispositivo BLE periferico no visible");
Add = 0;
}
delay(mseg);
}
BLEDevice zentral = BLE.central(); //preguntamos si central se ha conectado
Serial.println("Dispositivo BLE central conectando...");
delay(mseg);
if (zentral) { //si Lector esta disponible
Serial.println("Dispositivo BLE central conectado");
delay(mseg);
while (zentral.connected()) { //y mientras central permanezca conectado
Caracteristica1.writeValue(cuenta);
Serial.println(cuenta);
cuenta++;
if (cuenta == 30000) {
cuenta = 0;
}
}
}
else {
Serial.println("Dispositivo BLE central no conectado");
Add = 0;
}
delay(mseg);
}
Mensajes mostrados por el monitor serie del dispositivo central:
20:20:31.429 -> Indicamos dispositivo BLE central conectable
20:20:35.469 -> Escaneamos en busca de dispositivo BLE periferico
20:20:39.469 -> 1
20:20:39.469 -> Dispositivo BLE periferico esta disponible
20:20:39.469 -> 1
20:20:43.449 -> Local name: MiPeriferico
20:20:43.449 -> Service UUIds: 0001
20:20:47.489 -> Conectando...
20:20:51.489 -> Conectado
20:20:55.480 -> Discovering attributes ...
20:21:05.079 -> Fallo al descubrir atributos
20:21:09.079 -> Device name:
20:21:09.079 -> Local name: MiPeriferico
20:21:17.078 -> 0
20:21:17.078 -> Dispositivo BLE periferico no esta disponible
20:21:17.078 -> 0
20:21:22.109 -> Escaneamos en busca de dispositivo BLE periferico
20:21:26.109 -> 1
20:21:26.109 -> Dispositivo BLE periferico esta disponible
20:21:26.109 -> 1
20:21:30.109 -> Local name: MiPeriferico
20:21:30.109 -> Service UUIds: 0001
20:21:34.093 -> Conectando...
20:21:38.253 -> Conectado
20:21:42.253 -> Discovering attributes ...
20:21:50.172 -> Fallo al descubrir atributos
20:21:54.172 -> Device name:
20:21:54.172 -> Local name: MiPeriferico
20:22:02.172 -> 0
20:22:02.172 -> Dispositivo BLE periferico no esta disponible
20:22:02.172 -> 0
Mensajes mostrados por el monitor serie del dispositivo periférico:
20:23:11.770 -> Inicializamos el dispositivo BlueTooth periferico
20:23:15.769 -> Indicamos dispositivo BLE periferico conectable
20:23:19.799 -> Dispositivo BLE periferico visible
20:23:23.800 -> Dispositivo BLE central conectando...
20:23:27.813 -> Dispositivo BLE central no conectado
20:23:31.821 -> Dispositivo BLE periferico no visible
20:23:35.810 -> Dispositivo BLE central conectando...
20:23:39.820 -> Dispositivo BLE central no conectado
20:23:43.819 -> Dispositivo BLE periferico no visible
20:23:47.819 -> Dispositivo BLE central conectando...
20:23:51.819 -> Dispositivo BLE central no conectado
20:23:55.859 -> Dispositivo BLE periferico visible
20:23:59.840 -> Dispositivo BLE central conectando...
20:24:03.873 -> Dispositivo BLE central conectado
20:24:07.874 -> 0
20:24:07.874 -> 1
...