Подключение MAX7219 к ESP32
Драйвер светодиодной матрицы 8×8
Модуль MAX7219 подключается к ESP32 по SPI тремя сигнальными проводами: DIN (MOSI), CLK (SCK) и CS. Питание — 5 В.
Схема подключения MAX7219 к ESP32
| MAX7219 | ESP32 |
|---|---|
| CLK | GPIO18 |
| CS | GPIO5 |
| DIN | GPIO23 |
| VCC | 3V3 |
| GND | GND |
Схема из примера «Матрица 8×8: первая точка».
⚡ В примере «MAX7219» питается от 3V3 — в симуляторе так проще, и модель это допускает. Настоящий модуль рассчитан на 5 В: подключайте VCC к VIN (5 В от USB) или к отдельному источнику 5 В с общей землёй.
Выводы MAX7219
| Вывод | Назначение |
|---|---|
| CLK | тактовый сигнал |
| CS | защёлка (LOAD): по фронту данные попадают в регистры |
| DIN | вход данных |
| VCC | питание 5 В |
| GND | общий провод |
Код для ESP32
// Выводы к микросхеме: данные, такт, выбор.
const int DIN = 23, CLK = 18, CS = 5;
// Регистры MAX7219. Разряды 1…8 — строки матрицы, остальное настройка.
const byte DECODE = 0x09, INTENSITY = 0x0A;
const byte SCANLIMIT = 0x0B, SHUTDOWN = 0x0C;
// Что горит: по байту на строку. Микросхема свои разряды прочитать не
// даёт, поэтому картинку скетч помнит сам.
byte rows[8];
// Слово в микросхему: адрес регистра и значение, старшим разрядом
// вперёд. Защёлкивается по возврату CS вверх — пока CS внизу, разряды
// просто едут дальше по цепочке.
void send(byte reg, byte value) {
digitalWrite(CS, LOW);
shiftOut(DIN, CLK, MSBFIRST, reg);
shiftOut(DIN, CLK, MSBFIRST, value);
digitalWrite(CS, HIGH);
}
void setup() {
pinMode(DIN, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(CS, OUTPUT);
digitalWrite(CS, HIGH);
send(SCANLIMIT, 7); // работают все восемь строк
send(DECODE, 0x00); // знакогенератор не нужен: здесь точки, а не цифры
send(INTENSITY, 8);
// После подачи питания микросхема выключена: скетч без этой строки
// работает правильно и не светит ничем.
send(SHUTDOWN, 1);
for (int row = 0; row < 8; row++) send(row + 1, 0);
}
void setLed(int row, int col, bool on) {
// Старший разряд байта — левый столбец: так разведены модули.
if (on) rows[row] |= 0x80 >> col;
else rows[row] &= ~(0x80 >> col);
send(row + 1, rows[row]);
}
void loop() {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
setLed(row, col, true);
delay(40);
}
}
// Строкой целиком — восемь точек за одну посылку вместо восьми.
for (int row = 0; row < 8; row++) {
rows[row] = 0;
send(row + 1, 0);
delay(60);
}
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на ESP32
- По даташиту порог высокого уровня на входах MAX7219 при питании 5 В — 3,5 В. Сигналы ESP32 в 3,3 В обычно работают, но при сбоях ставят преобразователь уровней, например 74HCT125.
- Аппаратный SPI (VSPI) на ESP32: SCK — GPIO18, MOSI — GPIO23; CS — любой свободный, например GPIO5.
В железе
По паспорту MAX7219 при питании 5 В считает «единицей» от 3,5 В, а ESP32 выдаёт 3,3 В. Чаще всего работает, но надёжно — через преобразователь уровней (или питать матрицу от 4,0–4,5 В).
Частые ошибки при подключении к ESP32
- Питать матрицу от 3V3: яркость низкая, а часть модулей не стартует.
- Не вывести микросхему из режима сна: после включения питания MAX7219 спит и экран пуст, в LedControl это
shutdown(0, false). - Несколько матриц на полной яркости от USB компьютера — ток до ампера, плата перезагружается. Уменьшайте яркость (
setIntensity) или берите отдельный блок питания. - Картинка повёрнута или отражена — у разных модулей разная ориентация. В MD_MAX72XX тип модуля задаётся параметром (FC16_HW, GENERIC_HW…).
shutdown(0, false)не вызван — после включения MAX7219 в режиме сна, и ничего не горит.- Каскад в обратную сторону: данные идут от DIN к DOUT, первый модуль — ближний к контроллеру.
Ещё по теме
Другие детали для ESP32
HC-SR04DHT22 (AM2302)BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CTM1637MPU6050 (GY-521)Модуль релеWS2812B (NeoPixel)KY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595ИК-приёмник (VS1838B)TFT ST7735 1,8″Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодDS18B20Ползунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21DSN65HVD230