FireBeetle Led 24×8 Date e Clock

FireBeetle Led 24×8 Date e Clock aggiunge la funzione data all’orologio in visione del progetto finale di realizzare un orologio con datario maker.

FireBeetle Led 24x8 Date e Clock date

Prima di iniziare con la descrizione di questa componente del progetto ti invito a leggere i precedenti articoli collegati al progetto stesso:

in ciascuno di essi è descritto minuziosamente una componente del progetto dall’installazione delle librerie per ESP32 alla gestione della matrice di led.

Premessa per FireBeetle Led 24×8 Date e Clock 

Prima di passare alla descrizione dello sketch del progetto e delle funzionalità è necessario che tu applichi alla libraria NTP client un fix che ti consente di aggiungere le tre funzioni:

  • getYear()
  • getMonth()
  • getDate()

per poter interrogare la libreria facendoti restituire sia la data nel formato già previsto o solo i 3 valori, giorno,mese ed anno in modo singolo e separato.

Tale modifica serve a semplificare lo sketch ed ottenere la divisione della data in:

FireBeetle Led 24x8 Date e Clock date

Anno

e

FireBeetle Led 24x8 Date e Clock day and month

Giorno:Mese

la modifica è descritta in questa issue direttamente sul git della libreria NTP Client: https://github.com/arduino-libraries/NTPClient/issues/36

Lo sketch FireBeetle Led 24×8 Date e Clock

Ora che hai eseguito la modifica alla libreria ntp client puoi procedere con l’analisi dello sketchFireBeetle Led 24×8 Date e Clock e l’upload:

/*
 *  This sketch sends random data over UDP on a ESP32 device
 *
 */
#include <NTPClient.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include "DFRobot_HT1632C.h"

#if defined( ESP_PLATFORM ) || defined( ARDUINO_ARCH_FIREBEETLE8266 )  //FireBeetle-ESP32 FireBeetle-ESP8266
#define DATA D6
#define CS D2
#define WR D7
//#define RD D8
#else
#define DATA 6
#define CS 2
#define WR 7
//#define RD 8
#endif

// WiFi network name and password:
const char * ssid = "[ SSID ]";
const char * pwd  = "[ password WiFi ]";

//The udp library class
WiFiUDP udp;

// FireBeetle Led Matrix
DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);

char str[]  = "00:00";
byte countData = 0;

// By default 'time.nist.gov' is used with 60 seconds update interval and
// no offset
NTPClient timeClient(udp,0);

void setup(){
  Serial.begin(115200);
  WiFi.begin(ssid, pwd);

  ht1632c.begin();
  ht1632c.isLedOn(true);
  ht1632c.clearScreen();
  ht1632c.setCursor(0,0);
  ht1632c.setPwm(0);
  ht1632c.print("wifi...");

  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
  
  timeClient.begin();
  ht1632c.clearScreen();
  ht1632c.setCursor(1,0);
  ht1632c.print("...ok...");
}

void loop(){
  timeClient.update();
  
  ht1632c.clearScreen();
  ht1632c.setCursor(1,0);
 
  if ( (timeClient.getSeconds()%2) == 0 ) {
    sprintf(str,"%02d:%02d", timeClient.getHours(), timeClient.getMinutes());
  } else {
    sprintf(str,"%02d %02d", timeClient.getHours(), timeClient.getMinutes());
  }

  if ( countData == 5 ) {
    countData=0;
    
    ht1632c.clearScreen();
    ht1632c.setCursor(0,0);
    sprintf(str,"%02d/%02d", timeClient.getDate(), timeClient.getMonth());
    ht1632c.print(str);
    delay( 1000 );
    
    sprintf(str,"%04d", timeClient.getYear());
    ht1632c.clearScreen();
    ht1632c.setCursor(2,0);
  }
  Serial.println(str);
  ht1632c.print(str);
  
  countData++;
  delay(1000);
}

le linee iniziali, dalla 01-08, includono le librerie necessarie alla connessione WiFi, gestione ntp e gestione HT1632c ( la matrice display )

linee 10-20: sono le impostazioni e definizioni dei pin in funzione dell’architettura del micro controllore che utilizzerai;

ricordati che alle linee 23-24 devi cambiare i valori inserendo quelli per collegare la FireBeetle Led 24×8 Date e Clock alla tua connessione WiFi;

le linee dalla 27 alla 59 sono dettagliatamente descritte negli articoli di cui trovi i link sopra.

Linea 62: richiedi alla libreria ntp un update delle informazioni ad ogni loop();

linee 64-65: ripulisci il display 24×8 led matrix e posizioni il cursore alla posizione 1,0;

le linee 67-71: si occupano di calcolare se il secondo corrente è pari o dispari e di conseguenza se accendere o spegnere i “:” tra l’ora ed i minuti, trovi decritta anche questa parte nei precedenti articoli;

linea 73: controlla il valore di una variabile chiamata countData la cui funzione è scandire ogni quanti secondi visualizzare la data sul display. Se la countData assume valore 5 puoi procedere con le linee che seguono;

linea 74: azzera la variabile countData perché al ciclo successivo riparta da 0;

linee 76-77: pulisci i display e posizionati in 0,0;

linea 78: usando il comando sprintf formatta la data, giorno, e mese secondo il formato gg/mm, aggiungendo gli 0 se il valore numerico è inferiore a 10;

Linee 79-80: scrivi sul display la stringa appena creata e attendi 1 secondo prima di procedere oltre;

linea 82: usando la funzione sprintf, come già alla linea 78, formatta l’anno richiesto alla libreria mediante il metodo getYear() aggiunto nella correzione della libreria;

linee 83-84: pulisci nuovamente il display e posizionati in 2,0;

linea 87: scrivi sul display il valore della variabile str sia essa proveniente dalla condizione di if della linea 73 od in alternativa dalle linee 67-71;

linea 89: incrementa ad ogni ciclo di loop il valore della countData in modo che possa ogni 5 secondi visualizzare la data e l’anno del FireBeetle Led 24×8 Date e Clock;

linea 90: implementa un ritardo, o attesa, di un secondo.

Il video del FireBeetle Date e Clock

dopo aver modificato la libreria, rivviato l’IDE e trasferito il dato sulla ESP32 puoi controllare che la connessione WiFi sia avvenuta correttamente mediante serial monitor e successivamente dovresti vedere quanto nel video:

Nei prossimi articoli dedicati a questo progetto proveremo a inserire altre future per gestire una sveglia ed una agenda remota.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/firebeetle-led-24x8-date-e-clock.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.