Calendario Perpetuo con Google Calendar V2

Guia completa de construccion, instalacion y configuracion

Calendario Perpetuo funcionando

El Calendario Perpetuo mostrando enero con festivos, aniversarios y el reloj de colores

Tabla de Contenidos

  1. Introduccion
  2. Caracteristicas
  3. Materiales Necesarios
  4. Construccion
  5. Instalacion del Firmware
  6. Configuracion Inicial
  7. Configuracion de Google Calendar
  8. Reloj con Codigo de Colores
  9. Interfaz Web
  10. Resolucion de Problemas

1 Introduccion

Este proyecto es un calendario perpetuo fisico que muestra todos los dias del mes actual usando LEDs de colores. Los digitos de los dias estan posicionados de tal manera que cualquier mes puede mostrarse simplemente encendiendo los LEDs en las posiciones correctas.

Enero con domingo primero

Enero 2022 - Domingo como primer dia

Enero con lunes primero

Enero 2022 - Lunes como primer dia

El calendario se sincroniza automaticamente con Google Calendar para mostrar:

Cada tipo de evento se muestra en un color diferente, permitiendo ver de un vistazo que dias son especiales.

Principio de Funcionamiento

Los numeros permanecen fijos en su lugar. Solo los LEDs se encienden en diferentes posiciones y colores segun el mes:

Prioridad de colores: Si un dia tiene multiples eventos, el color final sigue esta prioridad (el ultimo sobrescribe): Dia base → Dia actual → Festivos → Aniversarios → Tareas.

2 Caracteristicas

La Version 2 incluye mejoras significativas sobre el proyecto original:

Web Flasher

Instala el firmware directamente desde el navegador. No necesitas Arduino IDE ni conocimientos de programacion.

Interfaz Web Completa

Configura todo desde tu telefono o computadora: WiFi, colores, brillo, Google Calendar.

Actualizaciones OTA

Actualiza el firmware sin cables, directamente por WiFi.

mDNS

Accede facilmente via http://perpetualcalendar.local

Auto-Brillo

Ajusta automaticamente el brillo segun la hora. Modo nocturno para apagar LEDs de noche.

Colores Personalizables

Cambia los colores de cada tipo de dia desde la interfaz web.

WiFi Multi-Red

Configura red principal y de respaldo. Reconexion automatica.

Reloj con Colores

Opcion de mostrar HH:MM:SS usando 6 LEDs con colores codificados.

Especificaciones Tecnicas

ParametroValor
MicrocontroladorESP8266 (D1 Mini, NodeMCU, etc.)
LEDs75 LEDs WS2811/WS2812B
Pin de datosGPIO 2 (D4 en NodeMCU)
Alimentacion5V, minimo 3A
ConexionWiFi 2.4GHz
Puerto web80
Puerto OTA8266

3 Materiales Necesarios

Componentes Electronicos

ComponenteCantidadNotas
ESP8266 (D1 Mini o NodeMCU)1Recomendado: Wemos D1 Mini
Tira LED WS2811/WS2812B75 LEDs60 LEDs/m, cortar en tiras
Fuente de alimentacion 5V1Minimo 3A (75 LEDs x 60mA)
Conector DC hembra 5.5mm/2.5mm1Para la fuente de poder
Modulo regulador 5V/3.3V1Para alimentar el ESP
Resistencia 3K ohm1Entre GPIO2 y VCC (importante)
Cables de coloresVariosPara conexiones

Materiales de Construccion

Acrilico ahumado

Acrilico ahumado de 2mm de grosor

MaterialEspecificacion
Piezas impresas 3DMarco, soporte de LEDs, rejilla, pata
Acrilico ahumado191mm x 96mm x 2mm
Papel blanco impresoCon numeros de dias y meses (PDF incluido)
Pegamento calientePara fijar componentes
Cinta adhesiva de espuma1mm de grosor, para la pata

Piezas Impresas en 3D

Soporte de LEDs

Soporte para los LEDs con relieves

Rejilla

Rejilla separadora

Marco

Marco frontal

Pata soporte

Pata y tapa trasera

Archivos 3D: Descarga los modelos STL:
Descargar STL (7.3 MB) - Archivo listo para imprimir
Ver/editar en Tinkercad - Para modificar el diseno
Hay dos versiones de rejilla: con y sin separaciones para los 6 LEDs del reloj.

Herramientas

4 Construccion

Paso 4.1: Preparar las Tiras LED

Corta la tira de LEDs en las siguientes piezas:

Tiras LED cortadas

Las 6 tiras de LEDs cortadas y listas para montar

Importante: Presta atencion a la direccion de los datos (flechas en la tira). Las piezas se conectan en zigzag alternando direcciones.

Paso 4.2: Montar los LEDs en el Soporte

  1. Posiciona las tiras de LEDs en el soporte, entre los relieves
  2. Presiona firmemente con un palo de plastico para buena adherencia
  3. Los relieves permiten acercar los LEDs a 12mm de distancia (como si fuera 83 LEDs/m)
  4. Respeta las direcciones de las flechas (zigzag)
LEDs montados

LEDs montados en el soporte mostrando el patron zigzag

Paso 4.3: Esquema de Conexiones

Esquema electronico

Diagrama completo de conexiones - nota el patron zigzag y la resistencia de 3K

Resistencia de 3K obligatoria: La resistencia entre GPIO2 y VCC es necesaria para que el ESP-01 arranque correctamente con la tira LED conectada. Sin ella, el modulo puede no iniciar.
Alimentacion: NO alimentes la tira de 75 LEDs desde el ESP8266. Usa una fuente externa de 5V/3A y conecta el GND comun entre la fuente, los LEDs y el ESP8266.

Paso 4.4: Preparar el Papel con Numeros

Papel con numeros

Plantilla impresa con los numeros y nombres de meses

PDF incluido: El archivo plantilla_numeros.pdf contiene la plantilla lista para imprimir en papel A4. Recorta siguiendo el contorno.

Paso 4.5: Ensamblaje Final

El ensamblaje se realiza en capas, de atras hacia adelante:

  1. Soporte con LEDs - Base con las tiras LED montadas y soldadas
  2. Modulo ESP y regulador - Fijados con pegamento caliente en la ranura
  3. Rejilla 3D - Sobre el soporte, separa la luz de cada LED
  4. Papel impreso - Con los numeros hacia arriba
  5. Acrilico ahumado - Difunde la luz y protege
  6. Marco frontal - Fija todo en su lugar
  7. Pata trasera - Con cinta adhesiva de espuma

5 Instalacion del Firmware

Opcion A: Web Flasher (Recomendado)

La forma mas facil de instalar. No requiere ningun software.

  1. Conecta el ESP8266 a tu computadora via USB
  2. Abre Chrome, Edge u Opera (Firefox/Safari no soportados)
  3. Visita: https://XE1E.github.io/Perpetual-Calendar-with-Google-Calendar-Connection-V2/
  4. Selecciona la version:
  5. Haz clic en "Instalar"
  6. Selecciona el puerto serial cuando aparezca
  7. Espera ~30 segundos a que termine
Problemas comunes: Si no aparece el puerto, verifica que el cable USB soporte datos (no solo carga) y que ningun otro programa este usando el puerto (cierra Arduino IDE).

Opcion B: PlatformIO

# Clonar repositorio
git clone https://github.com/XE1E/Perpetual-Calendar-with-Google-Calendar-Connection-V2.git

# Version estandar
pio run -e standard -t upload

# Version con reloj de colores
pio run -e color_coded_clock -t upload

Opcion C: Arduino IDE

  1. Instala Arduino IDE
  2. Anade soporte ESP8266: http://arduino.esp8266.com/stable/package_esp8266com_index.json
  3. Instala la libreria FastLED desde el gestor de librerias
  4. Selecciona placa: NodeMCU 1.0
  5. Carga el sketch

6 Configuracion Inicial

Paso 6.1: Conectar al Punto de Acceso

Despues de flashear, el ESP8266 crea una red WiFi:

ParametroValor
Nombre de red (SSID)Calendario
Contrasena12345678
IP de configuracionhttp://192.168.4.1

Paso 6.2: Configurar WiFi

  1. Conecta tu telefono/PC a la red "Calendario"
  2. Abre un navegador y ve a http://192.168.4.1
  3. Haz clic en "Configuracion de Red"
  4. Ingresa el SSID y contrasena de tu red WiFi
  5. Opcionalmente, configura una red de respaldo
  6. Guarda y reinicia

Paso 6.3: Configurar NTP

  1. Ve a "Configuracion NTP"
  2. Servidor NTP: time.cloudflare.com (o uno local)
  3. Zona horaria: Selecciona tu zona (ej: UTC-6 para Mexico Centro)
  4. Horario de verano: Activa si aplica en tu region

Paso 6.4: Acceso Normal

Una vez configurado, accede al calendario mediante:

7 Configuracion de Google Calendar

Paso 7.1: Crear Calendarios en Google

Necesitas tres calendarios separados:

  1. Festivos - Importa el calendario de festivos de tu pais desde "Explorar calendarios de interes"
  2. Aniversarios - Crea un nuevo calendario para cumpleanos y fechas importantes
  3. Tareas - Crea un nuevo calendario para tareas y recordatorios
Tip: Para los festivos, puedes importar un calendario publico de tu pais desde "Configuracion" → "Agregar calendario" → "Explorar calendarios de interes".

Paso 7.2: Obtener IDs de Calendarios

  1. Ve a calendar.google.com
  2. Haz clic en los tres puntos junto al calendario
  3. Selecciona "Configuracion y uso compartido"
  4. Busca "ID del calendario" (formato: xxx@group.calendar.google.com)
  5. Copia el ID de cada calendario

Paso 7.3: Crear Google Apps Scripts

Para cada calendario, crea un script en script.google.com:

function doGet() {
  var calId = 'TU_CALENDAR_ID_AQUI';
  var calendar = CalendarApp.getCalendarById(calId);

  if (!calendar) {
    return ContentService.createTextOutput('Error: Calendario no encontrado');
  }

  var now = new Date();
  var start = new Date(now.getFullYear(), now.getMonth(), 1);
  var end = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59);
  var events = calendar.getEvents(start, end);

  var days = "";
  var added = {};
  for (var i = 0; i < events.length; i++) {
    var d = events[i].getStartTime().getDate();
    if (!added[d]) {
      days += d + "-";
      added[d] = true;
    }
  }

  return ContentService.createTextOutput(days);
}

Paso 7.4: Publicar los Scripts

  1. En cada script, ve a "Implementar" → "Nueva implementacion"
  2. Tipo: "Aplicacion web"
  3. Ejecutar como: "Yo"
  4. Quien tiene acceso: "Cualquier persona"
  5. Haz clic en "Implementar"
  6. Autoriza el acceso a tu cuenta de Google
  7. Copia el ID de implementacion (no la URL completa)

Paso 7.5: Configurar en el Calendario

  1. Accede a la interfaz web del calendario
  2. Ve a "Apps Script Settings"
  3. Pega los IDs de cada script en su campo correspondiente
  4. Guarda la configuracion
Frecuencia de actualizacion: Los tres calendarios (tareas, festivos y aniversarios) se recargan una vez por hora, y tambien al reiniciar o al guardar los colores o los ajustes de LED.

8 Reloj con Codigo de Colores

La version "Color Coded Clock" usa los LEDs 62-67 para mostrar la hora en formato HH:MM:SS, donde cada digito se representa con un color diferente.

Distribucion de LEDs

LED 62 LED 63 LED 64 LED 65 LED 66 LED 67 ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ ┌──┐ │H1│ │H2│ │M1│ │M2│ │S1│ │S2│ └──┘ └──┘ └──┘ └──┘ └──┘ └──┘ ↓ ↓ ↓ ↓ ↓ ↓ Decena Unidad Decena Unidad Decena Unidad Hora Hora Minuto Minuto Segundo Segundo

Tabla de Colores por Digito

DigitoColorMuestra
0Negro/Apagado
1Rojo
2Naranja
3Amarillo
4Verde
5Cyan
6Azul
7Purpura
8Rosa
9Blanco/Gris

Ejemplo: 14:35:27

9 Interfaz Web

Paginas Disponibles

PaginaURLDescripcion
Calendario Perpetuo/Menu de administracion
Configuracion de Red/config.htmlConfigurar redes WiFi
Informacion/info.htmlEstado del sistema, reinicio
Configuracion NTP/ntp.htmlServidor de tiempo
Apps Script Config/appsscript.htmlIDs de Google Scripts
Ajuste Manual de Hora/time.htmlAjustar hora manualmente
Configuracion LEDs/led.htmlControl de brillo, test LEDs
Brillo Automatico/autobrightness.htmlModo dia/noche
Configuracion Colores/colors.htmlPersonalizar colores
Actualizacion OTA/ota.htmlActualizaciones por WiFi

9.1 Calendario Perpetuo (Menu Principal)

Pagina principal con acceso a todas las opciones de configuracion. Incluye boton para cambiar entre espanol e ingles.

9.2 Configuracion de Red

Permite configurar la conexion WiFi del dispositivo.

SeccionCampos
Red PrincipalSSID y Contrasena de la red WiFi principal
Red de RespaldoSSID2 y Contrasena2 (opcional, si la principal falla)
Config IPDHCP (checkbox), IP estatica, Mascara de red, Puerta de enlace
Estado ConexionMuestra el estado actual (Conectado, Desconectado, etc.)
RedesLista de redes WiFi disponibles con calidad de senal
Tip: Haz clic en el nombre de una red detectada para copiarla automaticamente al campo SSID.

9.3 Informacion del Sistema

Muestra el estado actual del dispositivo y permite acciones de mantenimiento.

SeccionInformacion
RedSSID conectado, IP, Mascara, Gateway, direccion MAC
RecursosRAM libre, RAM fragmentada, tamano Flash, frecuencia CPU, tiempo encendido (uptime)

Acciones disponibles:

9.4 Configuracion NTP

Configura la sincronizacion de hora por Internet.

ParametroDescripcion
Servidor NTPDireccion del servidor de tiempo (ej: time.cloudflare.com)
Intervalo (min)Cada cuantos minutos sincronizar la hora (0=desactivado)
Zona HorariaSelecciona tu zona horaria (GMT-12 a GMT+13)
Primer dia semanaLunes o Domingo como primer dia de la semana
Horario de VeranoActivar si tu region usa horario de verano (DST)

9.5 Apps Script Config

Configura los IDs de los Google Apps Scripts para sincronizar calendarios.

CampoDescripcion
FestivosID del script que devuelve los dias festivos
AniversariosID del script que devuelve cumpleanos y aniversarios
TareasID del script que devuelve tareas y eventos
Nota: Solo pega el ID de implementacion, no la URL completa. El ID tiene formato similar a: AKfycbw...

9.6 Ajuste Manual de Hora

Permite establecer la fecha y hora manualmente sin usar NTP.

CampoFormato
Ano4 digitos (ej: 2024)
Mes1-12
Dia1-31
Hora0-23
Minuto0-59
Segundo0-59

9.7 Configuracion LEDs

Controla el brillo y permite probar los LEDs.

ParametroDescripcionRango
BrilloControl deslizante para ajustar intensidad5-255

Botones:

9.8 Brillo Automatico

Configura el brillo segun la hora del dia para ahorrar energia y evitar molestias nocturnas.

ParametroDescripcionRango
ActivarHabilita/deshabilita el brillo automaticoOn/Off
Brillo de diaIntensidad durante horas diurnas5-255
Brillo de nocheIntensidad durante horas nocturnas0-255 (0=apagado)
Dia inicia a lasHora y minuto cuando comienza el modo dia00:00-23:55
Noche inicia a lasHora y minuto cuando comienza el modo noche00:00-23:55

Estado Actual: Muestra la hora actual, si esta en modo dia o noche, y el brillo aplicado.

9.9 Configuracion Colores

Personaliza los colores de cada tipo de dia en el calendario.

Tipo de diaColor por defecto
Dias laborales Verde
Fin de semana Rojo
Dia actual Azul
Mes actual Gris
Festivos Magenta
Aniversarios Cyan
Tareas Naranja

Botones:

Correccion Gamma: Ajusta el perfil de color y temperatura para mejorar la apariencia de los LEDs.

OpcionDescripcion
Perfil colorSin correccion, TypicalLEDStrip (recomendado), TypicalSMD5050
TemperaturaSin ajuste, DirectSunlight (recomendado), Tungsten100W, ClearBlueSky

9.10 Actualizacion OTA

Permite actualizar el firmware sin cables, directamente por WiFi.

InformacionDescripcion
HostnameNombre del dispositivo en la red (ej: perpetualcalendar.local)
Direccion IPIP actual del dispositivo
Puerto8266 (puerto estandar OTA)
EstadoListo para recibir actualizaciones

Instrucciones para actualizar:

  1. Abrir Arduino IDE o PlatformIO
  2. Ir a Tools > Port
  3. Seleccionar el puerto de red (aparece como perpetualcalendar at 192.168.x.x)
  4. Subir el sketch normalmente

10 Resolucion de Problemas

Animacion Arcoiris Continua

Causa: No se recibe respuesta del servidor NTP.

Solucion:

No se Muestran Eventos de Google

Causa: Problema con los scripts de Google Apps.

Solucion:

Hora Incorrecta

Solucion:

No Funciona mDNS

Solucion:

LEDs No Encienden

Solucion:

ESP No Inicia / Se Reinicia

Causa: Falta la resistencia de 3K o problema de alimentacion.

Solucion: