#include "BluetoothSerial.h" // Incluye la librería para usar Bluetooth clásico (Serial Bluetooth Profile, SPP) en el ESP32
int LED1 = 5; // Asigna el pin GPIO 5 al LED1
int LED2 = 18; // Asigna el pin GPIO 18 al LED2
int LED3 = 19; // Asigna el pin GPIO 19 al LED3
int LED4 = 21; // Asigna el pin GPIO 21 al LED4
String device_name = "ESP32-BT-Evelyn"; // Define el nombre que tendrá el dispositivo Bluetooth cuando otros equipos lo busquen
// --- Verificación de configuración Bluetooth del ESP32 ---
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run make menuconfig to and enable it
#endif
// ↑ Comprueba que el Bluetooth esté habilitado en la configuración del ESP32.
// Si no lo está, el compilador muestra un error y detiene la compilación.
// --- Verificación del perfil de puerto serie (SPP) ---
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip.
#endif
// ↑ Comprueba que el perfil SPP (Serial Port Profile) esté activado.
// Este perfil permite enviar y recibir datos como si fuera un puerto serie inalámbrico.
BluetoothSerial SerialBT; // Crea un objeto llamado SerialBT para manejar la comunicación Bluetooth
void setup() {
pinMode(LED1, OUTPUT); // Configura el pin 5 como salida para controlar el LED1
pinMode(LED2, OUTPUT); // Configura el pin 18 como salida para el LED2
pinMode(LED3, OUTPUT); // Configura el pin 19 como salida para el LED3
pinMode(LED4, OUTPUT); // Configura el pin 21 como salida para el LED4
Serial.begin(115200); // Inicia la comunicación serie por USB a 115200 baudios (para depuración)
SerialBT.begin(device_name); // Inicia el Bluetooth con el nombre definido en device_name
// SerialBT.deleteAllBondedDevices(); // (opcional) Borra todos los dispositivos previamente emparejados
// Muestra un mensaje informativo en el monitor serie
Serial.printf("The device with name \"%s\" is started.\nNow you can pair it with Bluetooth!\n", device_name.c_str());
// ↑ Imprime en consola: el nombre del dispositivo y el aviso de que ya está listo para emparejar.
}
void loop() {
// --- Si hay datos disponibles en el puerto serie USB (PC → ESP32) ---
if (Serial.available()) {
SerialBT.write(Serial.read()); // Envía esos datos también por Bluetooth (PC → Bluetooth)
}
// --- Si hay datos disponibles desde Bluetooth (por ejemplo, desde el celular) ---
if (SerialBT.available()) {
char c = SerialBT.read(); // Lee un carácter enviado por Bluetooth
Serial.write(c); // Lo muestra también por el monitor serie USB (para depurar)
switch (c) { // Evalúa el carácter recibido
// --- Control por botones o comandos Bluetooth ---
case 'A': digitalWrite(LED1, !digitalRead(LED1)); break; // Si recibe 'A', cambia el estado del LED1 (enciende o apaga)
case 'B': digitalWrite(LED2, !digitalRead(LED2)); break; // Si recibe 'B', cambia el estado del LED2
case 'C': digitalWrite(LED3, !digitalRead(LED3)); break; // Si recibe 'C', cambia el estado del LED3
case 'D': digitalWrite(LED4, !digitalRead(LED4)); break; // Si recibe 'D', cambia el estado del LED4
// Aquí podrías añadir más casos (por ejemplo, comandos de voz procesados como texto)
}
}
delay(20); // Pequeña pausa para evitar saturar el microcontrolador (20 milisegundos)
}