En el mundo de la tecnología, el ESP32 se ha convertido en una herramienta esencial para los desarrolladores y entusiastas de la electrónica. En este artículo, exploraremos los conceptos básicos del ESP32 en relación con el uso de Bluetooth clásico. Descubre cómo esta tecnología puede ampliar las posibilidades de tus proyectos y crear conexiones inalámbricas de manera sencilla. ¡No te pierdas esta guía introductoria!
La mayoría de la gente asocia la familia de microcontroladores ESP con WiFi, lo cual tiene sentido ya que se han convertido en la solución preferida para poner en línea su proyecto de forma rápida y sencilla. Aunque la capacidad de Wi-Fi puede ser lo más destacado del espectáculo, el ESP32 también está equipado con Bluetooth. Simplemente no vemos que se use tanto.
Si desea utilizar Bluetooth en el ESP32, este tutorial es un excelente lugar para comenzar.
A través de ESP32 Bluetooth
El ESP32 admite Bluetooth de modo dual, lo que significa que admite ambos Bluetooth clásico Y Bluetooth de bajo consumo (BLE). Aunque estos dos protocolos comparten muchas cosas importantes, como la arquitectura, y ambos operan en la banda ISM (industrial, científica y médica) de 2,4 GHz, son muy diferentes entre sí.
Bluetooth clásico
La tecnología Bluetooth original, que conocemos por la conexión de nuestros teléfonos inteligentes a nuestros auriculares inalámbricos, ahora se llama Bluetooth Classic. Si alguna vez ha utilizado módulos puente de Bluetooth a serie como el HC-05 o HC-06 con un Arduino, sin saberlo, ha estado utilizando Bluetooth Classic.
Bluetooth Classic está diseñado para la transmisión de datos bidireccional continua con un alto rendimiento de aplicaciones (hasta 3 Mbps); muy eficaz, pero sólo para distancias cortas. Utiliza más de 79 canales en la banda ISM de 2,4 GHz.
Este tipo de Bluetooth se utiliza principalmente en proyectos en los que es necesario transmitir datos continuamente, como la transmisión de audio o la transferencia de archivos.
En este tutorial aprenderá cómo usar Bluetooth Classic en el ESP32.
Bluetooth de bajo consumo (BLE)
Bluetooth LE, originalmente comercializado como Bluetooth Smart y comúnmente conocido simplemente como BLE, está diseñado para funcionar con un consumo de energía muy bajo manteniendo el mismo rango de comunicación. Sin embargo, BLE es mucho más que una versión de bajo consumo de Bluetooth Classic. BLE opera en el mismo espectro de radio que Bluetooth Classic, pero usa un conjunto diferente de 40 canales a una velocidad de datos más baja (hasta 1 Mbps).
Es muy adecuado para proyectos de IoT donde el consumo de energía juega un papel clave, como proyectos en los que es necesario activar periódicamente el dispositivo, recopilar datos del sensor, transmitirlos a través de Bluetooth y luego ponerlo en suspensión.
Dado que usar ESP32 BLE es un poco más complicado que usar Bluetooth Classic, lo cubrimos en un tutorial separado.
Bluetooth clásico frente a BLE
BLE se utiliza principalmente para ahorrar energía, pero existen varias diferencias importantes.
El consumo de energía: Bluetooth Classic normalmente usa más energía (alrededor de 1 W), mientras que BLE está diseñado para usar baja energía (generalmente entre 0,01 y 0,5 W), lo que lo hace adecuado para dispositivos que funcionan con baterías que necesitan funcionar durante períodos más largos.
Tasas de transferencia de datos: Bluetooth Classic ofrece velocidades de datos más altas que BLE, lo que lo hace adecuado para proyectos que requieren una transferencia de datos rápida y continua, mientras que BLE está optimizado para ráfagas cortas de transferencia de datos.
Rango: Tanto BLE como Classic pueden cubrir hasta 100 metros, pero la distancia exacta varía según el entorno y la implementación.
Latencia: Las conexiones Bluetooth Classic tienen una latencia de hasta 100 ms, mientras que las conexiones BLE tienen una latencia de 6 ms. Recuerda que cuanto más bajo, mejor.
Compatibilidad: Bluetooth Classic es más común en dispositivos más antiguos, mientras que BLE se usa comúnmente en teléfonos inteligentes y otros dispositivos modernos.
Consulte la siguiente tabla que compara BLE y Bluetooth Classic con más detalle.
Bluetooth clásico | Bluetooth de bajo consumo (BLE) | |
velocidad de datos | 1 Mbps para BR2-3 Mbps para EDR | 500 kbps – 1 Mbps |
Banda de frecuencia | Banda ISM de 2,4 GHz | Banda ISM de 2,4 GHz |
cantidad de canales | 79 canales con espaciado de 1 MHz | 40 canales con espaciado de 2 MHz |
Rango de comunicación | 8 ma 100 m | 8 ma 100 m |
el consumo de energía | Alto (hasta 1W) | Bajo (0,01 W a 0,5 W) |
¿Es obligatorio el emparejamiento de dispositivos? | SÍ | No requerido |
Topologías soportadas | Punto a punto (1:1) | Punto a punto (1:1)Transmisión (1:muchos)Malla (muchos:muchos) |
Tecnología de modulación | GFSKπ/4 DQPSK8 DPSK | GFSK |
latencia | 35 ms | 2-16 ms (promedio 9 ms) |
Pila de protocolo Bluetooth ESP32
Antes de continuar, es importante comprender la pila de protocolos Bluetooth. Esto le ayudará a comprender por qué utilizamos determinadas funciones en nuestro código.
Básicamente, la pila del protocolo Bluetooth se divide en dos partes: una «pila de host» y una «pila de controlador».
El host es la CPU principal que ejecuta una pila Bluetooth. ESP-IDF actualmente admite dos pilas de host. La pila basada en BLUEDROID (estándar) admite Bluetooth Classic y BLE. La pila basada en Apache NimBLE, por otro lado, solo admite BLE.
La pila de controladores controla la radio Bluetooth. Básicamente, se comporta como una tubería de datos: los datos en serie que recibe se pasan a través de la conexión Bluetooth y los datos que ingresan desde el lado de Bluetooth se pasan al host.
La interfaz VHCI (interfaz HCI virtual implementada por software) permite la comunicación entre el host y el controlador.
Para más información, ver Arquitectura Bluetooth de Espressif Descripción.
Bosquejo de serie de Bluetooth
Programemos ahora el ESP32 para que pueda comunicarse con nuestro smartphone e intercambiar datos con él.
Usaremos el IDE de Arduino para programar el ESP32. Por lo tanto, asegúrese de tener instalado el complemento ESP32 antes de continuar:
Abra su IDE de Arduino y vaya a archivo > Ejemplos > BluetoothDe serie > SerialtoSerialBT. Debería cargarse el siguiente código.
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
Después de cargar el boceto, abra el monitor serie con velocidad de baudios 115200. Debería ver el siguiente mensaje: «¡El dispositivo se ha iniciado, ahora puede emparejarlo mediante Bluetooth!».
Explicación del código:
Este código establece una comunicación serie Bluetooth bidireccional entre dos dispositivos. El código comienza incluyendo la biblioteca BluetoothSerial.h, que proporciona las funciones necesarias para operaciones en serie a través de Bluetooth.
#include "BluetoothSerial.h"
El siguiente fragmento de código comprueba si Bluetooth está activado correctamente.
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif
A continuación, un objeto de la clase BluetoothSerial llamado SerialBT
es creado. Esto inicializa la pila Bluetooth en el ESP32 y se encarga de enviar y recibir datos. Puede consultar el archivo de implementación para esta clase. AquíInternamente, esta clase utiliza IDF. API clásica de Bluetooth.
BluetoothSerial SerialBT;
En la configuración, la comunicación serie se establece con una velocidad de baudios de 115200.
Serial.begin(115200);
Después begin()
Se llama al método del objeto BluetoothSerial y se encarga de la inicialización de la pila Bluetooth de nivel inferior. Este método acepta una cadena como entrada que contiene el nombre del dispositivo Bluetooth deseado. Este nombre es visible para otros dispositivos habilitados para Bluetooth durante su proceso de descubrimiento. Por defecto se llama ESP32test
Pero puedes cambiarle el nombre y darle un nombre único.
Tenga en cuenta que este método devuelve un valor booleano que indica si la inicialización fue exitosa o no. Hasta ahora no hemos verificado este valor, pero para un código sólido siempre debes incluir la verificación de errores.
SerialBT.begin("ESP32test"); //Bluetooth device name
La sección de bucle permite la transferencia de datos bidireccional entre el monitor serie y la serie Bluetooth ESP32.
La primera if
La instrucción verifica si hay datos disponibles en el puerto serie estándar (como cuando se envían datos desde un monitor serie en una PC). Si hay datos disponibles, se leerán con Serial.read()
y enviado a través de la conexión serie Bluetooth SerialBT.write()
. Cualquier dato que envíe desde su computadora a través del puerto serie se reenvía al dispositivo Bluetooth conectado.
if (Serial.available()) {
SerialBT.write(Serial.read());
}
El siguiente if
La instrucción verifica si hay datos disponibles desde la conexión serial Bluetooth (por ejemplo, cuando un dispositivo Bluetooth emparejado está enviando datos). Si hay datos disponibles, se leerán con SerialBT.read()
y enviado al monitor serie con Serial.write()
. Por lo tanto, todos los datos recibidos desde el dispositivo Bluetooth se reenvían a su monitor serie.
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
Conexión al teléfono Android
Configuremos una conexión inalámbrica entre el ESP32 y un teléfono Android. El proceso puede variar dependiendo de tu dispositivo, pero los pasos generales son bastante similares.
1. Asegúrese de que el ESP32 esté encendido y listo para conectar.
2. Ahora deslízate hacia abajo desde la parte superior de la pantalla de tu teléfono Android. y asegúrese de que Bluetooth esté activado.
3. Mantén presionado el ícono de Bluetoothluego toque «Emparejar nuevo dispositivo» y espere unos segundos.
4. Toque el nombre del dispositivo Bluetooth que desea emparejar con su dispositivo (en nuestro caso ESP32test). Sigue las instrucciones en la pantalla.
5. Para los siguientes pasos de este tutorial, necesitará una aplicación de terminal Bluetooth instalada en su teléfono inteligente. Recomendamos utilizar la aplicación de Android “Serial Bluetooth Terminal”, disponible en Play Store.
6. Después de la instalación, inicie la aplicación «Serial Bluetooth Terminal». Haga clic en el icono en la esquina superior izquierda y seleccione «Dispositivos».
7. Debería ver una lista de dispositivos a los que se ha conectado anteriormente. Seleccione «ESP32test» de esta lista.
8vo. Debería recibir un mensaje «Conectado». ¡Eso es todo! Su teléfono inteligente ahora está emparejado exitosamente con el ESP32 y listo para comunicarse.
9. Ahora ingresa algo en el campo de entrada en la parte inferior de la aplicación.por ejemplo «¡Hola!»
10. Debería recibir inmediatamente este mensaje en el Arduino IDE Serial Monitor.
11. También puede intercambiar datos entre su monitor serie y su teléfono inteligente. Ingrese algo en el campo de entrada superior del monitor en serie y presione el botón «Enviar».
12. Debería recibir este mensaje inmediatamente en la aplicación Serial Bluetooth Terminal.
Proyecto ESP32: relé controlado por Bluetooth
Creemos un proyecto simple que le permita controlar los relés de forma inalámbrica a través de Bluetooth. Esto puede resultar útil para la domótica, la iluminación inteligente, los sistemas de seguridad y otras aplicaciones similares.
alambrado
Conecte el módulo de relé al ESP32 como se muestra en el siguiente diagrama. El diagrama muestra el cableado de un módulo de relé de 2 canales; el cableado para un número diferente de canales es similar.
código ESP32
Cuando haya terminado de realizar el cableado, pruebe el siguiente esquema.
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif
// GPIO where relay is connected to
const int relayPin = 5;
// Handle received messages
String message = "";
// Create BluetoothSerial object
BluetoothSerial SerialBT;
void setup() {
// Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(115200);
// Initialize relayPin as an output
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);
// Initialize the Bluetooth stack
SerialBT.begin("ESP32test"); //Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
if (SerialBT.available()){
char incomingChar = SerialBT.read();
if (incomingChar != 'n'){
message += String(incomingChar);
}
else{
message = "";
}
Serial.write(incomingChar);
}
// Check received message and control output accordingly
if (message == "on"){
digitalWrite(relayPin, LOW);
}
else if (message == "off"){
digitalWrite(relayPin, HIGH);
}
delay(20);
}
Probando el código
Una vez que cargue el boceto, abra el monitor serie con velocidad de baudios 115200 y presione la tecla EN. Deberías ver el siguiente mensaje: «¡El dispositivo se ha iniciado, ahora puedes emparejarlo mediante Bluetooth!».
Inicie la aplicación Serial Bluetooth Terminal y conéctese a su ESP32.
Si ahora ingresa «on» en el campo de entrada en la parte inferior de la aplicación, el relé debería activarse inmediatamente. Al ingresar “off” también se desactivará el relé inmediatamente.
Además, recibirá estos mensajes con fines de monitoreo en Arduino IDE Serial Monitor.
La aplicación ofrece varias macros que puedes personalizar para guardar mensajes estándar. Por ejemplo, puede asociar M1 con el mensaje «Encendido» y M2 con el mensaje «Apagado». Esto le permite controlar fácilmente el relé utilizando las macros predefinidas, añadiendo aún más comodidad a su proyecto.
Introducción
La familia de microcontroladores ESP se asocia comúnmente con WiFi, lo cual tiene sentido, ya que se han convertido en la solución principal para conectar rápidamente tus proyectos a Internet. Sin embargo, aunque la capacidad de WiFi pueda ser la protagonista, el ESP32 también está equipado con Bluetooth. Simplemente no lo vemos siendo utilizado con tanta frecuencia.
Acerca de ESP32 Bluetooth
El ESP32 soporta Bluetooth de doble modo, lo que significa que es compatible tanto con Bluetooth Clásico como con Bluetooth de Bajo Consumo (BLE). Estos dos protocolos comparten muchas cosas importantes, como la arquitectura, y ambos operan en la banda de 2.4 GHz del ISM (Industrial, Científico y Médico), pero son bastante diferentes entre sí.
Bluetooth Clásico
La tecnología Bluetooth original, la que conocemos al emparejar nuestros teléfonos con nuestros auriculares inalámbricos, ahora se conoce como Bluetooth Clásico. Este tipo de Bluetooth está diseñado para transferencia de datos bidireccional continua con un alto rendimiento de aplicación (hasta 3 Mbps); altamente efectivo, pero solo para distancias cortas. Se utiliza más de 79 canales en la banda de 2.4 GHz ISM.
Bluetooth de Bajo Consumo (BLE)
Bluetooth LE, originalmente comercializado como Bluetooth Smart y comúnmente conocido como BLE, está diseñado para operación con muy bajo consumo de energía manteniendo un rango de comunicación similar. Sin embargo, BLE va mucho más allá de ser una versión de bajo consumo de Bluetooth Clásico. BLE opera en el mismo rango de espectro de radio que Bluetooth Clásico, pero utiliza un diferente conjunto de 40 canales a una tasa de datos más baja (hasta 1 Mbps).
Comparación entre Bluetooth Clásico y BLE
Existen varias diferencias importantes entre Bluetooth Clásico y BLE incluyendo el consumo de energía, tasas de transferencia de datos, alcance, latencia y compatibilidad. Estas diferencias afectan la elección de qué tipo de Bluetooth utilizar en tus proyectos.
Arquitectura del Protocolo Bluetooth del ESP32
Antes de proceder, es importante comprender la arquitectura del protocolo Bluetooth. Esto te ayudará a entender por qué se utilizan ciertas funciones en nuestro código.
Sketch de Bluetooth Serial
Permite programar el ESP32 para que pueda comunicarse con nuestro teléfono inteligente e intercambiar datos con él. Este sketch establece una comunicación serial bidireccional por Bluetooth entre los dos dispositivos.
Conexión al Teléfono Android
Configura una conexión inalámbrica entre el ESP32 y un teléfono Android para habilitar la comunicación por Bluetooth. El proceso puede variar según el dispositivo, pero los pasos generales son similares.
Proyecto ESP32: Relé Controlado por Bluetooth
Este proyecto te permite controlar relés de forma inalámbrica utilizando Bluetooth. Esta funcionalidad es útil para aplicaciones de automatización del hogar, iluminación inteligente, sistemas de seguridad y otras aplicaciones similares.