Explicación del código de ejemplo Arduino BLE
En esta serie de tutoriales, te daré una idea básica que necesitas saber sobre Bluetooth Low Energy y te mostraré cómo puedes hacer Arduino BLE Chipset para enviar y recibir datos de forma inalámbrica desde teléfonos móviles y otras placas Arduino. Empecemos.
Arduino Nano 33 BLE Sense
Hoy, estoy aquí con una nueva versión de Arduino Nano – Arduino Nano 33 BLE Sense, Nano con conectividad BLE centrado en IOT, que está lleno de una amplia variedad de sensores tales como 9 ejes Unidad de Medición Inercial, presión, luz, e incluso gestos sensores y un micrófono.
Funciona con el módulo Nina B306, que admite la conexión BLE y Bluetooth 5. El módulo Bluetooth incorporado consume muy poca energía y se puede acceder a él fácilmente utilizando las bibliotecas de Arduino. Esto facilita la programación y habilita la conectividad inalámbrica de cualquiera de sus proyectos en un abrir y cerrar de ojos. No tendrás que utilizar módulos Bluetooth externos para añadir capacidad Bluetooth a tu proyecto. Ahorra espacio y energía.
Arduino BLE – Introducción a Bluetooth Low Energy
BLE es una versión de Bluetooth optimizada para situaciones de consumo de energía muy bajo con una velocidad de transmisión de datos muy baja. Podemos hacer funcionar estos aparatos con una pila de botón durante semanas o incluso meses.
Arduino tiene una maravillosa introducción a BLE pero aquí en este post, te daré una breve introducción para que puedas empezar con la comunicación BLE.
Básicamente, hay dos tipos de dispositivos cuando consideramos un bloque de comunicación BLE.
- El dispositivo periférico
- El dispositivo central
El Dispositivo Periférico es como un Tablón de Anuncios, desde donde podemos leer datos de varios anuncios o fijar nuevos anuncios al tablón. Publica datos para todos los dispositivos que necesiten esta información.
Los Dispositivos Centrales son como personas que leen avisos del tablón de anuncios. Varios usuarios pueden leer y obtener datos del tablón de anuncios al mismo tiempo. Del mismo modo, varios dispositivos centrales pueden leer datos del dispositivo periférico al mismo tiempo.
La información que dan los Periféricos se estructuran como Servicios. Y estos servicios se dividen a su vez en características. Piense en los servicios como diferentes avisos en el tablón de anuncios y en los servicios como diferentes párrafos en cada tablón de anuncios.
Si Acelerómetro es un servicio, entonces sus valores X, Y y Z pueden ser tres características.
Veamos ahora un ejemplo sencillo de Arduino BLE.
Arduino BLE Ejemplo 1 – Indicador de nivel de batería
En este ejemplo, voy a explicar cómo se puede leer el nivel de una batería conectada al pin A0 de un Arduino usando un smartphone a través de BLE. Este es el código. Este código es prácticamente el mismo que el del ejemplo de código del Monitor de Batería, con pequeños cambios. Se lo explicaré.
Primero tienes que instalar la librería ArduinoBLE desde el gestor de librerías.
Sólo tienes que ir a Sketch -> Include Library -> Manage Library y busque ArduinoBLE y simplemente instálelo.
Arduino BLE Tutorial Indicador de nivel de batería Código
#include BLEService batteryService("1101"); BLEUnsignedCharCharacteristic batteryLevelChar("2101", BLERead | BLENotify); void setup() { Serial.begin(9600); while (!Serial); pinMode(LED_BUILTIN, OUTPUT); if (!BLE.begin()) { Serial.println("¡Fallo al iniciar BLE!"); mientras (1); } BLE.setLocalName("BatteryMonitor"); BLE.setAdvertisedService(batteryService); batteryService.addCharacteristic(batteryLevelChar); BLE.addService(batteryService); BLE.advertise(); Serial.println("Dispositivo Bluetooth activo, esperando conexiones..."); } void bucle() { BLEDevice central = BLE.central(); si (central) { Serial.print("Conectado a la central: "); Serial.println(central.address()); digitalWrite(LED_BUILTIN, HIGH); while (central.connected()) { int batería = analogRead(A0); int nivelbatería = map(batería, 0, 1023, 0, 100); Serial.print("Nivel de batería % es ahora: "); Serial.println(nivelbatería); batteryLevelChar.writeValue(batteryLevel); delay(200); } } digitalWrite(LED_BUILTIN, LOW); Serial.print("Desconectado de la central: "); Serial.println(central.address()); }
Explicación del código del indicador de nivel de batería Bluetooth de Arduino
#include BLEService batteryService("1101"); BLEUnsignedCharCharacteristic batteryLevelChar("2101", BLERead | BLENotify);
La primera línea del código es incluir el archivo ArduinoBLE.h. Entonces declararemos el Servicio de Batería así como las características del nivel de batería aquí. Aquí vamos a dar dos permisos – BLERead y BLENotify.
BLERead permitirá a los dispositivos centrales (teléfono móvil) leer datos del dispositivo periférico (Arduino). Y BLENotify permite a los clientes remotos recibir notificaciones si esta característica cambia.
Ahora pasaremos a la función Setup.
Serial.begin(9600); while (!Serial); pinMode(LED_BUILTIN, OUTPUT); if (!BLE.begin()) { Serial.println("¡Fallo al iniciar BLE!"); mientras (1); }
Aquí inicializará la Comunicación Serial y BLE y esperará a que se abra el monitor serial.
Establece un nombre local para el dispositivo BLE. Este nombre aparecerá en los paquetes publicitarios y puede ser utilizado por dispositivos remotos para identificar este dispositivo BLE.
BLE.setLocalName("BatteryMonitor"); BLE.setAdvertisedService(batteryService); batteryService.addCharacteristic(batteryLevelChar); BLE.addService(batteryService);
Aquí añadiremos y estableceremos el valor para el UUID del Servicio y la Característica.
BLE.advertise(); Serial.println("Dispositivo Bluetooth activo, esperando conexiones...");
Y aquí, empezaremos a anunciar BLE. Empezará a transmitir continuamente paquetes de publicidad BLE y será visible para los dispositivos centrales BLE remotos hasta que reciba una nueva conexión.
BLEDevice central = BLE.central(); si (central) { Serial.print("Conectado a la central: "); Serial.println(central.address()); digitalWrite(LED_BUILTIN, HIGH);
Y aquí, la función de bucle. Una vez que todo está configurado y han comenzado la publicidad, el dispositivo esperará a cualquier dispositivo central. Una vez conectado, mostrará la dirección MAC del dispositivo y encenderá el LED incorporado.
while (central.connected()) { int batería = analogRead(A0); int nivelbatería = map(batería, 0, 1023, 0, 100); Serial.print("Nivel de batería % es ahora: "); Serial.println(nivelbatería); batteryLevelChar.writeValue(batteryLevel); delay(200); }
Ahora, comenzará a leer la tensión analógica de A0, que será un valor entre 0 y 1023 y lo mapeará en el rango de 0 a 100. Se imprimirá el nivel de batería en el monitor serie y se escribirá el valor para la charecterística batteryLevelchar y se esperará 200 ms. Después de que todo el bucle se ejecutará de nuevo, siempre y cuando el dispositivo central está conectado a este dispositivo periférico.
digitalWrite(LED_BUILTIN, LOW); Serial.print("Desconectado de la central: "); Serial.println(central.address());
Una vez desconectado, se mostrará un mensaje en el dispositivo central y el LED se apagará.
Instalación de la aplicación para Android
En su smartphone Android, instale la aplicación “nRF Connect”. Ábrelo e inicia el escáner. Verá el dispositivo “Monitor de batería” en la lista de dispositivos. Ahora pulse sobre conectar y se abrirá una nueva pestaña.
Pulsa sobre el servicio Batería y verás los niveles de batería que lee el Arduino.
En el próximo post, voy a mostrar cómo se puede enviar valores de los sensores incorporados, tales como acelerómetro, giroscopio, sensor de color y sensor de gestos desde el Arduino a su teléfono, así como otro Arduino a través de BLE.