FireBeetle Led 24×8 NTP client Clock

Il progetto FireBeetle Led 24×8 NTP client Clock ti mostra come costruire un orologio sincronizzato con un NTP server e che visualizza l’orario sul display a matrice di led 24×8 della DFRobot.

L’uso dell’NTP è vantaggioso sia in termini di precisione sia in termini di componenti necessari per la realizzazione dei progetti simili.

FireBeetle Led 24x8 NTP client Clock

In pratica se tu volessi utilizzare un micro controllore per realizzare questo progetto avresti necessariamente bisogno di un componete RTC che possa mantenere l’orario aggiornato e corretto per un lungo periodo non potendoti basare sul clock interno del SoC.

Inoltre la scrittura del codice necessario a simulare l’orario: ore,minuti e secondi è possibile ma oneroso sia in termini di tempo sia di clock stesso causando un inevitabile disallineamento.

Ti consiglio, se non lo hai già fatto di leggere qualcuno degli articoli che precedono questo per comprendere le basi su cui ho basato questo progetto:

al termine della lettura avrai chiaro sia come scrivere del testo sul FireBeetle Led 24×8 e come gestire la sincronia oraria con un server ntpd.

Il progetto FireBeetle Led 24×8 NTP client Clock

Il progetto FireBeetle Led 24×8 NTP client Clock punta a farti realizzare un orologio con matrice di led che prenda l’orario on-line e lo visualizzi sottoforma di testo sui led della matrice.

In particolare per sfruttare il massimo della dimensione del carattere visualizzerai l’orario in formato

“HH:MM”

in cui HH rappresenta lora su due cifre e MM i minuti su due cifre mentre i due punti scandiscono i secondi accendendosi ai secondi pari e spegnendosi in quelli dispari.

Lo sketch della FireBeetle Led 24×8 NTP client Clock

Lo sketch della FireBeetle Led 24×8 NTP client Clock deve semplicemente eseguire quello che ho descritto sopra e per farlo usa gran parte del codice presentato nei precedenti due articoli citati:

/*
 *  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 ]";

//The udp library class
WiFiUDP udp;

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

char str[]  = "00:00";

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

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

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

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

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

  Serial.println(str);
  ht1632c.print(str);
  
  //Wait for 1 second
  delay(1000);
}

ti concentrerai in questo articolo solo sulle linee differenti, come la linea 32 in cui definisci una array di tipo char inizializzato a 00:00 usato per rappresentare l’orario.

Nello sketch della FireBeetle Led 24×8 NTP client Clock userai la stringa str vista alla linea 32 per memorizzare il valore orario da visualizzare.

Linee 42-47: usando i metodi della libreria HT1632c inizializza il display a matrice di led ed imposta la luminosità al minimo 1 per rendere l’orologio piacevole e scrivi “..wifi..” sul display in attesa della connessione;

linee 49-52: esegui un ciclo while nel quale la connessione WiFI sarà stabilita.

linea 57: quando la connessione avviene puoi cambiare il testo visualizzato con “…ok…”; 

linea 61: richiedi alla libreria NTP Client un update di orario ad ogni ciclo di loop();

linee 63-64: pulisci il display e imposta il cursore alla posizione 0,0 ( in alto a sinistra );

linea 66: controlla che il resto della divisione per 2 del secondo corrente, richiesto mediante il metodo getSeconds() all’ntp library sia 0, questo comporta che il secondo è uno di quelli pari: 0,2,4,6,8,10….

linea 67: componi la str come “HH:MM” in cui HH è sostituito dal risultato del metodo getHours() ed MM è sostituito dal risultato di getMinutes() tra i due, nota, compaiono i “:”;

linee 68-69: sono la condizione di else, quando il secondo corrente è dispari, la stringa composta è priva del “:”;

linea 73: visualizza sul display l’orario nel formato definito;

linea 76: attendi un secondo tra un ciclo ed il successivo di richiesta e visualizzazione oraria.

Il video della FireBeetle Led 24×8 NTP client Clock

Il progetto FireBeetle Led 24×8 NTP client Clock è più chiaro se osservi questo video che ho realizzato per mostrarti i passaggi che vedrai una volta caricato lo sketch:

Se tutto è avdato a buon fine avrai realizzato il tuo orologio NTP client.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/firebeetle-led-24x8-ntp-client-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.