Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Controlem l'encesa d'un LED des d'una aplicació genèrica

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.

Pantalla

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

Pantalla           Pantalla

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.

Pantalla           Pantalla

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.

 

 

 

 

 

 

 

 

 

 

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