El ESP32 cuenta con Bluetooth integrado, que nos permite establecer de forma sencilla una comunicación inalámbrica con otros dispositivos (como smartphones, ordenadores, etc)
El ESP32 soporta tanto Bluetooth Classic como BLE (Bluetooth Low Energy). Hoy vamos a ver el Bluetooth Classic (en la siguiente entrada veremos el BLE).
Voy a llamar al Bluetooth Classic al “normal”, al de toda la vida, simplemente para diferenciarlo del BLE.
Bluetooth Classic es una tecnología de comunicación inalámbrica que opera en la banda de 2.4 GHz y permite la transmisión de datos entre dispositivos a distancias cortas (generalmente hasta 10 metros).
- Banda de frecuencia: 2.4 GHz (ISM band).
- Alcance: Hasta 10 metros (puede extenderse con amplificadores).
- Velocidad de transmisión: Hasta 3 Mbps (en la versión 2.0 + EDR).
- Topología: Conexiones punto a punto (P2P) o multipunto.
- Seguridad: Soporta autenticación y cifrado.
Una de las aplicaciones más comunes y útiles de esta tecnología es la comunicación por puerto de serie, que permite enviar y recibir datos entre el ESP32 y otro dispositivo mediante Bluetooth.
Comunicación Serial sobre Bluetooth Classic
La comunicación serie es un método sencillo para transferir datos entre dispositivos como una secuencia de bits (seguro que ya la habréis usado, por ejemplo, con un cable USB).
BluetoothSerial es una librería integrada en el entorno ESP32 que permite la comunicación por Bluetooth en el modo clásico. Este modo se basa en el perfil SPP (Serial Port Profile), que emula una conexión serial sobre un canal inalámbrico.
Vamos a ver cómo usarlo con un ejemplo,
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32_BT_Classic"); // Nombre del dispositivo Bluetooth
Serial.println("El dispositivo Bluetooth está listo para emparejarse.");
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read()); // Envía datos desde el monitor serie al Bluetooth
}
if (SerialBT.available()) {
Serial.write(SerialBT.read()); // Envía datos desde el Bluetooth al monitor serie
}
}
- Incluir la biblioteca
BluetoothSerial
: Esta biblioteca facilita la implementación de Bluetooth Classic en el ESP32. - Creamos una instancia de
BluetoothSerial
:SerialBT
es el objeto que maneja la comunicación Bluetooth. - Inicializar Bluetooth: En
setup()
, llamamos aSerialBT.begin("ESP32_BT_Classic")
para iniciar el dispositivo Bluetooth con el nombre “ESP32_BT_Classic”. - Comunicación bidireccional: En
loop()
, el código verifica si hay datos disponibles en el puerto serie o en el Bluetooth y los transmite en consecuencia.
Conexión desde un dispositivo externo
Para probar este ejemplo, sigue estos pasos:
- Cargar el código en el ESP32: Conecta tu ESP32 al ordenador y carga el código anterior.
- Emparejar el dispositivo: En tu teléfono o computadora, busca dispositivos Bluetooth y selecciona “ESP32_BT_Classic”.
- Conectar con una aplicación de terminal: Usa una aplicación de terminal Bluetooth (como Serial Bluetooth Terminal en Android) para conectarte al ESP32 y enviar/recepcionar datos.
Una vez que la conexión Bluetooth está establecida, puedes enviar y recibir datos entre el ESP32 y el otro dispositivo.
Por ejemplo, puedes utilizar las funciones disponibles en la librería BluetoothSerial para enviar y recibir datos como si estuvieras utilizando un puerto de serie físico.
Ejemplos prácticos
Control remoto de dispositivos
Bluetooth Classic es muy útil para aplicaciones de control remoto (como el manejo de robots o sistemas domésticos inteligentes).
Aquí hay un ejemplo básico de cómo controlar un LED conectado al ESP32 desde un teléfono inteligente:
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
const int ledPin = 2; // Pin del LED
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
SerialBT.begin("ESP32_LED_Control");
Serial.println("Listo para recibir comandos.");
}
void loop() {
if (SerialBT.available()) {
char command = SerialBT.read();
if (command == '1') {
digitalWrite(ledPin, HIGH); // Encender LED
SerialBT.println("LED encendido");
} else if (command == '0') {
digitalWrite(ledPin, LOW); // Apagar LED
SerialBT.println("LED apagado");
}
}
}
Transmisión de audio
Bluetooth Classic es muy utilizado para la transmisión de audio (como en auriculares inalámbricos).
Aunque el ESP32 no tiene hardware dedicado para la transmisión de audio de alta calidad, es posible implementar soluciones básicas utilizando bibliotecas como ESP32-A2DP.
#include "BluetoothA2DPSource.h"
BluetoothA2DPSource a2dp_source;
void setup() {
a2dp_source.start("ESP32_Audio"); // Nombre del dispositivo Bluetooth
}
void loop() {
// Aquí puedes agregar lógica para manejar la transmisión de audio
}