← До всіх проєктів
Дисплеї Початковий

Біжучий рядок на матриці MAX7219 з текстом із браузера

Чотири матриці 8×8 утворюють яскравий біжучий рядок. Текст змінюємо з телефона через просту веб-форму — для майстерні, кав'ярні чи дитячої кімнати.

Складність
Початковий
Час
1 h
Категорія
Дисплеї

Що отримаємо

Модуль FC-16 — це чотири світлодіодні матриці 8×8 на драйверах MAX7219, з'єднані в ланцюжок (разом 32×8 точок). Бібліотека MD_Parola бере на себе шрифти, прокрутку та десятки анімацій, а ESP32 додає веб-форму: відкриваєте сторінку на телефоні, вводите текст — і він одразу біжить по табло.

Компоненти

  • ESP32 DevKit
  • Модуль MAX7219 4-in-1 (FC-16), 32×8
  • 5 дротів мама-мама

Підключення

MAX7219 ESP32
VCC 5V (VIN)
GND GND
DIN GPIO 23 (MOSI)
CS GPIO 5
CLK GPIO 18 (SCK)

Матриці на повній яскравості можуть споживати до 1 А — для довгих ланцюжків живіть їх від окремого 5 В блока. MAX7219 зазвичай нормально сприймає 3.3 В логіку ESP32.

Бібліотеки

  • MD_Parola
  • MD_MAX72XX (залежність)

Код

#include <WiFi.h>
#include <WebServer.h>
#include <SPI.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES   4
#define CS_PIN        5

const char* WIFI_SSID = "YOUR_SSID";
const char* WIFI_PASS = "YOUR_PASSWORD";

MD_Parola display(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
WebServer server(80);

char message[128] = "Hello from ESP32!";

const char PAGE[] = R"rawliteral(
<!doctype html><html><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>LED Ticker</title>
<style>body{font-family:system-ui;max-width:420px;margin:40px auto;padding:0 16px}
input,button{font-size:1.1rem;padding:10px;width:100%;box-sizing:border-box;margin-top:8px}</style>
</head><body>
<h2>LED Ticker</h2>
<form action="/set">
  <input name="msg" maxlength="120" placeholder="Text (Latin letters)" autofocus>
  <input name="speed" type="range" min="20" max="150" value="60">
  <button>Show</button>
</form></body></html>
)rawliteral";

void handleSet() {
  String text = server.arg("msg");
  // Стандартний шрифт має лише ASCII — відкидаємо інші символи
  String clean;
  for (unsigned int i = 0; i < text.length(); i++) {
    char c = text[i];
    if (c >= 32 && c < 127) clean += c;
  }
  clean.trim();
  if (clean.length()) {
    clean.toCharArray(message, sizeof(message));
  }
  int speed = server.arg("speed").toInt();
  if (speed >= 20 && speed <= 150) display.setSpeed(speed);  // мс на крок: менше — швидше
  display.displayReset();

  server.sendHeader("Location", "/");
  server.send(303);
}

void setup() {
  Serial.begin(115200);
  display.begin();
  display.setIntensity(3);   // яскравість 0..15
  display.displayText(message, PA_LEFT, 60, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);

  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    display.displayAnimate();
    delay(10);
  }
  // Показуємо IP, щоб знати, куди заходити
  snprintf(message, sizeof(message), "IP %s", WiFi.localIP().toString().c_str());
  display.displayReset();

  server.on("/", [] { server.send(200, "text/html", PAGE); });
  server.on("/set", handleSet);
  server.begin();
}

void loop() {
  server.handleClient();
  if (display.displayAnimate()) {
    display.displayReset();   // прокрутка закінчилась — починаємо знову
  }
}

Перевірка

  1. Після ввімкнення на табло пробіжить Hello from ESP32!, а після підключення до Wi-Fi — IP 192.168.x.x.
  2. Відкрийте цю адресу на телефоні, введіть текст, пересуньте повзунок швидкості, натисніть Show.

Якщо щось не так

  • Текст задом наперед або «розсипаний» по матрицях — спробуйте інший тип: PAROLA_HW, GENERIC_HW або ICSTATION_HW.
  • Горять усі точки або нічого — перевірте DIN/CLK/CS і спільну землю.
  • Кирилиця: стандартний шрифт її не має. MD_MAX72XX дозволяє підключити власний шрифт — у репозиторії бібліотеки є інструкція та утиліта для створення шрифтів.

Ідеї

  • Годинник: показуйте час з NTP (див. проєкт «Точний годинник») у режимі PA_CENTER без прокрутки.
  • Лічильник підписників YouTube чи курс валют через HTTP API.
  • Ланцюжок з 8–12 модулів для великого табло — змініть MAX_DEVICES.