7.2 Control de LED RGB por Bluetooth¶
Este proyecto es una extensión de un proyecto anterior(7.1 Bluetooth), añadiendo configuraciones de LED RGB y comandos personalizados como «led_off», «red», «green», etc. Estos comandos permiten controlar el LED RGB enviando comandos desde un dispositivo móvil usando LightBlue.
Componentes Necesarios
Para este proyecto, necesitamos los siguientes componentes.
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
---|---|---|
Kit de Inicio ESP32 |
320+ |
También puedes comprarlos por separado en los enlaces a continuación.
INTRODUCCIÓN DE COMPONENTES |
ENLACE DE COMPRA |
---|---|
- |
|
Pasos Operativos
Construye el circuito.
Abre el archivo
7.2_bluetooth_rgb_led.ino
ubicado en el directorioesp32-starter-kit-main\c\codes\7.2_bluetooth_rgb_led
, o copia el código en el IDE de Arduino.Para evitar conflictos de UUID, se recomienda generar aleatoriamente tres nuevos UUIDs usando el Online UUID Generator proporcionado por el Bluetooth SIG, y rellenarlos en las siguientes líneas de código.
Nota
Si ya has generado tres nuevos UUIDs en el proyecto 7.1 Bluetooth, entonces puedes continuar usándolos.
#define SERVICE_UUID "your_service_uuid_here" #define CHARACTERISTIC_UUID_RX "your_rx_characteristic_uuid_here" #define CHARACTERISTIC_UUID_TX "your_tx_characteristic_uuid_here"
Selecciona la placa y el puerto correctos, luego haz clic en el botón Subir.
Después de que el código se haya cargado con éxito, activa el Bluetooth en tu dispositivo móvil y abre la aplicación LightBlue.
En la página de Scan, busca ESP32-Bluetooth y haz clic en CONNECTAR. Si no lo ves, intenta actualizar la página unas cuantas veces. Cuando aparezca «Conectado al dispositivo!», la conexión Bluetooth es exitosa. Desplázate hacia abajo para ver los tres UUIDs configurados en el código.
Toca el UUID de envío, luego configura el formato de datos a «Cadena UTF-8». Ahora puedes escribir estos comandos: «led_off», «red», «green», «blue», «yellow» y «purple» para ver si el LED RGB responde a estas instrucciones.
¿Cómo funciona?
Este código es una extensión de un proyecto anterior(7.1 Bluetooth), añadiendo configuraciones de LED RGB y comandos personalizados como «led_off», «red», «green», etc. Estos comandos permiten controlar el LED RGB enviando comandos desde un dispositivo móvil usando LightBlue.
Desglosemos el código paso a paso:
Añadir nuevas variables globales para los pines del LED RGB, canales PWM, frecuencia y resolución.
... // Define RGB LED pins const int redPin = 27; const int greenPin = 26; const int bluePin = 25; // Define PWM channels const int redChannel = 0; const int greenChannel = 1; const int blueChannel = 2; ...
Dentro de la función
setup()
, los canales PWM se inicializan con la frecuencia y resolución predefinidas. Los pines del LED RGB se conectan luego a sus respectivos canales PWM.void setup() { ... // Set up PWM channels ledcSetup(redChannel, freq, resolution); ledcSetup(greenChannel, freq, resolution); ledcSetup(blueChannel, freq, resolution); // Attach pins to corresponding PWM channels ledcAttachPin(redPin, redChannel); ledcAttachPin(greenPin, greenChannel); ledcAttachPin(bluePin, blueChannel); }
Modificar el método
onWrite
en la claseMyCharacteristicCallbacks
. Esta función escucha los datos que llegan de la conexión Bluetooth. Basándose en la cadena recibida (como"led_off"
,"red"
,"green"
, etc.), controla el LED RGB.// Define the BLE characteristic callbacks class MyCharacteristicCallbacks : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string value = pCharacteristic->getValue(); if (value == "led_off") { setColor(0, 0, 0); // turn the RGB LED off Serial.println("RGB LED turned off"); } else if (value == "red") { setColor(255, 0, 0); // Red Serial.println("red"); } else if (value == "green") { setColor(0, 255, 0); // green Serial.println("green"); } else if (value == "blue") { setColor(0, 0, 255); // blue Serial.println("blue"); } else if (value == "yellow") { setColor(255, 150, 0); // yellow Serial.println("yellow"); } else if (value == "purple") { setColor(80, 0, 80); // purple Serial.println("purple"); } } };
Finalmente, se añade una función para establecer el color del LED RGB.
void setColor(int red, int green, int blue) { // For common-anode RGB LEDs, use 255 minus the color value ledcWrite(redChannel, red); ledcWrite(greenChannel, green); ledcWrite(blueChannel, blue); }
En resumen, este script habilita un modelo de interacción de control remoto, donde el ESP32 opera como un servidor de Energía Baja de Bluetooth (BLE).
El cliente BLE conectado (como un smartphone) puede enviar comandos de cadena para cambiar el color de un LED RGB. El ESP32 también da retroalimentación al cliente enviando de vuelta la cadena recibida, permitiendo al cliente saber qué operación se realizó.