====== Экран E-Ink 1,54” / 200×200 / монохромный: инструкция и подключение ====== Используйте [[amp>product/display-e-ink-paper-1n54in?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|экран E-Ink с диагональю 1,54 дюйма]] для вывода текстовой и графической информации. {{ :products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in.1.jpg?nolink |}} Дисплей выполнен на электронных чернилах: расходует минимум энергии, имеет компактные размеры и хранит изображение после отключения питания. ===== Примеры работы с Arduino ===== Для упрощения работы с E-Ink-дисплеем используйте библиотеку [[https://github.com/waveshare/e-Paper|E-Paper]]. В ней вы найдёте примеры кода с подробными комментариями. ==== Схема подключения ==== Дисплей общается с управляющей платформой по шине SPI с дополнительными пинами. Для подключения экранов к управляющим платформам [[amp>collection/arduino?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|Arduino]] используйте [[amp>product/arduino-e-ink-paper-shield?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|Waveshare e-Paper Shield]] {{ :products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-scheme-arduino.png?nolink |}} ==== Вывод текста ==== Для начала выведем пару строк на дисплей. // подключаем библиотеку для работы с SPI #include // подключаем файл для работы с дисплеем #include "epd1in54.h" // подключаем файл для рисования примитивов #include "epdpaint.h" // объявляем константы для работы с дисплеем #define COLORED 0 #define UNCOLORED 1 // объявляем массив пикселей для вывода на дисплей unsigned char image[1024]; // объявляем объект для вывода примитивов Paint paint(image, 0, 0); // объявляем объект для работы с дисплеем Epd epd; void setup() { Serial.begin(9600); // инициализируем дисплей if (epd.Init(lut_full_update) != 0) { Serial.print("e-Paper init failed"); return; } // в дисплей встроено две области памяти, поэтому для полного обновления // необходимо использовать ClearFrameMemory дважды // отправляем команду очистки epd.ClearFrameMemory(0xFF); // применяем данные из буфера epd.DisplayFrame(); // отправляем команду очистки epd.ClearFrameMemory(0xFF); // применяем данные из буфера epd.DisplayFrame(); // задаем угол поворота = 0 paint.SetRotate(ROTATE_0); // задаем высоту и ширину окошка вывода графики // количество пикселей не должно превышать количества бит занятых объявленым масивом пикселей // 200*24 < 1024 * 8 // умножаем высоту и ширину окошка и сравниваем с количеством байт в массиве умноженного на 8 paint.SetWidth(200); paint.SetHeight(24); // устанавливаем закрашеное окошко вывода графики paint.Clear(COLORED); // записываем строку 16 шрифтом в окошко paint.DrawStringAt(60, 4, "AMPERKA", &Font16, UNCOLORED); // вносим окошко в буфер epd.SetFrameMemory(paint.GetImage(), 0, 0, paint.GetWidth(), paint.GetHeight()); // вносим не закрашенную строку в буфер paint.Clear(UNCOLORED); paint.DrawStringAt(0, 0, "Hello world!", &Font24, COLORED); epd.SetFrameMemory(paint.GetImage(), 0, 100, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); } void loop() { } ==== Вывод геометрических фигур ==== Методы библиотеки также позволяют выводить геометрические фигуры. // подключаем библиотеку для работы с SPI #include // подключаем файл для работы с дисплеем #include "epd1in54.h" // подключаем файл для рисования примитивов #include "epdpaint.h" // объявляем константы для работы с дисплеем #define COLORED 0 #define UNCOLORED 1 // объявляем массив пикселей для вывода на дисплей unsigned char image[1024]; // объявляем объект для вывода примитивов Paint paint(image, 0, 0); // объявляем объект для работы с дисплеем Epd epd; void setup() { Serial.begin(9600); // инициализируем дисплей if (epd.Init(lut_full_update) != 0) { Serial.print("e-Paper init failed"); return; } // в дисплей встроено 2 области памяти, поэтому для полного обновления // необходимо использовать ClearFrameMemory дважды // отправляем команду очистки epd.ClearFrameMemory(0xFF); // применяем данные из буфера epd.DisplayFrame(); epd.ClearFrameMemory(0xFF); epd.DisplayFrame(); // задаем угол поворота = 0 paint.SetRotate(ROTATE_0); // задаем высоту и ширину окошка вывода графики // количество пикселей не должно превышать количества бит занятых объявленным массивом пикселей // 64*64 < 1024 * 8 // умножаем высоту и ширину окошка и сравниваем с количеством байт в массиве умноженного на 8 paint.SetWidth(64); paint.SetHeight(64); // выводим зачеркнутый прямоугольник // устанавливаем параметр окошка - не закрашено paint.Clear(UNCOLORED); // рисуем прямоугольник paint.DrawRectangle(0, 0, 40, 50, COLORED); // рисуем 2 линии paint.DrawLine(0, 0, 40, 50, COLORED); paint.DrawLine(40, 0, 0, 50, COLORED); // вносим окошко в буфер epd.SetFrameMemory(paint.GetImage(), 16, 30, paint.GetWidth(), paint.GetHeight()); // выводим круг paint.Clear(UNCOLORED); paint.DrawCircle(32, 32, 30, COLORED); epd.SetFrameMemory(paint.GetImage(), 120, 23, paint.GetWidth(), paint.GetHeight()); // выводим закрашенный прямоугольник paint.Clear(UNCOLORED); paint.DrawFilledRectangle(0, 0, 40, 50, COLORED); epd.SetFrameMemory(paint.GetImage(), 16, 120, paint.GetWidth(), paint.GetHeight()); // выводим закрашенный круг paint.Clear(UNCOLORED); paint.DrawFilledCircle(32, 32, 30, COLORED); epd.SetFrameMemory(paint.GetImage(), 120, 113, paint.GetWidth(), paint.GetHeight()); epd.DisplayFrame(); } void loop() { } ==== Вывод изображения ==== Для старта подготовьте картинку для вывода её на экран — преобразуйте в массив чисел. Для этого понадобиться графический редактор [[http://gimp.org|GIMP]] и программа для создание массива символов из изображения {{:продукты:troyka-oled:lcdassistant.zip|LCDAssistant}}. Повторимся ещё раз, каждый символ в массиве это байт, в котором храниться информация о том, какие пиксели (биты) закрашивать в данном байте. И так по очереди все байты на каждой странице. // подключаем библиотеку для работы с SPI #include // подключаем файл для работы с дисплеем #include "epd1in54.h" // подключаем файл для рисования примитивов #include "epdpaint.h" // подключаем файл с сохраненной картинкой #include "imagedata.h" // объявляем константы для работы с дисплеем #define COLORED 0 #define UNCOLORED 1 // объявляем массив пикселей для вывода на дисплей unsigned char image[1024]; // объявляем объект для вывода примитивов Paint paint(image, 0, 0); // объявляем объект для работы с дисплеем Epd epd; void setup() { Serial.begin(9600); // инициализируем дисплей if (epd.Init(lut_full_update) != 0) { Serial.print("e-Paper init failed"); return; } // в дисплей встроено 2 области памяти, поэтому для полного обновления // необходимо использовать ClearFrameMemory дважды // отправляем команду очистки epd.ClearFrameMemory(0xFF); // применяем данные из буфера epd.DisplayFrame(); epd.ClearFrameMemory(0xFF); epd.DisplayFrame(); // записываем картинку в буфер epd.SetFrameMemory(IMAGE_DATA); // выводим буфер на экран epd.DisplayFrame(); } void loop() { } ===== Примеры работы с Raspberry Pi ===== Для запуска примеров выполните [[#схема_подключения|железную]] и [[#программная_часть|программную]] настройку платформы. ==== Схема подключения ==== Дисплей общается с управляющей платформой по шине SPI с дополнительными пинами. Для подключения экранов к управляющим платформам [[amp>collection/raspberry-pi?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|Raspberry Pi]] используйте [[amp>product/raspberry-pi-hat-e-ink-paper?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|Waveshare e-Paper Driver HAT]]. {{ :products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-scheme-raspberry-pi.png?nolink |}} ==== Программная часть ==== - [[articles:rpi-guide| Подготовьте Raspberry Pi]] . - Скачайте библиотеку для работы с E-Ink дисплеями.git clone https://github.com/waveshare/e-Paper - Запустите пример из репозитория. ===== Габаритный чертёж ===== [[this>_media/products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-mechanical-drawing.pdf|{{:products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-mechanical-drawing.png}}]] ===== Ресурсы ===== * [[amp>product/display-e-ink-paper-1n54in?utm_source=man&utm_campaign=display-e-ink-paper&utm_medium=wiki|Экран E-Ink 1,54” / 200×200 / монохромный]] в магазине. * [[https://github.com/amperka/hardware-drawings/blob/master/display-e-ink-paper-1n54in.svg|Векторное изображение экрана]] * {{ :products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-user-manual.pdf |Инструкция от производителя (ENG)}} * {{ :products:display-e-ink-paper-1n54in:display-e-ink-paper-1n54in-datasheet.pdf |Datasheet на экран}}