# Умный экран Что может быть лучше, чем экран, управляемый по интернету? Только собранный самостоятельно и управляемый по интернету самостоятельно. ![](/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 <SPI.h> #include <Adafruit_GFX.h> #include <Max72xxPanel.h> 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)