Go Down

Topic: Conexión por BLE de NANO 33 BLE y NANO 33 SENSE (Read 421 times) previous topic - next topic

rsanalo

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:
Code: [Select]
#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:
Code: [Select]
#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
...


Go Up