🕐

Zegar na matrycy LED 8×32 z ESP8266 i NTP

📅 10 lutego 2025 ⏱ 12 min czytania 🏷️ Arduino/ESP 👁 4 odsłon
← Arduino/ESP
← Arduino / ESP

Matryca LED zbudowana z ośmiu modułów MAX7219 to doskonała baza dla efektownego zegara. ESP8266 pobiera czas z serwera NTP, więc nigdy się nie rozreguluje, a wbudowany serwer HTTP pozwala wyświetlić dowolną wiadomość przez przeglądarkę.

Potrzebne elementy

ElementIlośćCena orientacyjna
Moduł ESP8266 (NodeMCU lub Wemos D1 mini)1~15 zł
Matryca LED 8×8 z MAX7219 (zestaw 8 sztuk)1~25 zł
Kable dupont5~2 zł
Zasilacz 5 V / 2 A micro-USB1~15 zł

Schemat połączeń

Matryca (DIN, CS, CLK, VCC, GND)NodeMCU
VCC3V3
GNDGND
DIND7 (GPIO13 / MOSI)
CSD8 (GPIO15)
CLKD5 (GPIO14 / SCK)
💡 Jeśli matryca jest jasna na zmianę lub migocze – podłącz osobny zasilacz 5 V bezpośrednio do szyny VCC/GND matrycy. ESP8266 nie zawsze dostarcza wystarczającego prądu dla 8 modułów.

Biblioteki Arduino

Zainstaluj przez Library Manager:

Kod źródłowy

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <MD_Parola.h>
#include <MD_MAX72XX.h>
#include <SPI.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES  8
#define CS_PIN       D8

const char* ssid     = "TWOJE_SSID";
const char* password = "TWOJE_HASLO";

MD_Parola matryca = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600); // UTC+1
ESP8266WebServer serwer(80);

String wiadomosc = "";
char buforCzasu[9];

void setup() {
    matryca.begin();
    matryca.setIntensity(3);
    matryca.displayClear();

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) delay(500);

    timeClient.begin();

    serwer.on("/", []() {
        serwer.send(200, "text/html",
            "<form method='POST' action='/msg'>"
            "<input name='t' placeholder='Wiadomosc'>"
            "<button>Wyslij</button></form>");
    });
    serwer.on("/msg", HTTP_POST, []() {
        if (serwer.hasArg("t")) wiadomosc = serwer.arg("t");
        serwer.sendHeader("Location", "/");
        serwer.send(302);
    });
    serwer.begin();
}

void loop() {
    serwer.handleClient();
    timeClient.update();

    if (wiadomosc.length() > 0) {
        matryca.displayScroll(wiadomosc.c_str(), PA_LEFT, PA_SCROLL_LEFT, 60);
        if (matryca.displayAnimate()) wiadomosc = "";
    } else {
        sprintf(buforCzasu, "%02d:%02d:%02d",
            timeClient.getHours(),
            timeClient.getMinutes(),
            timeClient.getSeconds());
        matryca.setTextAlignment(PA_CENTER);
        matryca.print(buforCzasu);
    }
    delay(100);
}

Kalibracja strefy czasowej

Parametr 3600 w konstruktorze NTPClient to offset w sekundach (UTC+1 = 3600). Latem (CEST = UTC+2) zmień na 7200.

✅ Wskazówka: dodaj do loop() automatyczne przełączanie czasu letniego/zimowego sprawdzając datę przez bibliotekę Timezone.

Efekty scrollingu

MD_Parola obsługuje wiele animacji: PA_SCROLL_LEFT, PA_SCROLL_RIGHT, PA_FADE, PA_WIPE. Zmień stały w displayScroll() by uzyskać inny efekt przewijania wiadomości.

Obudowa

Matryca pasuje do listwy LED 3D-drukowanej lub ramy z profilu aluminiowego. Wystarczy wyeksportować rozmiar 256×32 mm z Tinkercad i zaplanować otwory na śruby M2.

Tagi: arduino esp8266 led ntp wyswietlacz