Aquest és un exemple senzill en el que podrem activar i desactiva run LED (en principi, el de la placa) mitjançant Bluetooth. Per provar l'exemple farem servir una aplicació genèrica que podem descarregar en el nostre telèfon mòbil, en aquest cas LightBlue® (de Punch Through), que podem trobar a GooglePlay i a AppStore.
El programa és relativament senzill. Primer crearem dos UUID, un per al servei i un per a la característica. Després inicialitza i configura la communicació BLE. En el loop, si hi ha una connexió amb l'element central, esperem rebre la comanda i, quan la rebem, encenem o apaguem el LED, segons correspongui. El programa és el següent:
#include <ArduinoBLE.h> #define ledPin 6 // Posem 6 per al de la placa
const char* devUuid = "0000FFE0-0000-1000-8000-00805F9B34FB"; const char* charUuid = "0000FFE1-0000-1000-8000-00805F9B34FB"; String comanda; BLEService Serv(devUuid); BLEStringCharacteristic Character(charUuid, BLERead | BLEWrite, 512);
void setup() {
Serial.begin(9600);
while (!Serial); // Espera que s'activi el canal sèrie
pinMode(ledPin, OUTPUT); // initialize the built-in LED pin to indicate when a central is connected
if (!BLE.begin()) { // Inicialitza BLE
Serial.println("BLE ha fallat");
while (1);
} else {
Serial.println("BLE inicialitzat");
}
// Dona el nom que serà visible
BLE.setLocalName("MKR Wi-Fi 1010");
BLE.setAdvertisedService(Serv);
// Afegeix la característica
Serv.addCharacteristic(Character);
// Activa el servei
BLE.addService(Serv);
// Inicialitza el valor per a la característica
Character.writeValue("");
// Fa el dispositiu visible
BLE.advertise();
}
void loop() {
// Definim l'element que controla la connexió
BLEDevice central = BLE.central();
// Si hi ha un element central connectat
if (central) {
Serial.print("Connectat a l'element central ");
// Agafa l'adreça MAC
Serial.println(central.address());
// Instruccions que es faran mentre es mantingui la connexió
while (central.connected()) {
// Si detecta que ens han enviat una comanda
if (Character.written()) {
comanda = Character.value();
Serial.print(F("comanda: "));
Serial.println(comanda);
if (comanda == "On") {
Serial.println(F("LED on"));
digitalWrite(ledPin, HIGH); // Encén el LED
}
if (comanda == "Off") {
Serial.println(F("LED off"));
digitalWrite(ledPin, LOW); // Apaga el LED
}
}
}
// Si es desconnecta
Serial.print(F("Desconnectat a l'element central "));
Serial.println(central.address());
}
}
A l'hora de provar el programa, hem de tenir en compte que aquest no s'iniciarà fins que no obrim el monitor sèrie. Així ens assegurem que no perdem cap informació. Si no ens interessa aquest bloqueig, haurem de suprimir la línia que hem marcat en color.
Per provar-ho, activem Bluetooth al nostre telèfon i obrim l'aplicació LightBlue. Ens sortirà una pantalla inicial en la que triarem el dispositiu amb el que ens volem connectar, en el nostre cas serà el primer.

Picant sobre el nom que hem donat al nostre dispositiu Bluetooth veurem una nova pantalla amb les propietats corresponents i les característiques disponibles.

En aquest cas només hi ha una característica disponible. Si piquem sobre el seu UUID podrem accedir a la pantalla que farem servir per enviar i rebre informació de la característica.

En el desplegable, haurem de triar l'opció UTF-8 String perquè hem posat una característica de tipus text. Podem escriure On i picar el botó WRITE cada cop que desitgem encendre el LED. Per apagar-lo escriuríem Off.
Encara que en propers exemples crearem les nostres pròpies aplicacions, l'aplicació LightBlue ens pot ser útil per fer proves o per detectar errors.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.