Reloj LED Wifi con ESP8266 y función Pomodoro

Autor: Oscar Gonzalez

Reloj LED Wifi con ESP8266 y función Pomodoro

Tiempo de lectura: 6 minutos

Reloj LED con display de 7 segmentos basado en ESP8266 Wifi actualizado por NTP y con función Pomodoro

Reloj LED Wifi con ESP8266 y función Pomodoro

  • 0

0 Principiante

Programación

El código se basa principalmente en el ejemplo de la sincronización NTP. Lo que hace es conectarse a un servidor de tiempo y mediante la librería NTPClient, actualizar la hora en el display.´

En la función Setup() se intenta una conexión a la red Wifi configurada mediante las constantes ssid y password y aprovechamos la ocasión para recuperar la hora actual según la noza horaria. Eso evita que tengamos que poner el reloj en hora.

El resto del código es muy sencillo (y probablemente poco optimizado) y consiste en el control del pulsador para iniciar una cuenta atrás Pomodoro. El display ofrece pocas opciones para mostrar información más que los propios números, por lo que si te despistas un poco, puedes perder la noción de si estás en modo hora o modo Pomodoro, aunque si el reloj corre al revés, es obvio. Muy probablemente se puede mejorar o incluso añadir más funciones, pero eso lo dejo a tu criterio!

Código experimental

Ten en cuenta que éste código fuente no pretende ser un sistema Pomodoro completo, solo una guía para hacer funcionar el reloj. ¡Te animo a que intentes extenderlo y mejorarlo!

//
//    FILE: demo_displayTime.ino
//  AUTHOR: Rob Tillaart
// VERSION: 0.2.0
// PURPOSE: demo
//     URL: http://www.adafruit.com/products/1002
//     URL: https://github.com/RobTillaart/HT16K33


// sketch will work correctly up to 99:99
#include < NTPClient.h >
#include < ESP8266WiFi.h >
#include < WiFiUdp.h >
#include "HT16K33.h"

#define BUTTON D3

const char* ssid       = "MY_SSID";
const char* password   = "MYPASSWORD";
const long utcOffsetInSeconds = 3600;

HT16K33 seg(0x70);

static uint32_t last = 0;

// Define NTP Client to get time
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);

bool pomodoro_mode = false;
int pomodoro_minutes = 25;
int pomodoro_seconds = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);    

  // Display init
  seg.begin();
  seg.brightness(7);
  Wire.setClock(100000);
  seg.displayOn();
  seg.setDigits(4);

  seg.displayClear();

  // Try to connect to Wifi network...
  WiFi.begin(ssid, password);

  int i=0;
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    seg.blink(i);
    Serial.print ( "." );
    if (i > 3) { i=0; }
  }

  Serial.println ( "Connected!" );

  seg.displayClear();
  timeClient.begin();    
  timeClient.update();

  // First time update
  seg.displayColon(true);
  seg.displayTime(timeClient.getHours(), timeClient.getMinutes());  

  last = millis();

  pinMode(BUTTON, INPUT_PULLUP);
  
}

void loop()
{  

  if (digitalRead(BUTTON) == LOW) { Serial.println("CLICK!"); pomodoro_mode = true; delay(100); }

  if ((millis()-last) > (100*1)) // Every minute
  {
    if (pomodoro_mode == true)
    {
      seg.displayTime(pomodoro_minutes, pomodoro_seconds);

      if (pomodoro_seconds == 0)
      {
        if (pomodoro_minutes > 0) { pomodoro_minutes--; pomodoro_seconds = 59; }
        else { pomodoro_mode = false; pomodoro_minutes=25; /* POMODORO END! */ }
      }
      else { pomodoro_seconds--; }
    }
    else
    {
      //timeClient.update();
  
      //Serial.print(daysOfTheWeek[timeClient.getDay()]);
      Serial.print(", ");
      Serial.print(timeClient.getHours());
      Serial.print(":");
      Serial.print(timeClient.getMinutes());
      Serial.print(":");
      Serial.println(timeClient.getSeconds());
      //Serial.println(timeClient.getFormattedTime());   
             
      seg.displayColon(true);
      delay(500);
      seg.displayTime(timeClient.getHours(), timeClient.getMinutes());
    }

    last = millis();
  }      
}

Cargar el programa en Arduino

Recuerda que pada poder cargar el programa desde el IDE de Arduino, es necesario tener instalados los cores de ESP8266, así como la propia librería ESP8266, WifiUDP y HT16K33. Eso lo puedes hacer muy fácilmente desde el gestor de librerías.

Si no sabes cómo añadir nuevas placas al IDE de Arduino, te recomendamos seguiro primer éste tutorial:

Conclusiones

Si has visto nuestro vídeo ya lo sabes y si bien no es un proyecto completo, te puede dar una idea de cómo enfocar el método Pomodoro y cómo implementarlo en un dispositivo físico que puedes construir tu mismo.

En cualquier caso es un proyecto muy sencillo de realizar donde siempre puedes aprender algo nuevo. Al fin y al cabo, es una placa NodeMCU con un display I2C y eso puede valer para muchas otras aplicaciones.