Módulo 5

Aplicaciones con celulares: ESP32 BLE Scanner

Conectividad Inalámbrica

ESP32 Mecatrónica IoT UNAM

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.

Ventajas del BLE: Bajo consumo energético, fácil integración con smartphones, comunicación bidireccional y soporte nativo en aplicaciones móviles.
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 cercanos
Anuncios BLE
Paquetes de datos con información del dispositivo

Los 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:

C++ - BLE Scanner 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);
}
Nota: No se requiere hardware adicional ya que utilizamos la radio Bluetooth integrada del ESP32.

Ejercicios Prácticos Visuales

1

BLE Scanner Básico

Básico 30 min

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.

2

Filtrar dispositivos BLE

Intermedio 60 min

Objetivo: Implementar filtros para buscar dispositivos específicos.

Materiales: ESP32, dispositivos BLE diversos.

Resultados esperados: Mostrar solo dispositivos que cumplan criterios específicos.

3

Cliente BLE completo

Avanzado 120 min

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.

C++ - BLE Scanner con Filtros
// 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