# Умный экран
Что может быть лучше, чем экран, управляемый по интернету?
Только собранный самостоятельно и управляемый по интернету самостоятельно.
![](/assets/images/iot/09/max7219_dot_matrix.jpg)
Используется микросхема MAX7219, которая получает данные от контроллера по протоколу SPI,
а потом подает их на выводы светодиодной матрицы в нужном порядке.
Преимуществом данной микросхемы является то, что их можно выстроить в цепочку и они будут передавать друг другу информацию по цепочке,
в итоге можно будет построить большой экран (почти как с адресными светодиодами).
![](/assets/images/iot/09/spi.png)
Для работы потребуются библиотеки:
* https://github.com/adafruit/Adafruit-GFX-Library
* https://github.com/markruys/arduino-Max72xxPanel
### Схема подключения
![](/assets/images/iot/09/screen.svg)
| WeMos D1 |MAX7219 |
|----------|--------|
| 3V3 |VCC |
| GND |GND |
| D7 |DIN |
| D8 |CS |
| D5 |CLK |
### Пример программы
```c
#include
#include
#include
int pinCS = D8;
int numberOfHorizontalDisplays = 1; // у нас по горизонтали 1 матрица
int numberOfVerticalDisplays = 4; // зато по вертикали 4, и чтобы получить строку - нужно будет повернуть изображение на 90 градусов
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
String tape = "Internet of Thinks"; // текст, который будет плыть
int wait = 20; // время между крайними перемещениями букв
int spacer = 1; // расстояние между буквами
int width = 5 + spacer; // размер шрифта
void setup() {
matrix.setIntensity(7); // яркость
matrix.setRotation(1); // поворачиваем матрицу на 90 градусов
}
void loop() {
for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) {
matrix.fillScreen(LOW);
int letter = i / width;
int x = (matrix.width() - 1) - i % width;
int y = (matrix.height() - 8) / 2; // центр строки по вертикали
while ( x + width - spacer >= 0 && letter >= 0 ) {
if ( letter < tape.length() ) {
matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1);
}
letter--;
x -= width;
}
matrix.write();
delay(wait);
}
}
```
### Готовое устройство
![](/assets/images/iot/09/screen.jpg)
## Задача
Выводить в бегущей строке текст, полученный из топика **itschool/screen**.
[к списку задач](iot/summer/tasks)