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