V tem projektu uporabljamo zmogljiv Arduino Nano ESP32, ki preko vgrajenega WiFi modula pridobi točen čas iz internetnih strežnikov (NTP). Za prikaz časa in datuma uporabljamo 2.0" TFT LCD zaslon.
POMEMBNO: V Arduino IDE v meniju Tools -> Pin Numbering nujno izberite "By Arduino pin number", da bodo oznake pinov v kodi ustrezale luknjicam na ploščici!
Za delovanje potrebujete knjižnici Adafruit GFX in Adafruit ILI9341 (ali ST7789, odvisno od zaslona). Namestite ju preko Library Manager-ja v Arduino IDE.
// Arduino Nano ESP32 WiFi ura s TFT zaslonom (ST7789)
// Avtor: Borut Bukovnik - vadnica.org
#include <SPI.h>
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
const char* ssid = "Vpisi_WiFi_Ime";
const char* password = "Vpisi_Geslo";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9
// Inicializacija za ST7789 gonilnik
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(115200);
pinMode(TFT_RST, OUTPUT);
digitalWrite(TFT_RST, LOW); delay(100);
digitalWrite(TFT_RST, HIGH); delay(100);
// Inicializacija zaslona ST7789 (širina: 240, višina: 320)
tft.init(240, 320);
tft.invertDisplay(true);
tft.setRotation(2);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(40, 100);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.print("POVEZAVA...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
tft.fillScreen(ST77XX_BLACK);
}
void loop() {
static int zadnja_sekunda = -1;
struct tm info;
if (!getLocalTime(&info)) return;
if (info.tm_sec != zadnja_sekunda) {
zadnja_sekunda = info.tm_sec;
izpisi_uro(&info);
}
}
void izpisi_uro(struct tm *info) {
char ura_str[10], datum_str[20];
// Izbira barve glede na nočni/dnevni čas
uint16_t barva = (info->tm_hour >= 22 || info->tm_hour < 6) ? ST77XX_RED : ST77XX_BLUE;
tft.fillRect(0, 70, 320, 60, ST77XX_BLACK);
tft.setCursor(10, 80);
tft.setTextColor(barva);
tft.setTextSize(4);
strftime(ura_str, 10, "%H:%M:%S", info);
tft.print(ura_str);
tft.setCursor(60, 160);
tft.setTextColor(ST77XX_YELLOW, ST77XX_BLACK);
tft.setTextSize(2);
strftime(datum_str, 20, "%d. %m. %Y", info);
tft.print(datum_str);
tft.setCursor(10, 10);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setTextSize(1);
tft.print("VADNICA.ORG CLOCK");
}