Controlar ESP32 desde el móvil: BlueGrays IoT en 5 pasos
Guía para controlar ESP32 desde el móvil con BlueGrays IoT: conexión de relé y DHT22, código generado por Ohmi, 5 pasos, gráficas y solución de errores.
Controlar un ESP32 desde el móvil significa encender y apagar un relé, un LED o un motor conectado a la placa desde el teléfono que llevas en el bolsillo, y ver en él los valores de los sensores. Es el primer paso más divertido para aprender IoT. Como el ESP32 integra Wi-Fi de 2,4 GHz y Bluetooth, no necesitas ningún módulo adicional. La verdadera pregunta es qué camino elegir. Para controlar el ESP32 con una app puedes programar tu propio servidor web, conectarte por Bluetooth o crear un bot de Telegram. Los paneles en la nube como Blynk y Arduino IoT Cloud también son una opción. Cada método tiene un tiempo de configuración, un alcance y unas limitaciones distintas.
En esta guía vas a montar paso a paso el camino más corto: la función BlueGrays IoT de la app BlueGrays. Ohmi prepara el código por ti. Tú solo montas el circuito y cargas el código en el ESP32 desde el Arduino IDE. La placa se conecta al servidor de BlueGrays mediante una conexión cifrada, así que el móvil y la placa no tienen que estar en la misma red. Puedes encender la lámpara de casa desde el trabajo usando datos móviles. Primero harás un interruptor de lámpara con un relé. Después añadirás un DHT22 al circuito y llevarás la temperatura y la humedad a tu móvil como valores en vivo y gráficas. Al final del artículo encontrarás también una comparativa con otros métodos y una tabla con las soluciones a los errores más comunes.

5 formas de controlar un ESP32 desde el móvil
- Servidor web local: el ESP32 sirve una página web y tú accedes a la dirección IP de la placa desde el navegador del móvil. No necesitas ninguna cuenta, pero normalmente solo funciona desde la misma red Wi-Fi. Tienes los detalles en el artículo ESP32 Async Web Server.
- Bluetooth Classic y BLE: no necesitas internet ni router; el móvil se conecta directamente a la placa. En interiores, el alcance suele rondar los 10 metros. Explicamos ambos tipos en la guía ESP32 Bluetooth.
- Bot de Telegram: envías comandos a la placa por mensaje y recibes notificaciones de ella. Funciona también fuera de casa, pero no ofrece un panel con gráficas o deslizadores. Para configurarlo, consulta el artículo ESP32 Telegram Bot.
- Paneles en la nube (Blynk, Arduino IoT Cloud): defines plantillas y variables en la consola web, escribes el código tú mismo y diseñas tu propio panel en el móvil. Es un camino flexible, pero tendrás que aprender varias pantallas y conceptos distintos. Para Blynk tienes lista la Guía de Blynk con ESP32.
- BlueGrays IoT: en la app eliges una de las 8 plantillas disponibles. Ohmi prepara el código con tu configuración de pines y tu clave de dispositivo. En el móvil aparecen automáticamente, según la plantilla, el interruptor, el deslizador, el selector de color y las gráficas. No tienes que diseñar ningún panel ni montar un servidor.
Qué necesitas: lista de materiales y software
| Material | ¿Para qué sirve? | Nota |
|---|---|---|
| Placa de desarrollo ESP32 | Microcontrolador con Wi-Fi | Compatible con ESP32 Dev Module, WROOM, S3 y C3 |
| Cable USB de datos | Cargar el código y alimentar la placa | Con un cable solo de carga, el puerto no aparece |
| Módulo de relé de 5 V | Conmutar la lámpara | Elige uno con optoacoplador que se active con una señal de 3,3 V |
| LED + resistencia de 220 Ω | Primera prueba segura en lugar del relé | En el código se pone RELAY_ACTIVE_LOW = false |
| DHT22 (opcional) | Medir temperatura y humedad | Para la plantilla Estación de habitación |
| Protoboard y cables jumper | Hacer las conexiones | Los cables macho-hembra son prácticos para los módulos |
| Red Wi-Fi de 2,4 GHz | Salida a internet de la placa | La placa no se conecta a redes de 5 GHz |
| Arduino IDE | Cargar el código en la placa | Necesitas el paquete esp32 de Espressif versión 3.x |
| App BlueGrays | Configuración y control desde el móvil | iOS y Android; tu primer dispositivo es gratis |
¿Cómo funciona el control del ESP32 con la app?
En BlueGrays IoT, el móvil y el ESP32 no se conectan directamente entre sí. Al encenderse, la placa se conecta primero a la red Wi-Fi de 2,4 GHz de tu casa. Después abre una conexión WebSocket cifrada (TLS) con el servidor de BlueGrays por el puerto 443 y la mantiene abierta todo el tiempo. La app del móvil se conecta a ese mismo servidor. Cuando tocas el interruptor de la lámpara, el comando va del móvil al servidor y del servidor a la placa. Como la conexión ya está abierta, el comando llega sin esperas. El valor de temperatura que envía la placa recorre el mismo camino en sentido contrario. El 443 es el mismo puerto que usan las páginas web, así que no tienes que redirigir puertos en el router, montar tu propio servidor ni conocer la IP de la placa.
Lo que identifica a la placa ante el servidor es la clave de dispositivo. Es un texto secreto que empieza por bgd_ y que genera la app al crear el dispositivo. La placa envía la clave en la cabecera de la conexión al abrirla, y así el servidor sabe a qué placa entregar los comandos del móvil. La clave no se imprime en el Monitor Serie. Si se pierde la conexión, la librería BlueGraysIoT vuelve a intentarlo sola con intervalos cada vez mayores. Los valores medidos mientras estaba desconectada los envía al reconectarse, y cuando se va y vuelve la luz restaura el último estado de los interruptores. Basta con que la placa y el móvil tengan acceso a internet: la placa puede estar en el Wi-Fi de casa y el móvil con datos móviles en otra ciudad.
El circuito: conectar el módulo de relé al ESP32
En las plantillas de interruptor de lámpara y estación de habitación, los pines por defecto son estos: el pin IN del relé va a GPIO26 y el pin de datos del DHT22 a GPIO4. Puedes cambiar estos pines en el paso 3 de la configuración. Comprueba el patillaje de tu placa con la herramienta Pinout. En algunas placas el pin de 5 V aparece rotulado como VIN y en otras como 5V.
| Componente | Pin del componente | Pin del ESP32 | Nota |
|---|---|---|---|
| Módulo de relé | VCC | 5V (VIN) | La bobina necesita 5 V; con la placa alimentada por USB este pin da unos 5 V |
| Módulo de relé | GND | GND | Tierra común |
| Módulo de relé | IN | GPIO26 | Señal de control de 3,3 V |
| LED (para pruebas) | Pata larga (+) | GPIO26 | Con resistencia de 220 Ω; pata corta a GND, en el código RELAY_ACTIVE_LOW = false |
| DHT22 | VCC | 3V3 | Para la estación de habitación |
| DHT22 | DATA | GPIO4 | El sensor suelto necesita una resistencia pull-up de 10 kΩ; en los módulos ya viene en la placa |
| DHT22 | GND | GND | Tierra común |
Configurar BlueGrays IoT: los 5 pasos en la app
En la app, ve a Taller › Mis dispositivos › Añadir dispositivo. En la parte superior de la pantalla verás un contador del tipo "Paso 1 de 5". Los tres primeros pasos se hacen en el móvil, el cuarto en el ordenador y el quinto de nuevo en el móvil.
- Placa y plantilla: en la pregunta "¿Qué placa tienes?" elige ESP32 y en "¿Qué va a hacer?" marca una de las 8 plantillas. Para la primera prueba, "Lámpara con relé" o la "Estación de habitación" con sensor son un buen comienzo. Ponle al dispositivo un nombre fácil de reconocer, como "Lámpara del salón".
- Componentes y circuito: la lista "Prepara los componentes" muestra las piezas que necesita la plantilla. El esquema "Conecta los cables" dibuja qué terminal va a cada pin. En las plantillas con relé verás el aviso "Si vas a trabajar con 220 V, hazlo con alguien que sepa. Prueba primero con un LED.".
- Wi-Fi y código: introduce el nombre y la contraseña de tu red Wi-Fi. El nombre de la red debe ser exactamente igual y pertenecer a la banda de 2,4 GHz. Si quieres, en la sección "Pines de conexión" puedes cambiar GPIO26 y GPIO4 por otros pines. Después pulsa el botón "Crear dispositivo y preparar código". Ohmi prepara el código con tu clave de dispositivo; pásalo a tu ordenador con "Copiar código" o "Compartir".
- Cargar en el Arduino IDE: cargas el código en el ESP32. Explicamos uno a uno los subpasos de la app en la siguiente sección.
- Conexión: la pantalla "Esperando a tu placa" avanza sola en cuanto la placa se conecta al servidor.
Pasos 4 y 5: cargar el código y comprobar la conexión
- Si no tienes instalado el Arduino IDE, instálalo. Tienes los pasos en el artículo Instalación del Arduino IDE.
- En el Gestor de placas, busca "esp32" e instala el paquete esp32 de Espressif. Necesitas la versión 3.x de este paquete; si tienes instalada la antigua 2.x, actualízala. La instalación del paquete también está explicada en el artículo ¿Qué es el ESP32?.
- Conecta la placa con un cable USB que transmita datos. En el menú Herramientas › Placa elige ESP32 Dev Module (o el modelo de tu placa) y en Herramientas › Puerto elige el puerto nuevo que aparezca. Si no aparece ningún puerto, cambia el cable. Después instala el driver CP210x o CH340, según el chip USB de tu placa.
- En el Gestor de bibliotecas, busca BlueGraysIoT y pulsa Instalar. Cuando te pregunte por las dependencias, elige "Instalar todo"; así se instalan también WebSockets, ArduinoJson y DHT sensor library. Si te atascas, consulta la guía Cómo añadir librerías en Arduino.
- Abre un sketch nuevo, borra su contenido, pega el código que copiaste de la app y pulsa Subir. Si en la ventana inferior se queda atascado en "Connecting…", mantén pulsado el botón BOOT de la placa. Suelta el botón cuando empiecen a aparecer los porcentajes de escritura.
- Abre el Monitor Serie y ajusta la velocidad a 115200. Primero deberías ver la línea "Wi-Fi connected" y unos segundos después "BlueGrays IoT: connected".
En cuanto aparece el mensaje de conectado en el monitor serie, la pantalla "Esperando a tu placa" del móvil pasa a "Conectado: los valores ya llegan en tiempo real.". Ahora toca el interruptor de la lámpara: deberías oír el clic del relé o ver cómo se enciende el LED. Si la placa no se conecta en 2 minutos, la app te pide que compruebes tres cosas. ¿Elegiste la red de 2,4 GHz? ¿Aparece "Wi-Fi connected" en el monitor serie? ¿Están bien las mayúsculas y minúsculas de la contraseña? Si la primera línea no aparece nunca, el problema está en el Wi-Fi. En ese caso te servirá la lista de comprobación del artículo El ESP32 no se conecta al WiFi.
Primer código: encender y apagar una lámpara desde el móvil
El código que prepara la app para la plantilla "Lámpara con relé" es parecido al de abajo. Las tres primeras líneas vienen rellenas con tu clave de dispositivo, el nombre de tu red y tu contraseña; aquí se muestran con marcadores de posición. El resto del código es corto: una función para el relé, la definición de un interruptor y un loop() de una sola línea.
1/*
2 * Salon lambası · BlueGrays IoT
3 * BlueGrays · bluegrays.com
4 * Bu kodu paylaşma: içinde cihaz anahtarın ve Wi-Fi şifren var.
5 * Do not share this code: it contains your device key and Wi-Fi password.
6 */
7
8#include <BlueGraysIoT.h>
9
10// Uygulama bu üç satırı senin bilgilerinle doldurur / The app fills these three lines with your details
11const char *DEVICE_KEY = "bgd_UYGULAMADAKI_ANAHTARIN";
12const char *WIFI_NAME = "EV_AGI_2_4_GHZ";
13const char *WIFI_PASSWORD = "WIFI_SIFREN";
14
15BlueGraysIoT bg(DEVICE_KEY);
16
17const int RELAY_PIN = 26;
18const bool RELAY_ACTIVE_LOW = true; // çoğu röle modülü LOW ile çeker / most relay modules switch on LOW
19void setRelay(bool on) { digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW); }
20
21void setup() {
22 Serial.begin(115200);
23 pinMode(RELAY_PIN, OUTPUT);
24 setRelay(false); // açılışta lamba kapalı / lamp off at power-up
25 bg.onSwitch("lamba", setRelay); // uygulamadaki "Lamba" anahtarı / the "Lamba" switch in the app
26 bg.setDebug(Serial); // durum mesajları Seri Port Ekranı'na / status messages to the Serial Monitor
27 bg.setLanguage(BG_LANG_TR);
28 bg.begin(WIFI_NAME, WIFI_PASSWORD);
29}
30
31void loop() {
32 bg.loop(); // burada uzun delay() kullanma / avoid long delay() calls here
33}
34| Línea | Función |
|---|---|
| #include | Incluye la librería; ella se encarga del Wi-Fi, la conexión cifrada y la reconexión |
| DEVICE_KEY, WIFI_NAME, WIFI_PASSWORD | Clave de dispositivo (empieza por bgd_), nombre de la red de 2,4 GHz y contraseña; los rellena la app |
| BlueGraysIoT bg(DEVICE_KEY) | Crea el objeto bg con la clave; todas las demás órdenes se dan a través de este objeto |
| RELAY_PIN = 26 | Pin al que está conectado el IN del relé; si cambiaste el pin en el paso 3, aquí verás otro número |
| RELAY_ACTIVE_LOW = true | La mayoría de los módulos de relé se activan con señal LOW; si pruebas con un LED, ponlo en false o funcionará al revés |
| setRelay(bool on) | Cuando on es true, escribe el nivel activo: LOW en un módulo activo a nivel bajo, HIGH en los demás |
| setRelay(false) (dentro de setup) | La lámpara arranca apagada al encender la placa |
| bg.onSwitch("lamba", setRelay) | Cada vez que cambia el interruptor Lámpara de la app, llama a la función setRelay con true o false |
| bg.setDebug(Serial) | Escribe los mensajes de estado de la conexión en el Monitor Serie |
| bg.setLanguage(BG_LANG_TR) | Imprime los mensajes de estado en turco |
| bg.begin(WIFI_NAME, WIFI_PASSWORD) | Inicia la conexión a la red Wi-Fi y al servidor de BlueGrays |
| bg.loop() | Procesa los comandos entrantes y mantiene viva la conexión; hay que llamarlo continuamente dentro de loop() |
Añadir un sensor: Estación de habitación (relé + DHT22)
Ahora vamos a añadir un DHT22 a la misma placa para enviar datos al móvil. Si eliges la plantilla "Estación de habitación" en la app, junto al interruptor de la lámpara aparecen los valores de temperatura (°C) y humedad (%) con sus gráficas. El DHT22 mide entre -40 y 80 °C con una precisión de unos ±0,5 °C. Mide la humedad en el rango del 0 al 100 % y se puede leer como máximo una vez cada 2 segundos. Conecta el pin de datos a GPIO4, VCC a 3V3 y GND a GND. Explicamos de forma comparada cómo funciona la familia DHT en el artículo Sensor de temperatura y humedad DHT11.
1/*
2 * Oda istasyonu · BlueGrays IoT
3 * BlueGrays · bluegrays.com
4 * Bu kodu paylaşma: içinde cihaz anahtarın ve Wi-Fi şifren var.
5 * Do not share this code: it contains your device key and Wi-Fi password.
6 */
7
8#include <BlueGraysIoT.h>
9#include <DHT.h>
10
11const char *DEVICE_KEY = "bgd_UYGULAMADAKI_ANAHTARIN";
12const char *WIFI_NAME = "EV_AGI_2_4_GHZ";
13const char *WIFI_PASSWORD = "WIFI_SIFREN";
14
15BlueGraysIoT bg(DEVICE_KEY);
16
17const int RELAY_PIN = 26;
18const bool RELAY_ACTIVE_LOW = true; // çoğu röle modülü LOW ile çeker / most relay modules switch on LOW
19void setRelay(bool on) { digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW); }
20DHT dht(4, DHT22); // DHT22 veri ucu GPIO4 / DHT22 data on GPIO4
21unsigned long lastReadMs = 0;
22
23void setup() {
24 Serial.begin(115200);
25 pinMode(RELAY_PIN, OUTPUT);
26 setRelay(false);
27 bg.onSwitch("lamba", setRelay);
28 dht.begin();
29 bg.setDeadband("sicaklik", 0.1); // 0,1 °C değişmeden gönderme / send only after a 0.1 °C change
30 bg.setDeadband("nem", 1.0); // %1 değişmeden gönderme / send only after a 1 % change
31 bg.setDebug(Serial);
32 bg.setLanguage(BG_LANG_TR);
33 bg.begin(WIFI_NAME, WIFI_PASSWORD);
34}
35
36void loop() {
37 bg.loop(); // burada uzun delay() kullanma / avoid long delay() calls here
38 if (millis() - lastReadMs >= 2000) { // DHT22 en fazla 2 saniyede bir okunur / DHT22 reads at most every 2 s
39 lastReadMs = millis();
40 bg.send("sicaklik", dht.readTemperature());
41 bg.send("nem", dht.readHumidity());
42 }
43}
44La parte del relé es igual que en el primer código; hay tres novedades. La primera es la línea bg.send("sicaklik", dht.readTemperature()): envía un valor de la placa a la app, y el primer parámetro es el nombre de la variable en la app. La segunda es la línea bg.setDeadband("sicaklik", 0.1). Define el margen mínimo de cambio: la temperatura no se vuelve a enviar hasta que cambia 0,1 °C, y para la humedad ese margen es del 1 %. La tercera es la comprobación millis() - lastReadMs >= 2000 dentro del loop. El sensor se lee cada 2 segundos, pero entretanto bg.loop() sigue ejecutándose sin esperar. La librería solo envía el valor cuando cambia y no supera la frecuencia del plan. Entre dos envíos de la misma variable pasa como mínimo 1 segundo en el plan gratuito y 0,2 segundos en Premium. Estos límites se controlan en el servidor; cambiar los números del código no permite saltárselos. Si la temperatura de la habitación se queda varios minutos en 23,4 °C, la placa no envía ningún valor nuevo; cuando pasa a 23,5 °C se envía un único mensaje. Si un cable está suelto o falta la resistencia pull-up, la lectura es inválida (NaN). Si no llegan valores, comprueba primero la conexión de GPIO4 y la alimentación.
¿Qué ves en el móvil?
- Estado: en la parte superior de la pantalla del dispositivo pone En línea o Sin conexión, y debajo aparece la información "Último dato hace…". Es lo primero que te dice si la placa está realmente conectada.
- Controles: en la plantilla de lámpara aparece un interruptor de encendido/apagado. En la de tira RGB tienes un selector de color, brillo del 0 al 100 % y selección de efectos. Y en la de cortina hay un deslizador de ángulo de 0 a 180°.
- Valores en vivo y gráficas: hay rangos de 1 h, 24 h, 7 días y 30 días. En las vistas de 7 y 30 días se muestra la media por hora. La gráfica indica los valores Mínimo, Máximo y Último. Mientras la placa sigue conectada, se añade un punto nuevo cada minuto.
- Código y clave: aquí puedes ver más tarde el código completo, la clave de dispositivo y los datos del Wi-Fi. Si necesitas volver a programar la placa, copia el código desde aquí.
- Renovar clave: úsalo si alguien ha visto tu clave o si has cambiado de placa. La clave antigua deja de ser válida al instante y basta con cargar una vez el nuevo código en la placa.
- Eliminar dispositivo: se borran el dispositivo y su historial de gráficas, y recuperas el hueco de dispositivo.
Gratis y Premium: ¿cuánto puedes usarlo?
Tu primer dispositivo es gratis. Para montar un interruptor de lámpara o una estación de habitación con un ESP32 no necesitas nada más. En la estación de habitación, la temperatura y la humedad son dos variables distintas. En el plan gratuito te llegan al móvil los valores en vivo de las dos, pero el historial de gráficas solo se guarda para una variable. Abajo tienes las diferencias entre planes; los detalles están en el artículo ¿Qué desbloquea BlueGrays Premium?.
| Función | Gratis | Premium |
|---|---|---|
| Número de dispositivos | 1 | 10 |
| Variables con historial de gráficas | 1 | 20 |
| Duración del historial | 24 horas | 30 días |
| Tiempo mínimo entre dos envíos de la misma variable | 1 segundo | 0,2 segundos |
Comparativa con otros métodos
| Método | Acceso desde fuera de casa | Lo que tienes que hacer tú | Panel y gráficas | ¿Cuándo conviene? |
|---|---|---|---|---|
| Servidor web local | Normalmente no, solo desde la misma red | Programar el código del ESP32 y una página HTML | Lo diseñas tú | Panel de control doméstico sin internet |
| Bluetooth / BLE | No, unos 10 m | Código de la placa y una app en el móvil | Depende de la app que uses | Lugares sin router, control de cerca |
| Bot de Telegram | Sí | Crear el bot y escribir el código | Mensajes y botones, sin gráficas | Notificaciones y comandos sencillos |
| Blynk | Sí | Plantilla, datastreams, panel y código | Widgets y gráficas listos | Quien quiere diseñar su propio panel |
| Arduino IoT Cloud | Sí | Definir el Thing y las variables en la cuenta de Arduino y completar el código | Widgets del dashboard | Quien se queda en el ecosistema Arduino |
| BlueGrays IoT | Sí | Montar el circuito y cargar el código | Controles y gráficas listos según la plantilla | Empezar rápido y usarlo mientras aprendes |
La elección correcta depende de lo que necesites. Si no tienes nada de internet, Bluetooth o un servidor web local son la única opción. BlueGrays IoT, Blynk y Arduino IoT Cloud necesitan que la placa y el móvil tengan acceso a internet. Si buscas configuraciones flexibles, como diseñar la interfaz desde cero o integrarte con Home Assistant, ESP32 MQTT y los paneles en la nube ofrecen más opciones. BlueGrays IoT tiene 8 plantillas listas. A cambio, el esquema del circuito, la lista de componentes, el código y la interfaz del móvil vienen preparados y encajan entre sí. Mientras aprendes, hay menos probabilidades de que te equivoques en algún punto.
Seguridad: clave, contraseña del Wi-Fi y código
- La clave de dispositivo es la identidad de la placa. Quien conozca la clave que empieza por bgd_ puede hacerse pasar por tu placa. Por eso no la compartas en capturas de pantalla, foros ni grupos de mensajería.
- La contraseña del Wi-Fi se queda en el móvil. La contraseña no se envía al servidor; el nombre de la red sí se guarda con el dispositivo para poder mostrarte el código más tarde. Pero el código que cargas en la placa sí lleva la contraseña escrita.
- No compartas el código. Como avisa la propia app, el código contiene tu clave de dispositivo y la contraseña de tu Wi-Fi. Si vas a enseñar el código en un foro para pedir ayuda, borra antes las líneas DEVICE_KEY, WIFI_NAME y WIFI_PASSWORD.
- La conexión está cifrada. El tráfico entre la placa y el servidor va por el puerto 443 con TLS, así que nadie en la misma red puede leer los comandos.
- Si sospechas algo, renueva la clave. El botón Renovar clave anula la clave antigua al instante. Si vas a darle la placa a otra persona, renueva también la clave o elimina el dispositivo.
Errores frecuentes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| En el monitor serie nunca aparece "Wi-Fi connected" | Se eligió una red de 5 GHz o hay un error de mayúsculas/minúsculas en la contraseña | Introduce el nombre de la red de 2,4 GHz; si en el router las dos bandas tienen el mismo nombre, sepáralas; vuelve a escribir la contraseña con cuidado |
| No hay ningún puerto en Herramientas › Puerto | Cable solo de carga o falta el driver | Usa un cable de datos; instala el driver CP210x o CH340 según el chip |
| La carga se queda atascada en "Connecting…" | La placa no entra en modo de carga | Mantén pulsado BOOT y suéltalo cuando empiece la escritura; más información en el artículo No se sube el código a Arduino |
| La compilación se detiene con errores del núcleo ESP32 | Está instalada la antigua versión 2.x del paquete esp32 | Actualiza a la versión 3.x desde el Gestor de placas |
| "No such file or directory" (BlueGraysIoT.h, DHT.h, WebSockets) | No están instaladas la librería o sus dependencias | Reinstala BlueGraysIoT y elige "Instalar todo"; busca por su nombre la que falte |
| Caracteres sin sentido en el monitor serie | La velocidad no es 115200 | Ajusta la velocidad del Monitor Serie a 115200 |
| Aparece "Wi-Fi connected" pero no "BlueGrays IoT: connected" | La red no tiene salida a internet, una red corporativa lo bloquea o está cargado el código anterior a renovar la clave | Prueba con el punto de acceso del móvil; carga el código actualizado de la pantalla Código y clave |
| La placa se reinicia cuando hace clic el relé | Alimentación insuficiente (brownout) | Usa un cable de calidad y un cargador potente, alimenta el relé desde 5V; consulta ESP32 Brownout |
| El LED se enciende con el interruptor apagado | RELAY_ACTIVE_LOW se dejó en true, como para el relé | Si usas un LED directamente, pon RELAY_ACTIVE_LOW = false |
| Un sensor analógico da siempre el mismo valor al activar el Wi-Fi | El sensor está conectado a un pin ADC2 | Usa uno de los pines ADC1 (GPIO32–39); más detalles en el artículo ¿Qué es un ADC? |
| No llegan los valores de temperatura y humedad | El pin de datos del DHT22 está en el pin equivocado o falta la pull-up | Conecta DATA a GPIO4 y VCC a 3V3; con el sensor suelto, añade una pull-up de 10 kΩ |
Ideas de proyectos IoT que puedes hacer con un ESP32
- Interruptor de lámpara: la versión completa del primer circuito de este artículo está en el proyecto Interruptor de lámpara IoT con ESP32 (relé). El proyecto incluye esquema del circuito y lista de componentes.
- Estación de habitación: relé y DHT22 juntos, con gráfica de temperatura: Estación de habitación IoT con ESP32 (relé + DHT22).
- Riego de plantas: el sensor de humedad del suelo se conecta a GPIO34 (un pin ADC1). Cuando la humedad baja del deslizador Umbral de riego del móvil, la bomba se enciende, y se apaga cuando sube 10 puntos por encima del umbral. Página del proyecto: Riego de plantas IoT con ESP32 (sensor de humedad + bomba). Para calibrar el sensor, consulta también el artículo Sensor de humedad del suelo.
- Tira LED RGB: elige desde el móvil el color, el brillo y el efecto (Fijo, Arcoíris, Respiración, Parpadeo) de una tira WS2812B de 30 LED en GPIO13: Tira LED RGB IoT con ESP32 (WS2812B). 30 LED en blanco total pueden consumir unos 1,8 A; alimenta la tira con una fuente de 5 V aparte. Más detalles en el artículo WS2812B NeoPixel.
- Abridor de cortinas: gira el servo SG90 de GPIO18 con un deslizador de 0 a 180°: Abridor de cortinas IoT con ESP32 (servo SG90). Alimenta también el servo con una fuente de 5 V aparte y une las GND.
- Otras plantillas: los proyectos de sensor de puerta, contador de movimiento y temperatura y humedad están explicados con la Pico W. En la app también puedes elegir estas plantillas para el ESP32.
Una vez montado el camino entre la placa, el servidor y el móvil, añadir un dispositivo nuevo te lleva unos minutos. Empieza con el interruptor de lámpara, luego comprueba con el DHT22 cómo llegan los datos al móvil y después pasa a proyectos más grandes como el riego o la cortina. En la app BlueGrays puedes ver estos proyectos IoT con ESP32 paso a paso, con su esquema del circuito y su código. Usa el filtro de proyectos IoT de Explorar y, con la tarjeta "Configurar como dispositivo IoT" de la página del proyecto, conecta el mismo circuito directamente a tu móvil.
Preguntas frecuentes
¿Cómo se controla un ESP32 desde el móvil?
Un ESP32 se puede controlar desde el móvil con un servidor web local, Bluetooth, un bot de Telegram o paneles en la nube. Con BlueGrays IoT vas a Taller › Mis dispositivos › Añadir dispositivo, eliges la placa y la plantilla, introduces los datos del Wi-Fi y cargas con el Arduino IDE el código que prepara Ohmi. Cuando la placa se conecta, los interruptores y los valores aparecen en el móvil.
¿Se puede controlar un ESP32 desde el móvil sin internet?
Con BlueGrays IoT no; tanto la placa como el móvil tienen que estar conectados a internet, porque los comandos pasan por el servidor. Para controlarlo sin internet puedes usar Bluetooth (BLE) o un servidor web en el ESP32 que funcione en la misma red.
¿Puedo controlar mi ESP32 desde otra ciudad?
Sí. Como la placa y el móvil se conectan al mismo servidor, no necesitan estar en la misma red. La placa puede estar en el Wi-Fi de 2,4 GHz de casa y el móvil con datos móviles. No hace falta redirigir puertos, tener IP fija ni montar tu propio servidor.
¿BlueGrays IoT es de pago?
Tu primer dispositivo es gratis. El plan gratuito incluye 1 dispositivo, historial de gráficas para 1 variable y 24 horas de historial. Premium desbloquea 10 dispositivos, historial de gráficas para 20 variables y hasta 30 días de historial.
¿Es mejor controlar el ESP32 por Bluetooth o por Wi-Fi?
El Bluetooth no necesita internet ni router, pero en interiores su alcance suele rondar los 10 metros. Con Wi-Fi y un servidor puedes manejar la placa desde cualquier parte del mundo y además se guardan gráficas e historial. Si siempre estás en casa y no tienes router, conviene Bluetooth; si quieres acceso remoto, Wi-Fi.
¿Cuántos dispositivos puedo conectar a BlueGrays IoT?
Puedes añadir 1 dispositivo en el plan gratuito y 10 en Premium. Las placas compatibles son ESP32 (Dev Module, WROOM, S3, C3) y Raspberry Pi Pico W. Cuando eliminas un dispositivo, recuperas ese hueco.
Proyectos para hacer después de leer esto
Ver todos los proyectos
ESP32 Interruptor IoT de Lámpara (Relé)
Enciende y apaga tu lámpara desde el móvil, estés donde estés. Este proyecto es la guía paso a paso de la plantilla IoT Lámpara con relé de la app, montada con un ESP32 y un módulo de relé y probada primero con un LED. Ve a Taller › Dispositivos › Añadir dispositivo y elige Lámpara con relé; Ohmi prepara el código con tu propia clave de dispositivo. El código de esta página es un ejemplo: la clave y los datos del Wi-Fi son de relleno.

ESP32 Estación IoT de Habitación (Relé + DHT22)
Enciende tu lámpara desde el móvil y mira la temperatura y la humedad de tu habitación en directo, estés donde estés. Este proyecto es la guía paso a paso de la plantilla IoT Estación de habitación de la app, con un ESP32, un módulo de relé y un DHT22. Ve a Taller › Dispositivos › Añadir dispositivo y elige Estación de habitación; Ohmi prepara el código con tu clave de dispositivo. El código de aquí es un ejemplo: la clave y el Wi-Fi son de relleno.

ESP32 Riego IoT de Plantas (Sensor + Bomba)
Que la bomba arranque sola cuando la tierra de la maceta se seque, y mira la humedad del suelo en directo en el móvil. Este proyecto es la guía paso a paso de la plantilla IoT Humedad del suelo + bomba de la app, con un ESP32, un sensor de humedad del suelo, un relé y una mini bomba de agua. Ve a Taller › Dispositivos › Añadir dispositivo; Ohmi prepara el código con tu clave de dispositivo. El código de aquí es un ejemplo: la clave y el Wi-Fi son de relleno.

ESP32 Tira LED RGB IoT (WS2812B)
Controla la luz de tu habitación desde el móvil: elige el color, ajusta el brillo, activa el efecto arcoíris o respiración. Esta es la guía paso a paso de la plantilla IoT Tira LED RGB de la app, montada con un ESP32 y una tira WS2812B de 30 LED con tres cables. Ve a Taller › Dispositivos › Añadir dispositivo y elige Tira LED RGB; Ohmi prepara el código con tu propia clave de dispositivo. El código de esta página es un ejemplo: la clave y los datos del Wi-Fi son de relleno.

ESP32 Abridor de Cortinas IoT (Servo SG90)
Toca + o − en el móvil y el servo gira a ese ángulo en el mismo instante: abre y cierra una cortina de maqueta, la varilla de una persiana o una tapa pequeña estés donde estés. Este proyecto es la guía paso a paso de la plantilla IoT Cortina con servo de la app, con un ESP32 y un servo SG90, con solo 3 cables. Ve a Taller › Dispositivos › Añadir dispositivo; Ohmi prepara el código con tu clave de dispositivo. El código de aquí es un ejemplo: la clave y el Wi-Fi son de relleno.

Pico W Temperatura y Humedad IoT (DHT22)
Mira en directo en el móvil la temperatura y la humedad de tu habitación. Este proyecto es la guía paso a paso de la plantilla IoT Temperatura y humedad de la app, montada con una Raspberry Pi Pico W y un DHT22. Ve a Taller › Dispositivos › Añadir dispositivo, elige Pico W como placa y Temperatura y humedad como plantilla; Ohmi prepara el código con tu propia clave de dispositivo. El código de esta página es un ejemplo: la clave y los datos del Wi-Fi son de relleno.

Pico W Sensor IoT de Puerta (Reed)
¿Se te quedó abierta la puerta o la ventana? Míralo en el móvil. Este proyecto es la guía paso a paso de la plantilla IoT Puerta / ventana de la app, montada con una Raspberry Pi Pico W, un interruptor reed y un pequeño imán. Ve a Taller › Dispositivos › Añadir dispositivo, elige Pico W como placa y Puerta / ventana como plantilla; Ohmi prepara el código con tu propia clave de dispositivo. El código de esta página es un ejemplo: la clave y los datos del Wi-Fi son de relleno.

Pico W Contador de Movimiento IoT (PIR)
Cuenta cuántas veces pasa alguien por una puerta o un pasillo y mira el momento del movimiento en directo en el móvil. Este proyecto es la guía paso a paso de la plantilla IoT Detector de movimiento de la app, con una Raspberry Pi Pico W y un sensor de movimiento PIR, con solo 3 cables. Ve a Taller › Dispositivos › Añadir dispositivo; Ohmi prepara el código con tu clave de dispositivo. El código de aquí es un ejemplo: la clave y el Wi-Fi son de relleno.
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 200 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

