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ę.
| Element | Ilość | 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 dupont | 5 | ~2 zł |
| Zasilacz 5 V / 2 A micro-USB | 1 | ~15 zł |
| Matryca (DIN, CS, CLK, VCC, GND) | NodeMCU |
|---|---|
| VCC | 3V3 |
| GND | GND |
| DIN | D7 (GPIO13 / MOSI) |
| CS | D8 (GPIO15) |
| CLK | D5 (GPIO14 / SCK) |
Zainstaluj przez Library Manager:
#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);
}
Parametr 3600 w konstruktorze NTPClient to offset w sekundach (UTC+1 = 3600). Latem (CEST = UTC+2) zmień na 7200.
loop() automatyczne przełączanie czasu letniego/zimowego sprawdzając datę przez bibliotekę Timezone.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.
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.