Introducción Teórica
El ESP32 es un microcontrolador de bajo costo con capacidad WiFi y Bluetooth, lo que lo convierte en una opción popular para proyectos de Internet de las Cosas (IoT). En el contexto de las aplicaciones móviles, una característica particularmente útil es el BLE (Bluetooth Low Energy), que permite la comunicación eficiente entre el ESP32 y una aplicación móvil.
El BLE, por su diseño de bajo consumo de energía, es ideal para aplicaciones de IoT donde la eficiencia energética es crítica. En la mecatrónica, BLE puede ser usado para monitorear y controlar sistemas mecánicos y electrónicos a través de un dispositivo móvil.
Aplicaciones Industriales
En la industria, el BLE se utiliza para el seguimiento de activos, la monitorización de condiciones y el control de maquinaria. En una planta de producción, por ejemplo, se podrían utilizar sensores BLE para monitorear la temperatura y la humedad, y enviar alertas a los dispositivos móviles de los operadores cuando las condiciones se salgan de los rangos definidos.
Explicación Técnica Detallada
El ESP32 integra un procesador de 32 bits, Wi-Fi y Bluetooth en un único chip, lo que lo hace ideal para aplicaciones de IoT. Para usar el ESP32 como un BLE Scanner, primero necesitamos configurar su radio Bluetooth para escuchar anuncios BLE.
BLE Scanner
Detecta dispositivos BLE cercanosAnuncios BLE
Paquetes de datos con información del dispositivoLos anuncios BLE son paquetes de datos enviados por dispositivos BLE para anunciar su presencia y capacidades. El siguiente código muestra cómo implementar un scanner BLE básico:
#include "BLEDevice.h"
#include "BLEScan.h"
#include "BLEAdvertisedDevice.h"
int scanTime = 5; // En segundos
BLEScan* pBLEScan;
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
Serial.print("Dispositivo encontrado: ");
Serial.print(advertisedDevice.getName().c_str());
Serial.print(" (");
Serial.print(advertisedDevice.getAddress().toString().c_str());
Serial.print(") RSSI: ");
Serial.println(advertisedDevice.getRSSI());
}
};
void setup() {
Serial.begin(115200);
Serial.println("Iniciando BLE Scanner...");
BLEDevice::init("");
pBLEScan = BLEDevice::getScan();
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true);
pBLEScan->setInterval(100);
pBLEScan->setWindow(99);
}
void loop() {
Serial.println("Escaneando...");
BLEScanResults foundDevices = pBLEScan->start(scanTime, false);
Serial.print("Dispositivos encontrados: ");
Serial.println(foundDevices.getCount());
Serial.println("Scan terminado!");
pBLEScan->clearResults();
delay(2000);
}
Ejercicios Prácticos Visuales
Objetivo: Detectar y mostrar dispositivos BLE cercanos.
Materiales: ESP32, smartphone con Bluetooth activado.
Hardware: Solo ESP32 (Bluetooth integrado).
Resultados esperados: Lista de dispositivos BLE con nombre, dirección MAC y RSSI.
Objetivo: Implementar filtros para buscar dispositivos específicos.
Materiales: ESP32, dispositivos BLE diversos.
Resultados esperados: Mostrar solo dispositivos que cumplan criterios específicos.
Objetivo: Conectar y leer datos de un dispositivo BLE específico.
Materiales: ESP32, sensor BLE (ejemplo: Mi Band, sensor de temperatura).
Resultados esperados: Conexión exitosa y lectura de características BLE.
// Scanner BLE con filtros avanzados
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void onResult(BLEAdvertisedDevice advertisedDevice) {
// Filtrar por RSSI mínimo
if (advertisedDevice.getRSSI() > -70) {
// Filtrar por nombre del dispositivo
if (advertisedDevice.haveName()) {
String deviceName = String(advertisedDevice.getName().c_str());
// Buscar dispositivos específicos
if (deviceName.indexOf("Sensor") >= 0 ||
deviceName.indexOf("ESP32") >= 0) {
Serial.println("=== Dispositivo de Interés ===");
Serial.print("Nombre: ");
Serial.println(advertisedDevice.getName().c_str());
Serial.print("Dirección: ");
Serial.println(advertisedDevice.getAddress().toString().c_str());
Serial.print("RSSI: ");
Serial.println(advertisedDevice.getRSSI());
// Mostrar datos del fabricante si están disponibles
if (advertisedDevice.haveManufacturerData()) {
std::string manufacturerData = advertisedDevice.getManufacturerData();
Serial.print("Datos del fabricante: ");
for (int i = 0; i < manufacturerData.length(); i++) {
Serial.printf("%02X ", (uint8_t)manufacturerData[i]);
}
Serial.println();
}
Serial.println("===============================");
}
}
}
}
};
Proyecto Aplicado
Sistema de monitoreo ambiental con BLE
Aplicación práctica en mecatrónica: Desarrollo de un sistema de monitorización ambiental que utiliza sensores BLE para recopilar datos de temperatura, humedad y calidad del aire, integrándolos con una aplicación móvil para visualización en tiempo real.
Integración con sensores/actuadores: Múltiples sensores BLE distribuidos, gateway ESP32 y aplicación móvil para monitoreo.
Lista de materiales:
- ESP32 (Gateway principal)
- Sensores BLE de temperatura/humedad
- Sensores BLE de calidad del aire
- Beacons BLE para localización
- Display OLED para status local
- Módulo WiFi para conectividad
- Carcasas protectoras IP54
- Baterías de larga duración
Funcionalidades del sistema:
- Escaneo automático de sensores BLE
- Recopilación de datos ambientales
- Filtrado inteligente de dispositivos
- Almacenamiento local y en la nube
- Alertas por valores críticos
- Interfaz móvil con mapas de calor
- Análisis histórico de datos
Evaluación y Troubleshooting
Problemas comunes:
- No se detectan dispositivos BLE
- Conexiones BLE inestables
- Alcance limitado de Bluetooth
- Interferencia con WiFi (2.4GHz)
- Problemas de emparejamiento
- Agotamiento rápido de batería
Soluciones:
- Verificar que Bluetooth esté habilitado
- Ajustar parámetros de scan (intervalo/ventana)
- Mantener dispositivos dentro del rango (10m)
- Separar canales WiFi y BLE
- Implementar reintentos automáticos
- Optimizar intervalos de conexión
Criterios de evaluación:
- Detección exitosa de dispositivos BLE cercanos
- Filtrado correcto por tipo de dispositivo
- Conexión estable a dispositivos específicos
- Lectura precisa de características BLE
- Manejo adecuado de desconexiones
- Interfaz de usuario intuitiva
- Rendimiento energético optimizado