Construcción de un display LED de reloj y texto con matrices LED. Este display se configura desde un teléfono móvil vía WiFi. La información de la fecha y hora se sincroniza a través de un servidor NTP, convirtiéndolo así en un reloj muy preciso. Este display está construido con el módulo ESP32 y 4 matrices LED de 8×8 pixel. De forma opcional, también se puede montar un segundo display OLED de 64×48 pixel (0,66 pulgadas).
Este display lo he montado con un módulo LED que ya contiene las 4 matrices, en lugar de los 4 módulos independientes que utilicé en el montaje anterior:
Matrices LED de 8×8 pixel
En la construcción del último reloj LED que monté, lo hice conectando 4 matrices LED de 8×8 pixel. Estas matrices llevan las conexiones de entrada y salida por la cara inferior y superior, y esto obliga a que el tamaño del reloj sea más grande de lo necesario.
En este caso voy a montar otro reloj con un display LED del mismo tamaño, pero será más pequeño que el anterior. Aunque el nuevo firmware también permite utilizar un segundo display OLED, en este caso no lo voy a montar, y además utilizaré 4 matrices LED interconectadas en un sólo PCB.
Esquema de montaje
El montaje de este reloj es muy rápido y sencillo, sólo hay que conectar 5 hilos entre un lateral del display LED y el módulo ESP32.
Configuración con doble interface WEB
Ahora el display LED permite mostrar la hora, o textos rotantes de hasta 255 caracteres. Tanto el modo de funcionamiento como su configuración, se programa a través de una conexión WiFi, y se guarda en la memoria EEPROM del módulo ESP32. De esta forma el reloj arranca siempre en el modo en el que se dejó la última vez: modo texto, o modo reloj.
Esta nueva versión de firmware incluye un menú WEB con nuevas opciones, y también animaciones cada vez que se reciben datos desde el reloj.
Firmware
El archivo que necesitas para programar el ESP32, lo puedes descargar de forma gratuita desde el repositorio GitHub: Clock-Text_ESP32
Caja 3D (Reloj-Texto)
El fichero .stl que necesitas para fabricar la caja de este display LED, lo puedes descargar desde el siguiente enlace: Clock and Text on LED display, configured by WiFi
¿Necesitas fabricar un circuito impreso?
Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.
PCB de prototipo gratis y con plazo de entrega rápido: https://www.pcbway.es/
Buenas tardes, ante todo muchas gracias por tu trabajo y por la pagina. He seguido todos los pasos para hacer el reloj, y ha ido todo perfecto, le he configurado el wifi y me muestra el display la dirección IP para conectarme, y aquí esta el problema, no puedo entrar para configurarlo, cuando pongo la ip en el navegador y el display da una pausa minúscula como si estuviera entrando al configurador pero no hace nada. Que puede pasar?
Gracias
Por lo que comentas, los datos de la consulta del móvil le llegan al ESP32 y responde, pero por alguna razón el router de tu WiFi no envía el tráfico de datos al móvil. Comprueba que tu móvil está conectado a la misma red WiFi de 2,4GHz que has configurado en el ESP32, quita los datos móviles del teléfono por si acaso y comprueba si tienes algún redireccionamiento del puerto 80 en el router.
Saludos,
José Ramón
Hola, he probado todo lo que dices y no funciona. te pego el log del puerto, por si ves algo. Gracias por tu pronta respuesta, Saludos
Juan A
Wait timeout
02:05:59.052 -> S_DISCONN
02:05:59.052 -> -> S_IDLE
02:06:04.141 -> New client @ 192.168.2.108
02:06:04.186 -> S_READ
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-alive
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-alive
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0
02:06:04.186 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1
02:06:04.232 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1
02:06:04.232 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36
02:06:04.232 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36
02:06:04.280 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
02:06:04.280 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
02:06:04.327 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflate
02:06:04.375 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflate
02:06:04.422 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: es-ES,es;q=0.9
02:06:04.468 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: es-ES,es;q=0.9
02:06:04.468 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: es-ES,es;q=0.9
02:06:04.515 -> OK -> Recv: GET / HTTP/1.1Host: 192.168.2.109Connection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Mobile Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7Accept-Encoding: gzip, deflateAccept-Language: es-ES,es;q=0.9
02:06:04.560 -> Err -> Wait timeout
02:06:04.560 -> S_DISCONN
02:06:04.560 -> -> S_IDLE
02:06:04.606 -> New client @ 192.168.2.108
Perdon, las tres primeras lineas, son de un log anterior
Una consulta, creo que el reloj solo se pone en hora al inicio, pero luego se actualiza alguna vez o hay que apagarlo para que al encender se actualice?
Así es, sólo se pone en hora al arrancar, y es en ese momento cuando necesita tener acceso a Internet. El RTC del módulo ESP32 es bastante preciso, no es necesario sincronizar la hora de forma automática. El reloj lo puedes actualizar cuando quieras a través de un dispositivo móvil, conectando por WiFi con el módulo ESP32 a través del Web browser (lo puedes ver en el video). También se actualiza la fecha y hora si apagas y enciendes el módulo.
Hola que tal, tengo problemas con la librería WebServer.h ¿Puedes ayudarme con esto?
En el código del programa puse los links de descarga de las librerías, debes utilizar la librería que se indica allí. ¿Qué error muestra el compilador?
Hola. Me encanta la idea del reloj con texto, ya tengo todas las piezas impresas y las matrices led van las en la misma caja.
He impreso las piezas y al ir a poner los leds, el hueco para ellos se queda pequeño y quería preguntarte si habría posibilidad de que me pasaras el archivo para poder modificar las medidas.
Un saludo y gracias por tu tiempo.
He respondido en tu correo.
hola amigo desde hace tiempo te sigo quisiera que el reloj configurado para wifi . lo pudiera hacer para bluetooht muchas gracias, y todos tus proyectos son geniales y bien explicados
Este reloj necesita estar conectado a Internet para funcionar, así que la conexión WiFi es necesaria. Hacer un control por BT no tiene mucho sentido, porque tendrías que instalar un software en cada dispositivo móvil, que quisieras utilizar para controlar el reloj.