Módulo 1

Módulos integrados: Wi-Fi y Bluetooth

Conectividad Inalámbrica para Sistemas Mecatrónicos

Wi-Fi Bluetooth Mecatrónica IoT UNAM

Introducción a la Conectividad Inalámbrica

El ESP32 es un chip microcontrolador revolucionario que integra Wi-Fi y Bluetooth de doble modo en un único dispositivo de bajo costo y bajo consumo energético. Esta combinación única convierte al ESP32 en la solución ideal para aplicaciones de Internet de las Cosas (IoT) y sistemas mecatrónicos modernos.

Impacto en la Mecatrónica Moderna

La mecatrónica integra electrónica, mecánica, control y sistemas de computación. Con la incorporación de conectividad inalámbrica, permite la interconexión y control remoto de dispositivos, transformando sistemas tradicionales en soluciones inteligentes y conectadas.

En la industria mexicana: El ESP32 se utiliza en automóviles para telemetría en tiempo real, sistemas de riego inteligentes en agricultura, y automatización industrial avanzada.

Módulos de Conectividad Integrados

Wi-Fi 802.11 b/g/n

Conectividad de alta velocidad para aplicaciones IoT

Estándar: 802.11 b/g/n
Frecuencia: 2.4 GHz
Velocidad: Hasta 150 Mbps
Alcance: 50-100m
Consumo: 80-120 mA

Bluetooth v4.2

Comunicación de corto alcance y bajo consumo

Versión: 4.2 BR/EDR/BLE
Frecuencia: 2.4 GHz ISM
Velocidad: 1-3 Mbps
Alcance: 10-30m
BLE Consumo: 10-50 µA

Modos de Operación Wi-Fi

El ESP32 puede funcionar en tres modos diferentes que permiten adaptarse a diversas necesidades de conectividad en sistemas mecatrónicos:

Modo Estación (STA)
  • Se conecta a router existente
  • Acceso a internet
  • Cliente en red local
  • Ideal para IoT cloud
Punto de Acceso (AP)
  • Crea su propia red
  • Otros dispositivos se conectan
  • Control directo local
  • Configuración inicial
Modo Dual (STA+AP)
  • Ambos modos simultáneos
  • Bridge entre redes
  • Configuración avanzada
  • Máxima flexibilidad

Implementación Práctica: Servidor Web con Bluetooth

A continuación se presenta un ejemplo completo que demuestra el uso simultáneo de Wi-Fi y Bluetooth en un sistema mecatrónico para control remoto:

C++ - Arduino IDE
// Sistema dual Wi-Fi + Bluetooth para control mecatrónico
#include 
#include 
#include 
#include 

// Configuración de red Wi-Fi
const char* ssid = "MiRed_Mecantronica";
const char* password = "Password123";

// Objetos de conectividad
WebServer server(80);
BluetoothSerial SerialBT;

// Variables del sistema mecatrónico
struct SensorData {
    float temperatura;
    float humedad;
    int posicion_motor;
    bool estado_actuador;
};

SensorData datos_sistema;
unsigned long ultimo_envio = 0;
const int LED_WIFI = 2;
const int LED_BLUETOOTH = 4;
const int MOTOR_PIN = 5;

// Páginas HTML para la interfaz web
String paginaHTML = R"(



    Control Mecatrónico ESP32
    
    


    

🔧 Sistema Mecatrónico ESP32

Estado: CONECTADO

📊 Sensores

🌡️ Temperatura: -- °C

💧 Humedad: -- %

⚙️ Posición Motor: --°

🎮 Controles

)"; void setup() { Serial.begin(115200); // Configurar pines pinMode(LED_WIFI, OUTPUT); pinMode(LED_BLUETOOTH, OUTPUT); pinMode(MOTOR_PIN, OUTPUT); // Inicializar datos del sistema datos_sistema = {25.5, 60.0, 0, false}; Serial.println("\n=== Sistema Mecatrónico ESP32 Iniciando ==="); // Iniciar Wi-Fi iniciarWiFi(); // Iniciar Bluetooth iniciarBluetooth(); // Configurar servidor web configurarServidorWeb(); Serial.println("Sistema listo para operación"); Serial.printf("IP Wi-Fi: http://%s\n", WiFi.localIP().toString().c_str()); Serial.println("Bluetooth: 'ESP32_Mecantronica'"); } void iniciarWiFi() { Serial.print("Conectando a Wi-Fi"); WiFi.begin(ssid, password); int intentos = 0; while (WiFi.status() != WL_CONNECTED && intentos < 20) { delay(500); Serial.print("."); intentos++; } if (WiFi.status() == WL_CONNECTED) { digitalWrite(LED_WIFI, HIGH); Serial.println("\nWi-Fi conectado exitosamente!"); Serial.printf("SSID: %s\n", WiFi.SSID().c_str()); Serial.printf("IP: %s\n", WiFi.localIP().toString().c_str()); Serial.printf("RSSI: %d dBm\n", WiFi.RSSI()); } else { Serial.println("\nError: No se pudo conectar a Wi-Fi"); // Modo AP como fallback WiFi.softAP("ESP32_Config", "12345678"); Serial.println("Modo AP activado: ESP32_Config"); } } void iniciarBluetooth() { if (!SerialBT.begin("ESP32_Mecantronica")) { Serial.println("Error al inicializar Bluetooth"); } else { digitalWrite(LED_BLUETOOTH, HIGH); Serial.println("Bluetooth iniciado: 'ESP32_Mecantronica'"); } } void configurarServidorWeb() { // Página principal server.on("/", HTTP_GET, []() { server.send(200, "text/html", paginaHTML); }); // API para datos en tiempo real server.on("/datos", HTTP_GET, []() { DynamicJsonDocument doc(200); doc["temperatura"] = datos_sistema.temperatura; doc["humedad"] = datos_sistema.humedad; doc["posicion_motor"] = datos_sistema.posicion_motor; doc["estado_actuador"] = datos_sistema.estado_actuador; String json; serializeJson(doc, json); server.send(200, "application/json", json); }); // Control de actuador server.on("/actuador", HTTP_GET, []() { datos_sistema.estado_actuador = !datos_sistema.estado_actuador; digitalWrite(MOTOR_PIN, datos_sistema.estado_actuador); Serial.printf("Actuador: %s\n", datos_sistema.estado_actuador ? "ON" : "OFF"); server.send(200, "text/plain", "OK"); }); // Control de motor server.on("/motor", HTTP_GET, []() { if (server.hasArg("pos")) { int nueva_posicion = server.arg("pos").toInt(); if (nueva_posicion >= 0 && nueva_posicion <= 180) { datos_sistema.posicion_motor = nueva_posicion; // Aquí iría el control del servo motor Serial.printf("Motor movido a: %d°\n", nueva_posicion); } } server.send(200, "text/plain", "OK"); }); server.begin(); Serial.println("Servidor web iniciado en puerto 80"); } void loop() { // Procesar solicitudes web server.handleClient(); // Simular lectura de sensores actualizarSensores(); // Manejar comunicación Bluetooth manejarBluetooth(); // Enviar telemetría periódica if (millis() - ultimo_envio > 5000) { enviarTelemetria(); ultimo_envio = millis(); } // Verificar estado de conexiones verificarConexiones(); delay(100); } void actualizarSensores() { // Simular variaciones realistas en sensores static unsigned long ultimo_sensor = 0; if (millis() - ultimo_sensor > 1000) { datos_sistema.temperatura += random(-10, 11) / 10.0; datos_sistema.humedad += random(-20, 21) / 10.0; // Mantener valores en rangos realistas datos_sistema.temperatura = constrain(datos_sistema.temperatura, 15.0, 35.0); datos_sistema.humedad = constrain(datos_sistema.humedad, 30.0, 90.0); ultimo_sensor = millis(); } } void manejarBluetooth() { if (SerialBT.available()) { String comando = SerialBT.readString(); comando.trim(); if (comando == "STATUS") { SerialBT.printf("Temp:%.1f,Hum:%.1f,Motor:%d,Act:%d\n", datos_sistema.temperatura, datos_sistema.humedad, datos_sistema.posicion_motor, datos_sistema.estado_actuador); } else if (comando == "ACTUADOR") { datos_sistema.estado_actuador = !datos_sistema.estado_actuador; SerialBT.printf("Actuador: %s\n", datos_sistema.estado_actuador ? "ON" : "OFF"); } else if (comando.startsWith("MOTOR:")) { int pos = comando.substring(6).toInt(); if (pos >= 0 && pos <= 180) { datos_sistema.posicion_motor = pos; SerialBT.printf("Motor: %d°\n", pos); } } } } void enviarTelemetria() { // Log por Serial Serial.printf("[TELEMETRY] T:%.1f°C H:%.1f%% M:%d° A:%s\n", datos_sistema.temperatura, datos_sistema.humedad, datos_sistema.posicion_motor, datos_sistema.estado_actuador ? "ON" : "OFF"); // Enviar por Bluetooth si hay dispositivo conectado if (SerialBT.hasClient()) { SerialBT.printf("TELEM:%.1f,%.1f,%d,%d\n", datos_sistema.temperatura, datos_sistema.humedad, datos_sistema.posicion_motor, datos_sistema.estado_actuador); } } void verificarConexiones() { // LED Wi-Fi digitalWrite(LED_WIFI, WiFi.status() == WL_CONNECTED); // LED Bluetooth digitalWrite(LED_BLUETOOTH, SerialBT.hasClient()); // Reconexión automática Wi-Fi if (WiFi.status() != WL_CONNECTED) { static unsigned long ultimo_intento = 0; if (millis() - ultimo_intento > 30000) { // Cada 30 segundos Serial.println("Intentando reconexión Wi-Fi..."); WiFi.reconnect(); ultimo_intento = millis(); } } }

Ejercicios Prácticos

1

Punto de Acceso WiFi

Principiante 20 min

Objetivo: Configurar el ESP32 como Punto de Acceso (AP) para crear su propia red WiFi.

Materiales:

  • ESP32 DevKit
  • Smartphone o PC con WiFi
  • Arduino IDE

Resultado: Red "ESP32_AP" accesible desde dispositivos móviles

2

Comunicación Bluetooth Serial

Intermedio 30 min

Objetivo: Enviar datos de sensores desde ESP32 a smartphone vía Bluetooth.

Aplicación: Terminal Bluetooth para monitoreo de temperatura y humedad

Conceptos: Bluetooth Serial, emparejamiento, apps móviles

3

Sistema IoT Completo

Avanzado 60 min

Objetivo: Integrar WiFi y Bluetooth en un sistema mecatrónico completo.

Funcionalidades: Servidor web, control por Bluetooth, telemetría dual

Aplicación: Control remoto de actuadores con interfaz web y móvil

Aplicaciones de Conectividad en Mecatrónica

Conectividad Dual para Sistemas Inteligentes

La combinación de Wi-Fi y Bluetooth en el ESP32 permite crear sistemas mecatrónicos versátiles que pueden adaptarse a diferentes escenarios de conectividad:

Wi-Fi Applications:
  • Conectividad a la nube
  • Interfaces web avanzadas
  • Sincronización remota
  • Telemetría de alta velocidad
Bluetooth Applications:
  • Control desde smartphones
  • Bajo consumo energético
  • Configuración local
  • Comunicación segura punto a punto
Casos de Uso Industriales
Telemetría Vehicular
Wi-Fi para datos cloud, Bluetooth para diagnóstico local
Agricultura Inteligente
Riego automático con control dual por WiFi y móvil
Automatización Industrial
Monitoreo continuo y mantenimiento móvil

Referencias y Recursos Adicionales