Introducción a Bluetooth Classic en ESP32

Cuando pensamos en la familia de microcontroladores ESP, muchas veces se nos viene a la mente su capacidad WiFi, que es su característica más destacada. Sin embargo, el ESP32 también cuenta con Bluetooth, el cual, aunque menos utilizado, ofrece un gran potencial en una variedad de aplicaciones. Este artículo profundiza en cómo puedes aprovechar esta función en tus proyectos.

Si quieres explorar el uso de Bluetooth en el ESP32, este tutorial es una gran puerta de entrada. Conocerás las diferencias entre Bluetooth Classic y Bluetooth Low Energy, cómo configurar el protocolo Bluetooth en el ESP32 y cómo realizar un proyecto práctico que te permitirá controlar dispositivos de manera inalámbrica.

Índice de contenido
  1. Entendiendo Bluetooth Classic y Bluetooth Low Energy
    1. Bluetooth Classic
    2. Bluetooth Low Energy (BLE)
    3. Comparación entre Bluetooth Classic y BLE
  2. Estructura del protocolo Bluetooth en el ESP32
  3. Configuración del ESP32 para Bluetooth Serial
    1. Explicación del código
  4. Conexión del ESP32 a un teléfono Android
  5. Proyecto ESP32: Relay controlado por Bluetooth
    1. Conexiones necesarias
    2. Código para el ESP32
    3. Prueba del código

Entendiendo Bluetooth Classic y Bluetooth Low Energy

El ESP32 admite Bluetooth en modo dual, lo que significa que es compatible tanto con Bluetooth Classic como con Bluetooth Low Energy (BLE). Aunque ambos protocolos utilizan la misma banda de frecuencia de 2.4 GHz, tienen características y casos de uso distintos.

Bluetooth Classic

Bluetooth Classic, que es la tecnología original, se utiliza comúnmente para conexiones continuas de datos, como la transmisión de audio o la transferencia de archivos. Si has trabajado con módulos como el HC-05 o HC-06, has utilizado Bluetooth Classic sin saberlo.

Algunas características clave de Bluetooth Classic incluyen:

  • Transferencia de datos: Permite tasas de transferencia de hasta 3 Mbps.
  • Rango: Operativo a distancias cortas, generalmente hasta 100 metros.
  • Uso típico: Ideal para aplicaciones que requieren un flujo constante de datos.

Bluetooth Low Energy (BLE)

Bluetooth Low Energy, inicialmente conocido como Bluetooth Smart, es una versión optimizada para un bajo consumo de energía. Es ideal para aplicaciones donde la duración de la batería es crítica, como dispositivos portátiles y sensores.

Algunas características de BLE son:

  • Bajo consumo energético: Consume entre 0.01 y 0.5 W, lo que permite un funcionamiento prolongado.
  • Rango similar: Al igual que su contraparte, puede alcanzar hasta 100 metros.
  • Uso típico: Perfecto para aplicaciones IoT que requieren transmisión intermitente de datos.

Comparación entre Bluetooth Classic y BLE

Existen varias diferencias importantes entre estos dos tipos de Bluetooth:

CaracterísticaBluetooth ClassicBluetooth Low Energy
Consumo de energíaAlto (alrededor de 1 W)Bajo (0.01 a 0.5 W)
Tasa de transferencia de datosHasta 3 MbpsHasta 1 Mbps
RangoHasta 100 metrosHasta 100 metros
LatenciaHasta 100 msAlrededor de 6 ms
CompatibilidadMás común en dispositivos antiguosUsado en dispositivos modernos

Estructura del protocolo Bluetooth en el ESP32

Antes de comenzar a programar, es esencial comprender la estructura del protocolo Bluetooth. Esta se compone de dos partes: el host stack y el controller stack.

El host es el CPU principal que ejecuta el stack Bluetooth. El ESP-IDF soporta dos stacks: uno basado en BLUEDROID (que admite tanto Bluetooth Classic como BLE) y otro basado en Apache NimBLE (que es exclusivamente para BLE).

El controller stack, por su parte, se encarga del control del radio Bluetooth, transmitiendo datos entre el host y la conexión Bluetooth. Este proceso es vital para el funcionamiento del protocolo.

Configuración del ESP32 para Bluetooth Serial

A continuación, programaremos el ESP32 para que pueda comunicarse con un teléfono inteligente a través de Bluetooth. Utilizaremos el entorno de desarrollo Arduino IDE, así que asegúrate de tener el complemento de ESP32 instalado.

Para comenzar, abre el Arduino IDE y navega a File > Examples > BluetoothSerial > SerialtoSerialBT. El siguiente código se cargaría:

#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"); // Nombre del dispositivo Bluetooth
  Serial.println("El dispositivo ha comenzado, ahora puedes emparejarlo con Bluetooth!");
}

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
}

Una vez que hayas cargado el código, abre el monitor serial a 115200 baudios. Deberías ver un mensaje que dice: “El dispositivo ha comenzado, ahora puedes emparejarlo con Bluetooth!”.

Explicación del código

Este código establece una comunicación serial bidireccional entre el ESP32 y el dispositivo Bluetooth. Se incluye la biblioteca BluetoothSerial.h, que proporciona las funcionalidades necesarias para operaciones seriales a través de Bluetooth.

El código verifica si Bluetooth está habilitado correctamente. Luego, se crea un objeto de la clase BluetoothSerial llamado SerialBT, que inicializa el stack Bluetooth en el ESP32.

En la función setup(), se establece la comunicación serial y se inicializa el Bluetooth usando el método begin(), que toma como argumento el nombre del dispositivo Bluetooth que será visible para otros dispositivos durante el emparejamiento.

Conexión del ESP32 a un teléfono Android

Para establecer una conexión inalámbrica entre el ESP32 y un teléfono Android, sigue estos pasos:

  1. Asegúrate de que el ESP32 esté encendido y listo para establecer la conexión.
  2. En tu teléfono Android, activa el Bluetooth deslizando hacia abajo desde la parte superior de la pantalla.
  3. Pulsa y mantén el icono de Bluetooth y luego selecciona "Emparejar nuevo dispositivo".
  4. Selecciona el nombre del dispositivo Bluetooth que deseas emparejar (en este caso, ESP32test) y sigue las instrucciones en pantalla.
  5. Instala una aplicación de terminal Bluetooth en tu teléfono. Se recomienda "Serial Bluetooth Terminal", disponible en la Play Store.
  6. Abre la aplicación "Serial Bluetooth Terminal" y selecciona "Dispositivos" en la esquina superior izquierda.
  7. Selecciona "ESP32test" de la lista de dispositivos.
  8. Deberías recibir un mensaje de "Conectado". Así tu teléfono estará emparejado con el ESP32 y listo para comunicarse.
  9. Envía un mensaje en la aplicación, por ejemplo, "¡Hola!".
  10. El mensaje debería aparecer inmediatamente en el monitor serial de Arduino.
  11. También puedes enviar datos desde el monitor serial a tu teléfono. Escribe algo en la caja de entrada del monitor serial y presiona el botón “Enviar”.
  12. El mensaje debería aparecer en la aplicación de terminal Bluetooth.

Proyecto ESP32: Relay controlado por Bluetooth

Vamos a crear un proyecto simple que te permitirá controlar relés de forma inalámbrica mediante Bluetooth. Esto puede ser útil para aplicaciones de automatización del hogar, iluminación inteligente o sistemas de seguridad.

Conexiones necesarias

Conecta el módulo de relé al ESP32 según el siguiente diagrama. El ejemplo muestra el cableado para un módulo de relé de 2 canales; el cableado para un número diferente de canales es similar.

Código para el ESP32

Una vez que hayas completado el cableado, prueba 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

// GPIO donde está conectado el relé
const int relayPin = 5;

// Manejar mensajes recibidos
String message = "";

// Crear objeto BluetoothSerial
BluetoothSerial SerialBT;

void setup() {
  // Comenzar comunicación serial con Arduino y monitor serial
  Serial.begin(115200);

  // Inicializar relayPin como salida
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, HIGH);
  
  // Inicializar el stack Bluetooth
  SerialBT.begin("ESP32test"); // Nombre del dispositivo Bluetooth
  Serial.println("El dispositivo ha comenzado, ahora puedes emparejarlo con Bluetooth!");
}

void loop() {
  if (SerialBT.available()){
    char incomingChar = SerialBT.read();
    if (incomingChar != 'n'){
      message += String(incomingChar);
    } else {
      message = "";
    }
    Serial.write(incomingChar);  
  }

  // Comprobar mensaje recibido y controlar salida
  if (message == "on"){
    digitalWrite(relayPin, LOW);
  } else if (message == "off"){
    digitalWrite(relayPin, HIGH);
  }
  delay(20);
}

Prueba del código

Una vez que hayas cargado el código, abre el monitor serial a 115200 baudios y presiona el botón EN. Deberías ver un mensaje que dice: “El dispositivo ha comenzado, ahora puedes emparejarlo con Bluetooth!”.

Inicia la aplicación Serial Bluetooth Terminal y conéctate a tu ESP32. Ahora, cuando escribas “on” en la caja de entrada de la aplicación, el relé debería activarse instantáneamente. Igualmente, escribiendo “off” desactivarás el relé de inmediato.

Además, recibirás estos mensajes en el monitor serial de Arduino para su monitoreo. La aplicación ofrece varias macros que puedes personalizar para guardar mensajes predeterminados, como asociar M1 con el mensaje “on” y M2 con “off”. Esto agrega un nivel extra de conveniencia a tu proyecto.

Carlos Julián

Carlos Julián es el fundador de Ingtelecto, es Ingeniero Mecatrónico, Profesor y Programador, cuenta con una Maestria en Ciencias de la Educación, creador de contenido activo a través de TikTok @carlosjulian_mx

Estos temas te pueden interesar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir