⇧
vadnica-logo
Editor Moj Blog Geselnik Finance Moje storitve O projektu Telegram O meni O meni

WiFi internetna ura z Nano ESP32 in TFT zaslonom

Vezava komponent

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.

Povezave (Nano ESP32 → TFT LCD):

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!

Arduino koda

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");
}

Potreben material

  1. Arduino Nano ESP32: Mikrokrmilnik z vgrajenim WiFi.
  2. TFT LCD SPI 2.0": Barvni zaslon (krmilnik ILI9341).
  3. Protoboard SET: Za preizkusno vezavo brez spajkanja.
  4. Povezovalne žice: Za SPI komunikacijo.