- Назначение, плюсы и минусы,
- Принцип работы,
- E-paper и Ардуино,
- Вывод,
- FAQ.
Назначение, плюсы и минусы
Электронная бумага (E-Paper), также известная как электронные чернила (E-ink устар.) - относительно новое электронное устройство отображение информации, знакомое нам по так называемым “читалкам” - электронным книгам. За последние лет пятнадцать эти носители в среде книголюбов, особенно молодых, почти полностью вытеснили своих бумажных конкурентов, хотя бы потому, что один такой легкий и компактный гаджет может заменить собой не то что пару книжных шкафов, а хоть всю мировую библиотеку. Возникает вопрос: зачем нужна электронная книга, если у всех уже и так имеются планшеты и смартфоны, способны выполнять ту же работу? Могут конечно, но e-paper обладает парой преимуществ, которые с лихвой оправдывают ее покупку. Первое, оно же главное, электронная бумага практически полностью повторяет собой свойства обычной целлюлозной бумаги, то есть только отражает падающий на нее свет, ничего не излучает, а значит не мерцает, имеет отличную четкость и контрастность изображения, не “давит” на глаза и портит их намного медленнее чем традиционные мониторы и дисплеи. Второе замечательное свойство, частично вытекающее из первого, потребление энергии на порядки ниже, бумага не светится (пока говорим о классической версии, без подсветки), электричество потребляет лишь в момент смены изображения, после чего текст и картинки не требуют никаких дополнительных ресурсо, чтобы оставаться на экране. Аккумулятора книги хватит на несколько суток непрерывной работы. Еще один бонус - электронная бумага очень тонкая и легкая, при необходимости сделать из нее выпуклый или вогнутый экран гораздо проще и дешевле. Электронная бумага - гениальное изобретение и замечательная альтернатива бумаге настоящей, однако у нее есть ряд существенных недостатков, которые ограничивают ее применение в ряде случаев. А именно: медленная смена изображения, от половины секунды до десятков секунд, ограниченная цветовая гамма (чаще всего черно-белая), малое количество оттенков по сравнению с традиционными мониторами. Забегая вперед скажем, что с развитием технологий перечисленные недостатки становятся все менее заметны, однако до сих пор на устройствах с такими дисплеями ни видео толком не посмотреть, ни в динамичные игрушки не поиграть.Немного о перспективах. На данный момент уже существуют цветные версии e-paper. Двухцветные широко используются в дисплеях для DIY-изделий и один такой мы даже рассмотрим в этой статье. Более продвинутые версии имеют в арсенале до 7 цветов, сочетаниями которых можно получать практически полноцветное изображение. Скорость обновления страниц тоже постоянно растет от версии к версии и, на самых последних поколениях, уже приближается к обычным мониторам. Оснащение экрана сенсорным слоем и подсветкой позволило недавно появиться в продаже полноценному смартфону на e-ink, который демонстрирует неплохие результаты в сравнении со своими традиционными собратьями. На очереди e-ink ноутбук. Будем болеть за технологию электронной бумаги, пожелаем ей развития и процветания во благо нашего зрения.
Для Ардуино проектов часто требуется 3D принтер. Где приобрести расходники?
Купить запчасти и комплектующие для вашего 3д принтера можно в нашем магазине: https://3d-diy.ru/catalog/spare-parts-3d-printer/
Принцип работы
Классическая электронная бумага, появившаяся на рынке еще в 1996 году, двухцветная. Пиксель представляет собой микрокапсулу, заполненную прозрачной жидкостью, в которой плавают белые и черные микрошарики. Шарики обладают собственным зарядом, разным, в зависимости от цвета, благодаря чему избирательно реагируют на электромагнитное поле. Одни отталкиваются от положительного заряда основания, другие притягиваются, тем самым меняя цвет верхней стенки капсулы. Увеличивая и уменьшая площади зарядов под каждой капсулой, можно регулировать количество тех или иных шариков на поверхности, создавая градиенты серого цвета. Разумеется, на перемещение толкающихся внутри капсулы шариков требуется время, отсюда и медленная реакция. Более того, часть “неправильных” шариков при смене цвета обязательно застрянет среди “правильных” товарищей, и на экране останутся артефакты - “призраки” прошлого. Бороться с этим можно многократной сменой кадра, как бы встряхивая капсулы, на что тратится еще больше времени. Однако со временем растет миниатюризация, капсулы становятся все меньше, а значит увеличивается разрешение дисплея и повышается скорость его работы.Принцип работы цветной бумаги до конца не ясен широкому кругу лиц, а производители не горят желанием раскрывать свои секреты, однако существуют некоторые идеи и догадки. Например, двухцветные дисплеи, вероятнее всего, оснащаются двухцветными же шариками, с одной стороны окрашенными черным, с другой каким-то другим цветом, чаще всего красным или желтым. Формирование изображения ведется в два этапа, что, кстати, заметно при работе такой бумаги, сперва всплывают цветные шарики, затем поворачиваются кверху нужным боком. Или же всплывают белые, если нужен белый фон. Производство полноцветной бумаги покрыто еще большей тайной, остается только догадываться что там придумали ученые и инженеры. Одна из версий такова: пиксель состоит из трех капсул, накрытых тремя светофильтрами: красным, зелёным и синим. Всплывающие белые шарики отражают соответствующий цвет, а черные нет, таким образом получаем сочетание трех основных цветов, а значит все цвета радуги. Регулируя оттенок каждой капсулы, получаем цветовые оттенки пикселя. Если вам показалось, что подобным образом работают обычные эмиссионные дисплеи, то вам не показалось, это все тот же принцип RGB, известный со школьного курса физики.
А теперь настала пора переходить от теории к практике. Какие дисплеи e-paper, как и для чего можно применять DIY-мастеру в реальной жизни. Что для этого нужно и что из этого получится?
Где приобрести модули и датчики для Ардуино?
Купить различные комплектующие для Arduino можно в нашем магазине перейдя по ссылке: https://3d-diy.ru/catalog/arduino-and-robotics/
E-paper и Ардуино
В продаже имеется несколько разновидностей дисплеев, различающихся размером, цветностью и компоновкой. Самые бюджетные - черно-белые, с диагональю полтора дюйма, они вполне могут демонстрировать небольшое количество информации, например время, температуру, влажность, скорость и прочие цифры, при условии, что они меняются не очень часто. На дисплей можно вывести надписи, заранее подготовленную картинку или несложную инфографику. Далее размеры дисплеев растут по дюйму до размера 7,5 и более. К некоторым добавляется желтый или красный цвет, что разнообразит картину, делает ее нагляднее и веселее. Дисплеи продаются как в “чистом” виде, без драйвера, так и в виде модуля, который уже готов к подключению к Ардуино сразу из коробки. Если нет технических оснований для использования бумаги на некотором расстоянии от драйвера, например ограниченное пространство, лучше покупать модуль в сборе, это значительно проще и надежнее.Нам в руки попал именно такой модуль с драйвером на борту. Размер средний - 2,9 дюйма, прямоугольной формы, в миллиметрах выглядит вот так. Толщина 7 мм без защитного стекла, которое идет в комплекте. Еще в комплект входят четыре нейлоновые стойки с болтами и гайками, для легкого монтажа дисплея к чему угодно. Дисплей достался трехцветный: черно-бело-красный. На дисплее застыла тестовая картинка, залита на заводе-производителе, что однозначно доказывает его работоспособность и исправность. Сохранять изображение после отключения питания - важнейшее и полезнейшее свойство электронных чернил.
На обратной стороне два параллельно распятых разъема интерфейса и переключатель режима работы на 3 или 4 контакта.
Продавец не публикует рекомендуемые библиотеки для работы, поэтому для начала пробуем подобрать их самостоятельно. Первой в глаза бросается библиотека от заслуженно знаменитой Adafruit, которая так и называется “Adafruit EPD”. Сокращение EPD, вероятно, означает Electronic Paper Display. Попытка запустить бумагу с этой библиотекой оказывается напрасной, дисплей не реагирует никак. Перебирались все возможные варианты подключения, результат нулевой. Вывод: скорее всего, библиотека не подходит для данного дисплея, но не исключено, что, потратив время на адаптацию, от нее можно чего-то добиться.
Вторая попытка скрестить e-paper с Ардуино была предпринята при помощи библиотеки со сложным названием “GxEPD2”, именно ее рекомендует сообщество электроннокнижников. Самый большой плюс библиотеки - поддержка десятков дисплеев различных размеров и производителей. Самым большой минус - тот же самый. При запуске примера в IDE сразу подгружаются с десяток файлов, которые требуется изучить и настроить. Следует закомментировать ненужные строки и раскомментировать нужные, указать чип драйвера, цветность, размер и подключенные ноги. Рекомендуется удалить все ненужное, потому что полная версия простой тестовой прошивки после компиляции занимает от 80 до 95% флеш-памяти и порядка 80% динамической для контроллера Atmega32. Компилятор даже сообщает, что с такими критическими нагрузками программа может работать нестабильно. Потратив какое-то время, можно почистить библиотеку до разумных 60-70% памяти, что тоже особо не даст разгуляться основному коду.
С библиотекой “GxEPD2” дисплей наконец-то ожил. На экране появились надписи разного размера и цвета, зажглись простые геометрические фигуры, а в конце нас даже порадовали полноэкранным двухцветным иероглифом. Вывод: библиотека работает с этим дисплеем, но нуждается в настройке и подгонке по многим параметрам, а также исключением ненужного кода для максимального сокращения своей громоздкости. Пользоваться можно.
На этом можно было бы остановиться, но практически случайно мы нашли библиотеку от производителя. На нее нет ссылки у продавцов, поисковик ее загнал на какую-то далекую страницу, что очень странно, но тем не менее она отыскалась. Строго говоря, это даже не библиотека, а набор полноценных примеров для разных типов и размеров дисплеев. Каждый пример включает полтора десятка файлов, из которых пять - латинские шрифты разного размера от 8 до 24 пунктов. Имеется запускаемый файл с примером кода, файлы с подгружаемыми функциями и файл с примером картинки в виде шестнадцатеричного массива. Примеры есть на все дисплеи этого производителя, причем каждый для трех видов контроллеров: AVR, STM32 и Raspberry. Скачиваются одним архивом. Ссылка на сайт с примерами и мануалом по подключению и работе здесь.
Данная, своего рода, SDK показалась нам оптимальной. Благодаря разделению примеров по аппаратному признаку, настройки сведены к минимуму, ничего лишнего в код практически не попадает, скомпилированный код, конечно, компактным не назвать, но занимает он почти вдвое меньше памяти, чем предыдущее решение. Давайте немного остановимся на этом варианте.
Не будем дословно повторять написанное на сайте производителя, разберем несколько функций и выведем на экран картинку.
Итак, сперва подключаем дисплей к Ардуино согласно приложенной схеме. Переключатель интерфейса BS1 на дисплее устанавливаем в положении L - на 4 провода.
Загружаем пример согласно имеющемуся у нас на руках дисплею (в нашем случае epd2in9bc), запускаем и смотрим на результат. На дисплее появится несколько простых фигур, надписи, затем двухцветная картинка (если дисплей двухцветный), после чего дисплей выключается, его можно даже отсоединять от Ардуино, картинка с живописными иероглифами все равно останется.
Наблюдая за процессом вывода изображения узнаем несколько фактов. Первое: время на формирование полного кадра требуется порядка 15 секунд, да, скорость обновления не его конёк. Второе: изображение получается очень четким и приятным, практически как на лощеной бумаге дорогого журнала. Третье: цветная часть графики выводится после черной, надо обязательно это учитывать при работе, если черный и цветной объект пересекутся, место пересечения будет в любом случае цветным.
Все функции делятся на несколько категорий:
- формирование примитивов, простых элементов: точка, линия, квадрат, круг, заполненный квадрат и заполненный круг,
- формирование текста, строчные и прописные латинские буквы, цифры, знаки препинания и другое (полный список можно посмотреть в файле с шрифтами, там все наглядно),
- формирование растровой картинки,
- вывод на экран,
- очистка экрана.
paint.DrawStringAt(0, 0, "e-Paper Demo", &Font24, COLORED);
всего лишь готовит картинку из строки текста, набранного в кавычках. В качестве параметров указывается размер шрифта, его положение и цветность. Цвет цветности уточняется в следующей строке:
epd.SetPartialWindowBlack(paint.GetImage(), 24, 32, paint.GetWidth(), paint.GetHeight());
Она закидывает картинку в память дисплея на указанное место (24, 32) и с указанным цветом (Black). Таким образом сперва готовим и размещаем в памяти все необходимые элементы (текст и примитивы), а затем уже даем драйверу команду все это отобразить:
epd.DisplayFrame();
Готовя изображение, следует учитывать расположение координатной сетки дисплея: ось X короткая, ось Y длинная, нулевая точка в дальнем углу от шлейфа. Текст всегда создается на подложке, то есть в окружении прямоугольника цвета фона (белого), если вывести текст поверх другой картинки или надписи, под ним будет белая непрозрачная “рамка”. Правила несложные, но и они могут причинять страдания при написании кода.
В принципе, при помощи имеющихся примитивов можно изобразить все, что угодно, однако более сложные картинки иногда проще подготовить в растровом формате, то есть в виде набора точек. Делается это в несколько этапов. Давайте рассмотрим процесс на примере, а именно будем изображать на нашем дисплее логотип сайта 3D-DIY. Сперва мы готовим картинку в любом графическом редакторе: обрезаем и масштабируем рисунок до нужного разрешения (у нас 296x128), не забывая, как расположена координатная сетка, затем разбиваем рисунок на два имеющихся в распоряжении цвета (черный и красный). Да, логотип получится не в оригинальном колоре, но тут мы бессильны, делаем из чего можем, буквы и тени от щита создадим черными, сам щит красным. Сохраняем два черно-белых файла, для черного и красного, в формате gif.
Примечание: при смене палитры с многоцветной на черно-белую, края букв и прочих фигур могут стать “пупырчатыми”. В случае градации серого это был бы полутон, но у нас его нет. Если вы перфекционист, “побрейте” края попиксельно, например в программе Paint, на экране дисплея все будет смотреться чуть лучше. Следующий этап - перевести растровое черно-белое изображение в байтовый массив, где один пиксель равен одному биту. Несложно рассчитать размер будущего массива: разрешение 296*128 = 37888 пикселя, 8 бит в байте 37888/8 = 4736 байт. И таких массивов нужно два, для черного и для красного цвета, причем независимо от того, сколько точек будет цветных, даже чисто белая картинка будет того же размера. Итого потребуется целых 9472 байта для одной картинки! Разумеется, в динамической памяти контроллера такого размера данные не поместятся, поэтому размещать их будем в флеш-памяти, там же, где код, с помощью утилиты PROGMEM. Кстати, флеш-память у Ардуино UNO тоже не бесконечная, в наличии всего 32256 байт, а значит три картинки уже не оставят места для основной программы, имейте это в виду.
Перевести картинку в набор данных можно и вручную, разбив ее на строки, ряды и группы по 8 пикселей, но никто такого делать не будет даже из спортивного интереса. Есть несколько готовых утилит и некоторые из них онлайновые. Одной такой мы сейчас воспользуемся.
Заходим на сайт, находим там примерно такую форму: Загружаем наш файл (а можно и оба сразу), в пункте OUTPUT выбираем “Arduino”, имя массива по умолчанию, ориентацию оставляем “Horizontal”. Жмем кнопку “Generate code”. Под кнопкой получаем окно с массивом, уходящим далеко вниз. Если вы загрузили две и более картинки, массивов будет два и более. Однако рекомендуем делать по одному, так проще копировать их в программу и труднее перепутать один с другим. В программе-примере открываем вкладку “imagedata.cpp”, где сразу видим начало первого “черного массива” (IMAGE_BLACK), при помощи копипасты заменяем его содержимое, начиная с первой строки цифр и до закрывающей фигурной скобки, на сгенерированный нами код. Строку с именем массива копировать и менять не надо! Повторяем то же самое для “красного массива” (IMAGE_RED).
Внимание, массивы довольно крупные и длинные, требуется определенная ловкость рук чтобы скопировать их полностью и без повреждений.
Все готово, остается дать команду на вывод картинки в программе, что делается одной строкой:
epd.DisplayFrame(IMAGE_BLACK, IMAGE_RED);
Для вывода картинки на экран такой процедуры достаточно. Если эта команда последняя и изображение менять больше не планируется, крайне рекомендуется добавить еще одну команду, “укладывающую в сон” дисплей. Так он практически отключится, перестанет потреблять энергию и его можно будет физически оторвать от Ардуино, сделав бейджиком.
Если дисплей подключен правильно и программа составлена и скомпилирована без ошибок, мы наконец-то увидим, как картинка в течение нескольких секунд “проявляется”на экране. В результате получим яркое и симпатичное двухцветное изображение нашего логотипа. Для наглядности добавим к этой картинке подпись, чтобы точно не забыть, с чем мы имеем дело. Полностью основная программа разобранного примера будет выглядеть вот так:
#include // подгружаем инструменты для работы SPI, дисплея и файл с картинкой #include "epd2in9b.h" #include "imagedata.h" #include "epdpaint.h" void setup() { Serial.begin(9600); // запуск сериал-порта (необязателен) Epd epd; // создаем экземпляр дисплея if (epd.Init() != 0) { // запускаем дисплей Serial.print("e-Paper init failed"); // если увидим эту надпись в ком-порту, значит что-то подключили не так return; } epd.ClearFrame(); // очищаем его внутреннюю память от прошлых картин epd.DisplayFrame(IMAGE_BLACK, IMAGE_RED); // загружаем в память дисплея картинку и немедленно выводим ее на экран paint.Clear(1); // фон надписи прозрачный paint.DrawStringAt(0, 0, "E-paper", &Font20, 0); // создаем картинку из строки 20ым размером epd.SetPartialWindowRed(paint.GetImage(), 20, 105, paint.GetWidth(), paint.GetHeight()); // размещаем ее в памяти в определенном месте epd.DisplayFrame(); // выводим на экран в дополнение к предыдущему изображению epd.Sleep(); // уходим в "сон" } void loop() {} // тут пусто
Наша программа займет дисплей работой почти на полминуты. Сперва постепенно появится логотип, потом этот же логотип, да еще и с надписью. Глаз не оторвать!Вывод
Электронная бумага, она же электронные чернила - интересный и, на наш взгляд, перспективный способ отображения информации на экране. Минимальное потребление энергии, высокая четкость изображения, приятный и безвредный вид, а также компактные размеры достойны того, чтобы обратить на нее пристальное внимание. Несмотря на медленную работу, ограниченную цветовую гамму, отсутствие подсветки и относительно высокую цену, электронная бумага вполне может занять место и в DIY-проектах и промышленных изделиях. И обязательно возьмите e-paper на заметку, если вам хочется иногда добавить красоты и “необычности” в ваше электронное творение.
FAQ
Какие дисплеи e-ink можно найти в продаже?Выбор дисплеев для подключения к Ардуино пока не очень велик, порядка десятка-полтора моделей, отличающихся размером и количеством цветов. Самый маленький и недорогой - черно-белый 1,54 дюйма, самый большой - семицветный 7,6 дюймов.
Можно ли подключить семицветный дисплей к Ардуино?
Подключить можно, но при его разрешении 600х448 пикселей и 7 цветах на одну картинку потребуется 235200 байт памяти, что способна принять в себя разве что Atmeta2560 из линейки контроллеров AVR, да и то со скрипом. STM32 справится с этой задачей лучше, благодаря большей памяти и быстродействию, Raspberry еще лучше.
Можно ли хранить картинки на внешнем устройстве и загружать их по мере необходимости?
Да, теоретически можно подключить к Ардуино SD-карту и считывать информацию с нее, практически же это довольно сложно и достойно стать темой отдельного проекта и отдельной статьи. На карту можно записать огромное количество файлов с массивами данных или вовсе преобразовывать изображение напрямую с картинок, что конечно же потребуется немалого мастерства от программиста, зато снимет ограничение на количество картинок.
В каких проектах можно применять e-paper?
В любых, где требуется вывод информации на экран без высоких требований к скорости смены изображения. Даже часы можно, если без секунд. Например, хорошо подойдет для мониторинга автоматизации теплицы, где температура, влажность и прочие параметры меняются относительно медленно, e-paper вполне успеет. Особенно хорошо видится в крайне энергосберегающих решениях: устройство включается раз в сутки, собирает информацию, выводит на экран и выключается, однако в любой момент можно подойти и посмотреть последние данные.
Можно ли использовать дисплей в качестве ценников, ярлыков и этикеток?
Конечно можно. И используют. Удобство в том, что дисплею достаточно установить изображение и оно сохранится без внешнего питания и батареек. Остается лишь решить задачу по созданию устройства заливки картинки, а еще написать ПО для ее быстрой и простой подготовки.
Составит ли когда-нибудь e-ink реальную конкуренцию ЖК-дисплеем?
В статье уже говорилось, что в чем-то электронная бумага даже выигрывает у ЖК-дисплеев, главный недостаток же в скорости работы. Сейчас уже существует “скоростная” электронная бумага, применяемая в топовых электронных книгах и некоторых смартфонах, но до DIY-индустрии она пока не добралась. Будем надеяться, что скоро можно будет запускать на электронной бумаге даже видео и полноцветную анимацию.