clock tft con ora legale
come posso fare per visualizzare su display la stessa ora che stampo su seriale??
grazie!!
/**************************************************************************
*
* WiFi Internet clock (NTP) with ESP8266 NodeMCU (ESP-12E) board and
* ST7735 TFT display.
* This is a free software with NO WARRANTY.
* https://simple-circuit.com/
* by Renzo Mischianti <www.mischianti.org>
* modificato in data 31 marzo 2021 con aggiunta libreria Timezone
* lettura regole da file Renzo Mischianti by Aldo
* IMPOSTARE COME SCHEDA NODEMCU 1.0 (ESP12E MODULE)..NOVEMBRE 2021
*************************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TimeLib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library
#include <Timezone.h> // https://github.com/JChristensen/Timezone
#include <time.h> //questa libreria converte il timestamp Unix (Unix epoch) in: secondi, minuti, ore, giorno della settimana, giorno, mese e anno.
//L'epoca Unix è il numero di secondi trascorsi dal 1 gennaio 1970 (mezzanotte UTC/GMT).
//Fondamentalmente il time server invia l'ora in formato Unix epoch che deve essere convertito, questa libreria fa tutto il lavoro
// ST7735 TFT module connections
#define TFT_RST D4 // TFT RST NodeMCU pin D4 (GPIO2)
#define TFT_CS D3 // TFT CS NodeMCU pin D3 (GPIO0)
#define TFT_DC D2 // TFT DC NodeMCU pin D2 (GPIO4)
// initialize ST7735 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// set WiFi network SSID and password
const char *ssid = "retemiaenontua";
const char *password = "vadaviailculo";
//-----------------------------------------------------------------------------
//Immettere l'ora nel formato epoch e restituire il formato dell'ora tm
static tm getDateTimeByParams(long time){
struct tm *newtime;
const time_t tim = time;
newtime = localtime(&tim);
return *newtime;
}
// Immettere il formato dell'ora tm e restituire la stringa con il modello di formato
static String getDateTimeStringByParams(tm *newtime, char* pattern = (char *)"%d/%m/%Y %H:%M:%S"){
char buffer[30];
strftime(buffer, 30, pattern, newtime);
return buffer;
}
// Inserisci l'ora in formato epoch e restituisci Stringa con modello di formato
static String getEpochStringByParams(long time, char* pattern = (char *)"%d/%m/%Y %H:%M:%S"){
//struct tm *newtime;
tm newtime;
newtime = getDateTimeByParams(time);
return getDateTimeStringByParams(&newtime, pattern);
}
WiFiUDP ntpUDP;
// Per impostazione predefinita, "pool.ntp.org" viene utilizzato con un intervallo
// di aggiornamento di 60 secondi e nessun offset
int GTMOffset = 0; // SET TO UTC TIME
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", GTMOffset*60*60, 60*60*1000);
TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120}; // Central European Summer Time
TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60}; // Central European Standard Time
Timezone CE(CEST, CET);
unsigned long epoch;
//collegamento--http://mischianti.org/it/protocollo-ntp-fuso-orario-e-ora-legale-dst-con-esp8266-esp32-o-arduino/
//--------------------------------------------------------------------------------------------//
void setup(void)
{
Serial.begin(115200);
tft.initR(INITR_BLACKTAB); // inizializza un chip ST7735S, sfondo nero
tft.fillScreen(ST7735_BLACK); // riempire lo schermo con il colore nero
tft.setRotation(5);
tft.setTextColor(ST7735_CYAN, ST7735_BLACK); // imposta il colore del testo su sfondo nero
tft.setTextSize(1);
tft.setCursor(12, 14);
tft.print("Wi-Fi Internet Clock");
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay(500);
tft.setCursor(15, 54);
tft.print("CONNETTING...");
}
timeClient.begin();
tft.setCursor(15, 84);
delay(500);
//tft.print("CONNESSO");
if (timeClient.update()){
tft.print ( "Adjust local clock" );
unsigned long epoch = timeClient.getEpochTime();
setTime(epoch);
}
else{
tft.print ( "NTP Update not WORK!!" );
}
delay ( 500 );
tft.fillScreen(ST7735_BLACK);
tft.setTextSize(1);
tft.setCursor(10, 6);
tft.print("Wi-Fi Internet Clock");
tft.setTextSize(2);
//timeClient.begin();
delay ( 500 );
}
//---------------------------------------------------------------------------//
void RTC_display()
{
char dow_matrix[7][10] = {"DOMENICA", "LUNEDI", "MARTEDI", "MERCOLEDI", "GIOVEDI", "VENERDI", "SABATO"};
byte x_pos[7] = {14, 25, 24, 13, 24, 24, 25};
static byte previous_dow = 0;
if( previous_dow != weekday(epoch) ) // stampa il giorno della settimana
{
previous_dow = weekday(epoch);
tft.fillRect(9, 70, 112, 25, ST7735_BLACK); // disegnare un rettangolo (cancella il giorno dal display)
tft.setCursor(x_pos[previous_dow-1], 77); // COORDINATA ALTEZZA SCRITTA GIORNO SETTIMANA
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // imposta il colore del testo su sfondo nero
tft.print( dow_matrix[previous_dow-1] );
tft.setTextSize(2);
}
// stampa la data
tft.setTextSize(2);
tft.setCursor(5, 105);
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK);
tft.printf( "%02u-%02u-%04u", day(epoch), month(epoch), year(epoch) );
// stampa il tempo con punti lampeggianti dei secondi
tft.setTextSize(4);
tft.setCursor(8, 30);
tft.setTextColor(ST7735_GREEN, ST7735_BLACK);
/* 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….
quando il secondo corrente è dispari, la stringa composta è priva del “:”
*/
if ( (timeClient.getSeconds()%2) == 0 ) {
tft.printf( "%02u:%02u", hour(epoch), minute(epoch), second(epoch) );
} else {
tft.printf( "%02u %02u", hour(epoch), minute(epoch), second(epoch) );
}
tft.setTextSize(2);
}
//-----------------------------------------------------------------------//
void loop()
{
timeClient.update();
epoch = timeClient.getEpochTime(); // ottenere il tempo Epoch
Serial.print("lettura... : ");
Serial.println(epoch);
Serial.println(getEpochStringByParams(CE.toLocal(now())));
RTC_display();
delay(300);
}