Logo

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 s krmilnikom ILI9341.

Povezave (Nano ESP32 → TFT LCD):

  1. VCC → VBUS (5V)
  2. GND → GND
  3. SCL (SCK) → D13
  4. SDA (MOSI) → D11
  5. CS → D10
  6. RESET → D9
  7. DC (RS) → D8
  8. LED → VBUS (5V)

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. Namestite ju preko Library Manager-ja v Arduino IDE.

// Arduino Nano ESP32 WiFi ura s TFT zaslonom
// Avtor: Borut Bukovnik - vadnica.org

#include <SPI.h>
#include <WiFi.h>
#include "time.h"
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.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

Adafruit_ILI9341 tft = Adafruit_ILI9341(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);

  tft.begin();
  tft.invertDisplay(true); // Popravek za barvno inverzijo nekaterih zaslonov
  tft.setRotation(2);      // Landscape orientacija
  tft.fillScreen(ILI9341_BLACK);

  tft.setCursor(40, 100);
  tft.setTextColor(ILI9341_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(ILI9341_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];
  
  // Barvna logika: Modra podnevi, rdeča ponoči (22h - 06h)
  uint16_t barva = (info->tm_hour >= 22 || info->tm_hour < 6) ? ILI9341_RED : ILI9341_BLUE;

  // Pobrišemo prejšnji izpis ure
  tft.fillRect(0, 70, 320, 60, ILI9341_BLACK); 

  tft.setCursor(10, 80);
  tft.setTextColor(barva);
  tft.setTextSize(4); // Velikost prilagojena širini zaslona
  strftime(ura_str, 10, "%H:%M:%S", info);
  tft.print(ura_str);

  tft.setCursor(60, 160);
  tft.setTextColor(ILI9341_YELLOW, ILI9341_BLACK);
  tft.setTextSize(2);
  strftime(datum_str, 20, "%d. %m. %Y", info);
  tft.print(datum_str);
  
  tft.setCursor(10, 10);
  tft.setTextColor(ILI9341_WHITE, ILI9341_BLACK);
  tft.setTextSize(1);
  tft.print("VADNICA.ORG CLOCK");
}
Vezava Nano ESP32 in TFT LCD

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.

Hvala za obisk! Dodajam politiko zasebnosti.

© 2024 Vse pravice pridržane.

Vam je koda pomagala? Če želite podpreti moj trud pri pripravi vodičev in vzdrževanju strani, mi lahko namenite donacijo za kavo.