Omet navegació

12) Control de dispositius amb el Bluetooth i un telèfon

Anem a veure com controlar un dispositiu amb un telèfon amb el Bluetooth habilitat. Això és útil per controlar robotets mentre estiguen dins l'abast del Bluetooth del telèfon.

Fes el muntatge següent:

3Leds + NanoArduino 33 IoT amb Bluetooth

Al programa que tens a continuació hem definit 2 blocs de codi que s'executen quan envie el número |«1», «2», o «3» per Bluetooth utilitzant la app «LightBlue» disponible en Android o IOS de forma gratuïta.

Instal·la aquesta APP, habilita el Bluetooth al teu mòbil, carrega aquest programa al teu «Nanoarduino 33 IoT» després d'haver instal·lat la llibreria ArduinoBle al teu ordinador , canvia el nom del «Nano33profe» al programa per no haver de mirar la MAC per veure amb quin Arduino et connectes si sous varis els alumnes que proveu aquest programa al mateix temps.

Quan no envie res per Bluetooth el programa atura els Leds que es puguen haver quedat engegats per error.

Quan desconnectes «NanoArduino 33 IoT» de la central  de «LightBlue» el programa deixa els Leds aturats per evitar que consumisquen per error. Fixa't en el programa i en aquestes parts.

Revisa, adapta i carrega el programa de més avall, i obri el «Serial Terminal»,

Ble Serial Monitor

A continuació connecta el «Nano33profe», ves a la secció «Digital output», i escriu els valors 1, 2, i 3.

LightBlue-01 LightBlue-02 LightBlue-03

Ací tens el programa per revisar i adaptar.

// Aquest programa és derivat d'un exemple de Fabricio Troya
// Font: https://docs.arduino.cc/tutorials/nano-33-iot/Bluetooth

// ATENCIÓ: Cal instal·lar la llibreria ArduinoBle #include <ArduinoBLE.h> long previousMillis = 0; int interval = 0; int ledState = LOW; int pinLed = 10; int pinLed2 = 11; int pinLed3 = 12; BLEService ledService("180A"); // BLE LED Service // BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central BLEByteCharacteristic switchCharacteristic("2A57", BLERead | BLEWrite); void setup() {  Serial.begin(9600);  while (!Serial);  // set built in LED pin to output mode  pinMode(LED_BUILTIN, OUTPUT);    pinMode(pinLed, OUTPUT);  pinMode(pinLed2, OUTPUT);  pinMode(pinLed3, OUTPUT);  // begin initialization  if (!BLE.begin()) {    Serial.println("starting BLE failed!");    while (1);  } // Canvia «professor» pel teu nom o no podreu diferenciar sense mirar la MAC quin Arduino és el teu  // set advertised local name and service UUID:  BLE.setLocalName("Nano33profe");  BLE.setAdvertisedService(ledService);  // add the characteristic to the service  ledService.addCharacteristic(switchCharacteristic);  // add service  BLE.addService(ledService);  // set the initial value for the characteristic:  switchCharacteristic.writeValue(0);  // start advertising  BLE.advertise();  Serial.println("BLE LED Peripheral"); } void loop() {  // listen for BLE peripherals to connect:  BLEDevice central = BLE.central();  // if a central is connected to peripheral:  if (central) {    Serial.print("Connected to central: ");    // print the central's MAC address:    Serial.println(central.address());    // while the central is still connected to peripheral:    while (central.connected()) {      // if the remote device wrote to the characteristic,      // use the value to control the LED:      if (switchCharacteristic.written()) {        switch (switchCharacteristic.value()) {   // any value other than 0          case 01:             Serial.println("Bloc primer de Leds");              for (int i = 0; i <= 10; i++) { //Repetim 10 vegades al programa             Serial.println("Engeguem el led del pin 10");             digitalWrite(pinLed, HIGH);             delay(500);             Serial.println("Aturem el led del pin 10");             digitalWrite(pinLed, LOW);             delay(500);             Serial.println("Engeguem el led del pin 11");             digitalWrite(pinLed2, HIGH);             delay(500);             Serial.println("Aturem el led del pin 11");             digitalWrite(pinLed2, LOW);             delay(500);             Serial.println("Engeguem el led del pin 12");             digitalWrite(pinLed3, HIGH);             delay(500);             Serial.println("Aturem el led del pin 12");             digitalWrite(pinLed3, LOW);             delay(500);             }// final del for            break;          case 02:             Serial.println("Bloc segon de Leds");             for (int i = 0; i <= 25; i++) { //Repetim 25 vegades al programa             Serial.println("Engeguem el led del pin 10");             digitalWrite(pinLed, HIGH);             delay(100);             Serial.println("Aturem el led del pin 10");             digitalWrite(pinLed, LOW);             delay(100);             Serial.println("Engeguem el led del pin 11");             digitalWrite(pinLed2, HIGH);             delay(100);             Serial.println("Aturem el led del pin 11");             digitalWrite(pinLed2, LOW);             delay(100);             Serial.println("Engeguem el led del pin 12");             digitalWrite(pinLed3, HIGH);             delay(100);             Serial.println("Aturem el led del pin 12");             digitalWrite(pinLed3, LOW);             delay(100);             }// final del for            break;          case 03:             Serial.println("Bloc tercer de Leds");             for (int i = 0; i <= 25; i++) { //Repetim 25 vegades al programa             Serial.println("Engeguem el led del pin 10");             digitalWrite(pinLed, HIGH);             delay(50);             Serial.println("Aturem el led del pin 10");             digitalWrite(pinLed, LOW);             delay(50);             Serial.println("Engeguem el led del pin 11");             digitalWrite(pinLed2, HIGH);             delay(50);             Serial.println("Aturem el led del pin 11");             digitalWrite(pinLed2, LOW);             delay(50);             Serial.println("Engeguem el led del pin 12");             digitalWrite(pinLed3, HIGH);             delay(50);             Serial.println("Aturem el led del pin 12");             digitalWrite(pinLed3, LOW);             delay(50);             }// final del for            break;          default:            Serial.println(F("Estat dels LEDs quan no enviem res per Bluetooth "));            digitalWrite(pinLed, LOW);         // Aturem el Led            digitalWrite(pinLed2, LOW);        // Aturem el Led            digitalWrite(pinLed3, LOW);        // Aturem el Led            break;        }      }    }    // when the central disconnects, print it out:    Serial.print(F("Disconnected from central: "));    Serial.println(central.address());    // Estat dels LEDs quan desconnectem la Central Bluetooth del mòbil del dispositiu muntat amb «Nanoarduino 33 IoT»    digitalWrite(pinLed, LOW);         // Aturem el Led    digitalWrite(pinLed2, LOW);        // Aturem el Led    digitalWrite(pinLed3, LOW);        // Aturem el Led  } }