Я понятия не имею, как управлять дисплеем EPD
Я пытаюсь управлять EPD (ED060SD1) с помощью STM32F429ZGT и получил техническое описание от поставщика дисплея. Но нет конкретного объяснения того, как управлять дисплеем EPD или деталями контакта.
Итак, я хочу знать, что делает этот вывод. и любой намек на то, как запустить этот дисплей.
2 ответа
Микроконтроллеры серии stm32 не поддерживают напрямую дисплеи EPD. Я думаю, вам понадобится промежуточный контроллер EPD, чтобы все заработало.
Ночью вы сможете генерировать только цифровые входы, затем использовать внешний источник высокого напряжения от микросхемы, такой как HV850, а затем понизить его с помощью встроенных стабилитронов. Я использовал этот подход, чтобы сделать микрофлаер на основе пьезодинамика!
HV850 имеет включение/выключение через цифровую линию и требует минимум +4,2 В, максимальное напряжение +/-59 В на альтернативных выходах, что идеально подходит для этой цели. Просто добавьте высокоомный резистор на выходной стороне, чтобы он разряжался, когда панель не работает. Я бы перевел его в режим extclk и запустил на частоте 10 Гц, чтобы снизить энергопотребление.
Как программировать цифровой дисплей epd 203
Здравствуйте, я хочу рассказать о программировании дисплея на контроллере ST7920 с использованием ATtiny2313 контроллера.
Характеристики дисплея
Приблизительная цена: 15$
Размер дисплее вместе с платой: 93.0 (Длина) × 70.0(Ширина) × 13.50(Высота) мм
Размер видимой области: 70×38 мм.
- Графический
- Текстовый
- Подключение по 8 битной шине
- Подключение по 4 битной шине
- Подключения по SPI (3 битной шине)
- Нормальный: потребление 450 мкА, 5 В
- Спящий режим: потребление 30 мкА, 5 В
- Работе в текстовом режиме
- Подключения и программирование по 8 битной шине
- Подключения и программирование по SPI
- Дисплей на контроллере ST7920
- 2 подстрочных резистора на 10 кОм.
- Для 8 битного режима резистор на 4.7 кОм (или больше)
- Контроллер ATtiny2313
- Источник питание на 5В.
Схема подключения
Подключение по 8 битной шине данных
Распиновка контактов:
GND — Земля
VCC — +5В
V0 — Настройка контрастности
RS — Определяет режим передачи данных (1 — это данные, 0 — это команда)
RW — Запись или чтения (1 — чтения, 0 — запись)
E — Строб
D0-D7 — Шина данных
PSB — Определяет какой протокол передачи данных будет использоваться ( 1 — 8/4 бит шина, 0 — SPI)
BLA — Анод подсветки (+)
BLK — Катод подсветки (-)
На схеме DB0-DB7 и PB0-PB7 не замкнуты, это 8 битная шина данных.
Реальное соединения таково:
DB0 — PB0
DB1 — PB1
DB2 — PB2
DB3 — PB3
DB4 — PB4
DB5 — PB5
DB6 — PB6
DB7 — PB7
Подключение по SPI
Распиновка контактов:
GND — Земля
VCC — +5В
V0 — Настройка контрастности
RS — (CS) Начало/окончание передачи данных (1 — начало, 0 — окончание)
RW — (SID) Шина данных
E — (SCLK) Строб
PSB — Определяет какой протокол передачи данных будет использоваться ( 1 — 8/4 бит шина, 0 — SPI)
BLA — Анод подсветки (+)
BLK — Катод подсветки (-)
Подстроечные резисторы
RP1 — Регулятор контрастности
RP2 — Регулятор яркости
Описание протоколов программирования дисплея
8 битный режим
И так, с начало я расскажу о том как в общих чертах происходит работа с дисплеем.
Для того что бы работать с дисплеем нам нужно отправлять команды и данные на дисплей.
К командам относится: Включения/выключение дисплея, отображение курсора, перемещение курсора и т.д. К данным относятся например символы которые вы хотите видеть на дисплее.
- Задержка в 50 мкс.
- Отправляем команду установки 8 битного режима.
- Задержка 120 мкс.
- Отправляем команду включения дисплея ( в ней же указывается, включить ли курсор, и мигать ли курсором)
- Задержка в 50 мкс.
- Повторно отправляем функцию установки 8 битного режима
- Задержка 120 мкс.
- Отправляем команду отчистить экран
- Задержка 20 мкс.
- Устанавливаем ENTRY MODE (эта команда говорит о том в какую сторону сдвигать курсор после написания символа, нам соответственно нужно вправо)
Вот и все, после выполнения этих действий, если вы указали в команде включения дисплея отображать курсор, на экране вы увидите курсор.
- Устанавливаем низкий уровень E
- Устанавливаем низкий уровень RS
- Устанавливаем низкий уровень RW
- Задержка 1 мкс.
- Устанавливаем высокий уровень E
- Отправляем в порт данных байт команды
- Задержка 1 мкс.
- Устанавливаем низкий уровень E
- Задержка 50 мкс.
Для отправки одного байта данных выполняется абсолютно то же самое, только в начале устанавливается высокий
уровень RS.
RS = 0 Команда
RS = 1 Данные
- Устанавливаем низкий уровень E
- Устанавливаем высокий уровень RS
- Устанавливаем низкий уровень RW
- Задержка 1 мкс.
- Устанавливаем высокий уровень E
- Отправляем в порт данных байт команды
- Задержка 1 мкс.
- Устанавливаем низкий уровень E
- Задержка 50 мкс.
Давайте рассмотрим код отправки команды
Для начала установим константы что бы было удобнее:
Функция отправки команды:
Функция отправки данных:
В коде был использован макрос LCD8_MACRO_DELAY, вот его код
Теперь рассмотрим команды инициализации дисплея в текстовом, 8 битном режиме:
- Если установлено 1 то устанавливаем 8 бит передачу данных
- Если установлено 0 то устанавливается 4 бита передача данных
- Если установлено 1 то устанавливается набор расширенных команд
- Если установлено 0 то устанавливается набор базовых команд
- Если установлено 1 то дисплей включен
- Если установлено 0 то дисплей выключен
- Если установлено 1 то курсор включен
- Если установлено 0 то курсор выключен
- Если установлено 1 то курсор будет мигать
- Если установлено 0 то курсор не будет мигать
- Если I/D = 1 то курсор сдвигается вправо
- Если I/D = 0 то курсор сдвигается влево
На основе этих четырех команд можно написать функцию инициализации дисплея:
После выполнения инициализации на экране вы должны увидеть мигающий курсор.
Режим SPI
- SID это контакт передачи данных, на дисплее он же RW
- SCLK – это линия строб, на дисплее он же E
- CS – это начала/окончания передачи данных, на дисплее он же RS
- Устанавливаем высокий уровень CS
- Передаем 4 единицы подряд
- Передаем 1 бит RW – чтения или запись
- Передаем 1 бит RS – Команда или данные
- Передаем 0
- Передаем 4 бита старшей половины байта данных
- Передаем 4 нуля
- Передаем 4 бита младшей половины байта данных
- Передаем 4 нуля подряд
- Устанавливаем низкий уровень CS
На этом передача одного байта завершена.
- Задержка 1 мкс.
- Устанавливаем высокий уровень SCLK
- Задержка 1 мкс.
- Устанавливаем низкий уровень SCLK
- Задержка 1 мкс.
Рассмотрим функцию передачи команды/данных в режиме SPI, но сперва объявим константы:
А теперь сама функция:
Текстовый режим
Теперь после того как вы научились инициализировать дисплей вы можете выводить любые символы на экран, например вывести букву A:
И на дисплее вы увидите букву A.
И так, теперь о том как устроенно адресное пространство в текстовом режиме:
Экран делится на 8 столбцов и 4 строки, в каждый столбец вы можете записать по 2 обычных символа или 1 иероглиф.
Адресное пространство находится от 0 до 31.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Как видите первая строчка это адреса от 0 до 7
Вторая же строчка от 16 до 23
Третья строчка от 8 до 15
То есть если вы напишете 16 букв подряд с адреса 0, то они будут в первой строчке,
но если вы напишите 17 символов, то последний символ будет не на второй строчке, а на третей!
Графический режим
И напоследок, для тех кто хочет использовать графический режим, есть такая статья: LCD 12864 на контроллере ST7920. Параллельный режим (8 бит)
Как программировать цифровой дисплей epd 203
Такие экраны можно купить на AliExpress и Ebay, хотя цены на сегодняшний день пока кусаются (200313, около $10). Удобнее всего работать с индикатором, который снабжен платой-переходником с гибкого шлейфа на стандартный коннектор с шагом штырьков 2.54 мм, иначе придется делать для него переходную плату.
Модуль дисплея E-Ink 2.9″ (296×128 точек) снабжен встроенным контроллером, обменивающимся данными с внешним миром через интерфейс SPI, с поддержкой частичного обновления. Достоинства экрана очевидны для определенных областей использования — сверхнизкое энергопотребление, широкие углы обзора, сохранение картинки даже при полном отключении питания. Однако у этих индикаторов имеется существенное ограничение — медленное обновление изображения, особенно когда оно обновляется целиком (полное обновление картинки может занимать от 2 секунд и более).
• Нет подсветки, изображение сохраняется на экране длительное время, даже когда питание не поступает.
• Очень малое потребление энергии. Питание в основном необходимо только для обновления изображения.
• Интерфейс SPI для подключения к широкому спектру аппаратных устройств, таких как например Raspberry Pi, платы Arduino, Nucleo, Discavery, BBB и т. п.
• Встроенный транслятор логических уровней, совместимый 3.3V/5V MCU.
• Есть рабочие примеры кода и руководства по использованию (для Raspberry Pi, Jetson Nano, Arduino, STM32).
[Параметры]
• Напряжение питания: 3.3V/5V
• 3-проводный или 4-проводный SPI
• Внешние размеры: 89.5 x 38 мм
• Размер графической области экрана: 66.89 x 29.05 мм
• Размер точки: 0.138 x 0.138 мм
• Разрешающая способность: 296 x 128 точек
• Цвета экрана: черный и белый
• 2 уровня серого (монохром)
• Время частичного обновления изображения: 0.3 сек
• Время полного обновления экрана: 2 сек
• Потребление энергии 26.4 мВт (типовое значение)
• Потребление в режиме приостановки (standby) < 0.017 мВт
• Угол обзора > 170°
Waveshare e-Paper в основном поставляются в двух вариантах: с «сырым» коннектором на гибком кабеле (так называемая RAW panel), и с более удобным для подключения модулем адапера (Module/HAT version).
На адаптере Module/HAT собрана схема драйвера, и этот вариант экрана сразу готов к подключению к микроконтроллеру.
Кроме монохромных вариантов экрана есть еще трехцветные (e-Paper (B) и e-Paper (C)), у которых очень большое время обновления (15 секунд!), и которые не поддерживают частичное обновлеие экрана (partial refresh). Трехцветные экранчики имеют довольно бледные цвета. Очевидно, что эти экраны пригодны в основном только для приложений типа статичных меток товара, которые редко обновляются.
Разновидности экранов e-Paper 2.9inch приведены в таблице ниже, показаны только их отличия.
Тип экрана | Отображаемые цвета | Время full refresh, сек | Поддержка partial refresh |
2.9inch e-Paper | черный, белый | 2 | есть |
2.9inch e-Paper (B) | красный, черный, белый | 15 | — |
2.9inch e-Paper (C) | желтый, черный, белый | 15 | — |
2.9inch e-Paper (D) | черный, белый | 2 | есть |
Остальные параметры всех этих вариантов индикаторов совпадают:
Параметр | Значение |
Градаций яркости | 2 |
Разрешающая способность, точек | 296 x 128 |
Размер изображения, мм | 66.89 x 29.05 |
Внешний размер, мм | 79.0 x 36.7 |
Интерфейс подключения | SPI |
Важные замечания по применению:
1. Не стоит чрезмерно увлекаться частичным обновлением экрана (partial refresh, занимает по времени 0.3 секунды) для тех вариантов экранов e-Paper, которые это поддерживают. Вы не можете применять partial refresh постоянно. После нескольких partial refresh обязательно надо делать полное обновление экрана (full refresh, занимает по времени 2 секунды), иначе e-Paper будет необратимо поврежден.
2. Экран e-Paper нельзя долго держать под питанием, Вы должны перевести индикатор в режим сна или выключить его, когда обновление не требуется. В противном случае, когда e-Paper работает с высоким напряжением длительное время, он повреждается, и исправить повреждение невозможно.
3. Рекомендуется обновлять изображение e-Paper один раз за 24 часа, или как минимум не реже одного раза за 10 дней (за более подробной информацией обращайтесь к даташиту). В противном случае старая картинка может «впечататься», и её нельзя будет очистить.
4. Экран e-Paper игнорирует данные, которые были отправлены ему в режиме сна, поэтому для правильного обновления картинки экран нужно инициализировать заново.
5. Можно подстроить цвет бордюра экрана через регистр 0x3C. В некоторых демонстрационных примерах можно настроить регистры Border Waveform Control или VCOM AND DATA INERTVAL SETTING.
6. e-Paper нельзя обновлять под прямым солнечным светом (на экране отсутствует фильтр, поглощающий ультрафиолет). Шаги по обновлению должны быть выполнены в помещении.
7. Диапазон рабочих температур 0 .. 50°C.
Имя сигнала | Напр. | Описание |
VCC | Напряжение питания 3.3V/5V | |
GND | Земля, минус питания и общий провод всех сигналов | |
DIN | I | SPI MOSI, вход последовательных данных |
CLK | I | SPI SCK, вход тактов |
CS | I | Вход выборки SPI, активный уровень лог. 0 |
DC | I | Вход для выбора Data/Command (лог. 1 для данных, лог. 0 для команды) |
RST | I | Внешний сброс, активный уровень лог. 0 |
BUSY | O | Выход состояния занятости контроллера, активный уровень лог. 1 |
Примечание: в столбце «Напр.» указано направление работы сигнала у индикатора. I обозначает вход (Input), O выход (Output).
Интерфейс и протокол отличается от традиционного SPI только тем, что отсутствует обратный сигнал данных от контроллера (подчиненное устройство SPI, slave) к управляющему процессору (главное устройство SPI, master), поскольку от экрана требуется только отображение картинки (направление данных master -> slave).
Сигналы интерфейса в режиме 4-Wire SPI:
Последовательный интерфейс с индикатором e-Paper может работать в 2 режимах: 3-wire SPI и 4-wire SPI. Отличие между этими режимами в том, что в режиме 3-wire SPI сигнал DC (данные/команда) отсутствует, и данные передаются не 8-ю, а 9 битами. Старший бит D8 несет информацию о том, команда передается или данные. Подробнее см. даташит на индикатор (например, 2.9inch_e-Paper_Datasheet.pdf, он доступен на сайте waveshare.com, или см. архив [6]).
Обмен данных через SPI требует соблюдения определенных интервалов времени, с соответствующей комбинацией перехода уровней данных и тактов (фаза CPHA и полярность CPOL тактового сигнала).
CPOL определяет логический уровень сигнала тактов в неактивном состоянии. Когда CPOL = 0, неактивное состояние принимается за лог. 0.
CPHA определяет, когда slave-устройство считывает данные — на первом перепаде тактового сигнала, или на втором перепаде. Когда CPHA = 0, данные считываются на первом перепаде тактов.
Существуют 4 режима обмена данными по шине SPI. Обычно используется режим SPI0, когда CPHA = 0, CPOL = 0. Как можно увидеть на картинке выше, передача данных начинается на первом спаде уровня SCLK, и 8 бит данных передаются по каждому тактовому положительному перепаду (от 0 к 1) SCLK. С экраном также используется режим SPI0, и данные передаются бит за битом, старший бит (MSB) идет первым.
Имеются и другие экраны с разными размерами, разрешающей способностью, цветами и интерфейсами подключения (см. селектор на страничке [1]).
[Принцип работы]
Отображение картинки основано на технологии E-paper (Microencapsulated Electrophoretic Display, MED). Среди маленьких шариков в прозрачном масле подвешиваются заряженные цветные пигменты, и они перемещаются в зависимости от приложенного электрического заряда. Цветовые компоненты экрана E-paper хорошо отражают окружающий свет, и поэтому не требуется задняя подсветка.
Примечание: далее в описании и именах файлов часто используется сокращение EPD, что означает E-Paper Display.
[Примеры]
Компания waveshare.com предоставляет примеры работы с индикатором для различных популярных платформ: Arduino UNO, Jetson Nano, Raspberry Pi и STM32.
Пример работает с экраном Waveshare UNO PLUS (плата совместима с официальной Arduino UNO R3).
Подключение к Arduino UNO:
Индикатор e-Paper/e-Ink | Arduino |
VCC | 5V |
GND | GND |
DIN | D11 |
CLK | D13 |
CS | D10 |
DC | D9 |
RST | D8 |
BUSY | D7 |
Загрузите архив [2], распакуйте. Пример для Arduino находится в каталоге Arduino. Откройте тот проект, который соответствует типу экрана. Например, если это 1.54inch e-Paper Module, откройте и запустите проект epd1in54.ino из папки epd1in54. Выберите корректную плату (Board) и COM-порт подключения, затем скомпилируйте проект и загрузите его в плату Arduino UNO.
Из-за того, что у микроконтроллера Arduino малый объем RAM, функция рисования не поддерживается, можно только вывести картинку, данные которой находятся в памяти программ FLASH. Как альтернативу вместе с Arduino Вы можете использовать дополнительную RAM и слот Micro SD на специальной плате E-Paper Shield [3].
Если у Вас HAT-версия экрана, наподобие 2.13inch e-Paper HAT, то можно напрямую соединить его с 40PIN GPIO коннектором Raspberry Pi. Или можно подключить экран к Pi через кабель 8PIN.
Подключение к Raspberry Pi:
Индикатор e-Paper/e-Ink |
Rasberry Pi |
|
BCM2835 | Плата | |
VCC | 3.3V | 3.3V |
GND | GND | GND |
DIN | MOSI | 19 |
CLK | SCLK | 23 |
CS | CE0 | 24 |
DC | 25 | 22 |
RST | 17 | 11 |
BUSY | 24 | 18 |
Процесс по шагам:
1. Откройте терминал, введите команду конфигурации:
Выберите Interfacing Options -> SPI -> Yes, чтобы разрешить интерфейс SPI.
Перезагрузите Raspberry Pi:
2. Установка библиотек BCM2835.
Для дополнительной информации см. [4].
3. Установка библиотек wiringPi.
Для Raspberry Pi 4 нужно выполнить обновление:
Если установка прошла успешно, то будет выведена информация по версии 2.52 gpio.
4. Установка библиотек Python.
5. Загрузка примеров. Откройте терминал и выполните команду, чтобы загрузить демонстрационный код:
6. Запуск примеров.
Код C. Найдите файл main.c, раскомментируйте определение типов e-Paper, затем скомпилируйте и запустите код.
Код Python. Можно напрямую запустить код, xxx в примере запуска ниже заменяется названием дисплея e-Paper. Например, если надо запустить код для 1.54inch e-Paper Module, то xxx надо заменить на epd_1in54.
Пример для Jetson Nano использует программную реализацию SPI, поэтому его скорость вывода картинки работает немного медленнее.
Подключение к Jetson Nano:
Индикатор e-Paper/e-Ink |
Jetson Nano Developer Kit | |
BCM2835 | Плата | |
VCC | 3.3V | 3.3V |
GND | GND | GND |
DIN | 10 (SPI0_MOSI) | 19 |
CLK | 11 (SPI0_SCK) | 23 |
CS | 8 (SPI0_CS0) | 24 |
DC | 25 | 22 |
RST | 17 | 11 |
BUSY | 24 | 18 |
Процесс по шагам:
1. Установка библиотек GPIO. Введите в терминале следующие команды:
Здесь your_user_name это имя пользователя в системе Jetson, например waveshare.
2. Установка библиотек I2C.
3. Установка библиотек PIL.
4. Загрузка примеров.
5. Запуск примеров.
Код C. Найдите файл main.c, раскомментируйте используемый экран e-Paper, затем скомпилируйте и запустите код.
Код Python. Можно напрямую запустить код, xxx в примере запуска ниже заменяется названием дисплея e-Paper. Например, если надо запустить код для 1.54inch e-Paper Module, то xxx надо заменить на epd_1in54.
Примеры тестировались и проверялись на отладочной плате Wavshare Open103Z (процессор STM32F13ZET6). Для другой платы и процессора от Вас потребуются некоторые усилия для портирования кода.
Подключение к STM32F103ZET6:
Индикатор e-Paper/e-Ink | STM32F103ZET6 |
VCC | 3.3V |
GND | GND |
DIN | PA7 |
CLK | PA5 |
CS | PA3 |
DC | PA2 |
RST | PA1 |
BUSY | PA3 |
Перейдите в каталог примеров STM32, откройте проект в среде разработки Keil5. Выберите плату и программатор, скомпилируйте и загрузите код.
[Описание кода]
Разработчики waveshare.com поддерживают 4 популярные аппаратные платформы: Arduino UNO, Jetson UNO, Raspberry Pi, and STM32. Здесь приведено общее описание для всех экранов e-Paper, однако описание некоторых функций может не подойти к Вашему экрану e-Paper.
Каждый проект делится на функции аппаратного интерфейса, драйвера EPD и код приложения. Используются языки программирования C, C++ и python:
• Arduino UNO:C++
• Jetson Nano: C и python
• Raspberry Pi: C и python
• STM32: C
Примечание: коды драйвера EPD для Jetson Nano, Raspberry Pi и STM32 совместимые. Таким образом, эта часть кода одинаковая для этих платформ, а коды интерфейса отличаются.
[Интерфейс аппаратуры]
Код интерфейса находится в файлах DEV_Config.c и DEV_Config.h.
STM32. Файлы драйвера интерфейса находятся в каталоге STM32\STM32-F103ZET6\User\Config.
Используемые типы данных:
Функции инициализации и деинициализации модуля экрана:
Эти функции используются перед работой с экраном e-Paper (DEV_Module_Init) и после работы с ним (DEV_Module_Exit). Если на Вашей плате дисплея напечатана версия Rev2.1, модуль войдет в режим сверхнизкого потребления мощности (low-ultra mode) после вызова DEV_Module_Exit(). Тесты показали, что ток потребления в этом режиме практически нулевой.
Функции чтения/записи через GPIO (программная реализация SPI):
Функция записи через аппаратный SPI:
[Драйвер EPD]
Для Raspberry Pi и Jetson Nano драйвер epd сохранен в каталоге RaspberryPi&JetsonNano\c\lib\e-Paper. Для STM32 драйвер epd находится в каталоге STM32\STM32-F103ZET6\User\e-Paper.
Декларация функций находится в соответствующем (типу индикатора) файле заголовка (с расширением *.h). Буквы XXX в имени функции должны быть заменены на обозначение типа индикатора. Например, если это индикатор 4.2inch e-Paper, то XXX нужно заменить на 4IN2.
Инициализация. Эта функция должна использоваться для инициализации или вывода из режима сна экрана E-Paper.
Очистка. Эта функция используется для заполнения экрана белым цветом:
Передача образа экрана и отображение.
Имеются следующие исключения:
Вход режим сна.
Имейте в виду, что для пробуждения индикатора следует выполнять аппаратный сброс индикатора, или использовать функцию инициализации.
[Функции приложения]
Рисование. Предоставляются базовые функции рисования, их можно найти в каталоге RaspberryPi&JetsonNano\c\lib\GUI (для Raspbian Pi & Jetson Nano) и в каталоге STM32\STM32-F103ZET6\User\GUI (для STM32):
Шрифты. Шрифты находятся в каталогах RaspberryPi&JetsonNano\c\lib\Fonts (для Raspbian Pi & Jetson Nano) и STM32\STM32-F103ZET6\User\Fonts (для STM32).
[Как использовать]
1. Создание буфера картинки. Создайте новый буфер образа экрана (image buffer) с помощью функции Paint_NewImage. В параметрах функции указывается ширина, высота, поворот изображения и его цвет.
image: указатель на место в памяти, где находится буфер.
Width: ширина экрана картинки.
Height: высота картинки.
Rotate: на сколько градусов повернуть изображение.
Color: первичный цвет картинки.
2. Выбор буфера. Выберите буфер экрана с помощью функции Paint_SelectImage. Можно создать несколько буферов изображения, и затем выбирать нужный буфер для каждого изображения. В параметре функции находится указатель на начало предварительно созданного буфера.
3. Поворот. Установите ориентацию дисплея функцией Paint_SetRotate.
В параметре Rotate можно указать 4 варианта поворота картинки ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270, что соответствует 0, 90, 180 и 270 градусам. Обычно эта функция используется для изменения угла вывода изображения, после вызова Paint_SelectImage().
На картинке ниже демонстрируется начало координат X, Y и направление их увеличения для разных вариантов параметра Rotate.
4. Зеркалирование. Зеркалирование вывода производится с помощью функции Paint_SetMirroring. В параметре mirror указывается 4 варианта зеркалирования MIRROR_NONE, MIRROR_HORIZONTAL, MIRROR_VERTICAL, MIRROR_ORIGIN.
5. Рисование точки. Точка в буфере рисуется с помощью функции Paint_DrawPoint.
Параметрами Xpoint, Ypoint указывается координата точки, параметр Color задает цвет. Параметр Dot_Pixel задает размер точки, доступно 8 вариантов:
Параметр Dot_Style задает стиль точки:
6. Рисование линии. Для этой цели используется функция Paint_DrawLine.
Параметры Xstart, Ystart, Xend, Yend задают координаты начала и конца линии. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Line_Style задает тип линии:
7. Прямоугольник.
Параметры Xstart, Ystart, Xend, Yend задают координаты начала и конца линии, параметр Color задает цвет. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Draw_Fill задает заливку прямоугольника:
8. Окружность, круг.
Параметры X_Center, Y_Center задают координаты центра, параметр Radius задает радиус, параметр Color задает цвет. Параметр Line_width задает ширину линии (один из 8 вариантов, см. описание функции Paint_DrawPoint). Параметр Draw_Fill задает заливку прямоугольника, так же как в функции Paint_DrawRectangle.
9. Символ текста. Вывод одиночного символа текста в 8-битной кодировке ASCII выполняется функцией Paint_DrawChar.
Параметры Xstart, Ystart задают положение верхнего левого угла выводимого символа. Параметр Ascii_Char задает код символа, параметр Font указывает на начало шрифта в памяти. Параметры Color_Foreground и Color_Background задают соответственно цвет чернил и цвет фона символа.
Всего в библиотеке есть 5 готовых шрифтов:
Имя | Размер символа (x*y) |
font8 | 5*8 |
font12 | 7*12 |
font16 | 11*16 |
font20 | 14*20 |
font24 | 17*24 |
10. Строка ASCII. Строка текста рисуется относительно левой верхней позиции (параметры Xstart, Ystart).
Параметр pString указывает на строку текста. Остальные параметры такие же, как у функции Paint_DrawChar.
Строка китайского текста может быть выведена помощью функции Paint_DrawString_CN. Осуществляется вывод китайских символов, основанных на шрифтах ON GB2312 (есть 2 китайских шрифта: font12CN 11*21 ascii, 16*21 Chinese, font24CN:24*41 ascii, 32*41 Chinese).
11. Число.
В параметре Number указывается выводимое число. Остальные параметры те же самые, что и функции Paint_DrawString_EN.
12. Время.
В параметре pTime задается указатель на выводимое время. Остальные параметры те же самые, что и функции Paint_DrawString_EN.
13. Растровая картинка. В параметре image_buffer указывается начальный адрес буфера в памяти, где расположены данные выводимая картинка.
14. Вывод файла BMP. Linux-платформы наподобие Jetson Nano и Raspberry Pi поддерживают непосредственную обработку и вывод картинок в файлах формата BMP.
В параметре path указывается полное имя файла картинки, параметры Xstart, Ystart задают положение верхнего левого угла отображаемой картинки.
[Тестирование функций]
Примеры кода, реализующего вывод на экран, можно найти в каталоге RaspberryPi&JetsonNano\c\examples. Следует модифицировать определения в модуле main.c, чтобы можно было работать с различными типами индикаторов e-Paper.
Например, если Вы хотите проверить вывод на индикатор 7.5inch E-paper, нужно раскомментировать строку:
Затем скомпилируйте и запустите код:
Аналогичный пример кода для STM32 находится в каталоге STM32\STM32-F103ZET6\User\Examples. Откройте в Keil проект STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx, измените определения в файле main.c для выбора нужно типа индикатора. Далее расскомментируйте нужную строку теста, скомпилируйте и запустите код.
Коды примеров работают на основе python2.7 и python3. Если интерпретатор Python правильно установлен, и разрешены все зависимости для используемых библиотек, то запускать проекты Python намного проще, чем код на C/C++.
Код функций находится в каталоге RaspberryPi&JetsonNano\python\lib\waveshare_epd:
[Функции epdconfig.py]
Инициализация. В epdconfig.py находятся функции инициализации и завершения:
Эти функции используются перед работой с экраном e-Paper (module_init) и после работы с ним (module_exit). Если на Вашей плате дисплея напечатана версия Rev2.1, модуль войдет в режим сверхнизкого потребления мощности (low-ultra mode) после вызова DEV_Module_Exit(). Тесты показали, что ток потребления в этом режиме практически нулевой.
GPIO Read/Write. Программная реализация SPI находится в функциях:
SPI. Аппаратный SPI:
[Описание кода функций epdxxx.py]
В имени файла кода символами xxx обозначен тип используемого индикатора e-Paper.
Инициализация. Для начала работы с индикатором и для вывода его из режима сна используются следующие функции.
Обновление может использовать низкоуровневые функции lut_full_update или lut_partial_update.
Очистка. Для очистки экрана (заполнения его цветом фона) используют функции:
Работа с буфером. Преобразование картинки в массив данных экрана:
Кадр. Передача одного кадра картинки и его отображение:
Есть несколько исключений:
Сон. Вход в режим пониженного потребления осуществляется функцией:
[Тесты epd_xxx_test.py]
Код тестов находится в каталоге RaspberryPi&JetsonNano\python\examples.
Если на системе установлен python2, то запуск теста осуществляется командой наподобие:
Если установлен python3, то команда должна выглядеть так:
Примечание: для запуска теста на другом индикаторе замените имя файла epd_7inch5_test.py на другое.
Ориентация. Чтобы повернуть вывод на экран, можно использовать функцию транспонирования:
Поддерживаются константы поворота ROTATE_90, ROTATE_180, ROTATE_270, соответствующие 90, 180 и 270 градусам.
Ниже на картинке показано начало координат X, Y и направление их роста в зависимости от выбранной ориентации вывода.
Поскольку у микроконтроллера Arduino слишком мало памяти RAM для отображения динамического изображения, то без добавления внешней памяти поддерживается только вывод статичной растровой картинки. В этом случае рекомендуется использовать специальную плату расширения памяти E-Paper Shield [3].
Advantech EPD-023 Manuals
Download Advantech EPD-023 Industrial Monitor PDF User Guides and Manuals: Found (2) Manuals for Advantech EPD-023 Device Model (Operation & User’s Manual)
- Product ID: #1826446
- Category: Monitor
- File Path: advantech/epd-023_1826446.pdf
- Pages: 50
- Product ID: #1483764
- Category: Industrial Monitor
- File Path: advantech/epd-023_1483764.pdf
- Pages: 116
Related for Advantech EPD-023 Manuals, Service Instructions:
Device: FPM-30CT, 22 Nov 2022 (#9839T8)
Device: FPM-212 Series, 01 Feb 2023 (#42MA92)
Device: FPM-3191G, 20 Sep 2022 (#7125AH)
Device: IDS-3215 Series, 08 Oct 2022 (#1F4D13)
Device: EPD-023, 10 Feb 2023 (#5Y3UY4)
Device: TPC-1260, 01 Jan 2023 (#648E46)
FG-NET
1243 The rack-mounted version: a 4U space is necessary in a 19” electrical equipment box. The wall-mounted version: fix on the wall, taking care not to damage the mo-therboard. We recommend fixing to a height ranging between 1.50m and 1.80m to allow a comfortable height to see the touch-screen display. O .
XM7W7
IT Istruzioni per installazione EN Installation manual FR Instructions pour l’installation DE Installationsanweisung ES Instrucciones para instalación CN 安装手册 XM7W7 — XM708 INDUSTRIAL MONITOR .
Подключение дисплея E-Paper к Arduino Uno
Технология E-paper (electronic paper) известна под названием «электронная бумага» или «электронные чернила». Основная цель создания дисплеев E-Paper – это имитация обычной бумаги, то есть с такого дисплея текст читать практически так же удобно, как и с листа обычной бумаги.
Дисплеи E-paper появились в начале 2000-х годов и даже получили на некоторое время широкое распространение в электронных «читалках». Им пророчили большое будущее и в качестве экранов для смартфонов, но, к сожалению, в этой нише им не удалось выдержать конкуренции с используемыми сейчас дисплеями, в основном, из-за большой инерционности изображения на них. Но, тем не менее, дисплеи E-paper продолжают выпускаться и заняли свою узкую нишу в ряде применений. Поэтому в данной статье мы рассмотрим подключение дисплея E-Paper с диагональю 1,54 дюйма к плате Arduino Uno.
Кроме платы Arduino дисплеи E-paper можно подключать и к другим микроконтроллерным платам, например, Raspberry Pi, STM32, jetson. В данной статье мы рассмотрим печать символов и изображений на экране дисплея E-paper, проанализируем энергопотребление подобного дисплея и рассмотрим преимущества и недостатки подобных дисплеев.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- 1.54-Inch E-Paper Display (дисплей E-Paper с диагональю 1,54 дюйма) (купить на AliExpress).
Основные принципы работы дисплея E-Paper 1,54′
Модуль дисплея типа «электронные чернила» (e-Ink Paper) с диагональю 1,54 дюйма от компании Waveshare работает по протоколу SPI, имеем разрешение 200×200 пикселов и содержит встроенный модуль контроллера. Подобные дисплеи отличаются крайне низким энергопотреблением поскольку они не содержат панели фоновой подсветки и не требуют непрерывной подачи энергии для отображения информации на экране – энергия в них тратится только при смене изображения на экране. Также они отличаются широкими углами обзора и хорошей «читаемостью» на солнце, что делают их очень удобными в ряде случаев. В нашем проекте мы будем использовать подобный дисплей стоимостью около 15$.
Основные особенности дисплеев E-Paper
- отсутствие фоновой подсветки, длительное отображение информации на экране дисплея без подачи на него энергии;
- очень низкое потребление энергии, энергия расходуется только при смене изображения на экране дисплея;
- интерфейс SPI, который обеспечивает простое подключение дисплея к таким платам как Raspberry Pi/Arduino/Nucleo и т.п.;
- встроенный преобразователь напряжения, возможность работать с уровнями напряжения 3.3V/5V;
- поставляется вместе с руководством и ресурсами для разработки (есть примеры программ для Raspberry Pi/Jetson Nano/Arduino/STM32).
Технические характеристики дисплея E-Paper 1,54′
- рабочее напряжение: 3.3V/5V;
- интерфейсы: 3-х проводный SPI, 4-х проводный SPI;
- размеры модуля дисплея: 48mm × 33mm;
- размеры экрана дисплея: 27.6mm × 27.6mm;
- размер точки дисплея: 0.138 × 0.138;
- разрешение: 200 × 200 пикселов;
- цвет дисплея: черный, белый;
- число уровней серого цвета: 2;
- время частичного обновления экрана: 0.3 с;
- время полного обновления экрана: 2 с;
- мощность, необходимая для обновления экрана: 26,4 мВт;
- потребляемая мощность в режиме ожидания: <0,017 мВт;
- угол обзора: >170°.
Протокол связи дисплея E-Paper
E-Paper осуществляет взаимосвязь с другими устройствами на по протоколу SPI, но протокол SPI, используемый им, немного отличается от стандартного SPI протокола. Используемый в дисплее SPI протокол необходим только для передачи данных, которые используются для формирования изображения на экране дисплея, поэтому линия передачи данных от ведомого (slave) к ведущему (master) устройству не нужна, в отличие от стандартного SPI протокола. В следующей таблице представлено описание контактов (распиновка) дисплея E-Paper.
Контакт | Описание |
VCC | 3.3V/5V |
GND | земля |
DIN | SPI MOSI pin (передача данных) |
CLK | SPI SCK pin (линия синхронизации) |
CS | SPI chip selection, low active (выбор чипа) |
DC | выбор режима команд/данных (high — данные, low — команды) |
RST | External reset, low active (внешний сброс) |
BUSY | Busy status output, high active |
Протокол SPI в дисплее E-Paper имеет следующие особенности:
(a) Когда на контакте CS низкий уровень (low) – чип готов к работе, а когда на CS высокий уровень (high) – чип отключен (disabled).
(b) Контакт DC управляет переключением между режимами передачи команд/данных. Когда на DC 0 – включен режим команд, а когда на DC 1 – включен режим данных.
(c) Контакт (линия) синхронизации протокола SPI в данном случае имеет обозначение SCLK.
(d) Контакт (линия) передачи данных от ведущего к ведомому протокола SPI в данном случае имеет обозначение DIN.
Тайминги (временные моменты) передачи данных в протоколе SPI в данном случае определяются с помощью параметров CPHA и CPOL.
1 – в холостом (незанятом) состоянии (idle state) CPOL показывает уровень линии синхронизации данных. Когда CPOL равен 0, то на линии низкий уровень (low). С другой стороны, CPOL оказывает незначительное влияние на передачу данных.
2 – Когда CPHL = 0 данные собираются (забираются) на первом тактовом фронте линии синхронизации (serial synchronous clock), когда CPHL = 1 данные собираются на втором тактовом фронте линии синхронизации.
(e) Существует 4 доступные настройки протокола SPI. Широкое применение находит способ SPI0 с параметрами CPHL = 0 и CPOL = 0. Передача данных начинается на первом спадающем фронте линии SCLK как показано на диаграмме ниже, 8 бит данных объединяются в один временной цикл. Данные передаются побитно, сначала наиболее значащие биты (MSB).
Схема проекта
Схема подключения дисплея E-Paper к плате Arduino Uno представлена на следующем рисунке.
Дисплей E-Paper имеет разрешение 200×200 пикселов, поэтому пропускной способности протокола SPI вполне хватит для передачи данных на этот дисплей. Дисплей E-Paper поддерживает питающее напряжение 3.3V, поэтому он подключен к контакту 3.3V платы Arduino Uno. Остальные контакты дисплея толерантны (могут работать) с напряжением 5V. Контакт GND дисплея подключен к контакту GND платы Arduino Uno. Контакт DIN дисплея подключен к цифровому контакту 11 платы, контакт CLK – к контакту 13 платы, CS – к контакту 10, DC – к контакту 9, контакт RST – к контакту 8, контакт BUSY – к контакту 7. Полная схема соединений между дисплеем E-Paper и платой Arduino Uno представлена в следующей таблице.
Дисплей E-Paper | Плата Arduino Uno |
3.3V | 3.3V |
GND | GND |
DIN | D11 |
CLK | D13 |
CS | D10 |
DC | D9 |
RST | D8 |
BUSY | D7 |
Собранная конструкция проекта показана на следующем рисунке.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В данном проекте мы будем выводить на экран дисплея E-Paper картинку и надпись CircuitDigest. Скачать код программы для данного проекта и необходимые библиотеки вы можете по следующей ссылке. В проекте мы будем использовать библиотеку SPI.h для связи по протоколу SPI и библиотеку imagedata.h для вывода изображений на экран дисплея E-Paper.
Далее в программе мы будем использовать функцию Serial.println для вывода надписи “welcome to” на первой строке дисплея. Для дисплея E-Paper нам доступны всего два цвета – черный и белый. Для задания цвета и размера выводимого на дисплей сообщения мы будем использовать функцию Paint.DrawString . Затем на следующей строчке дисплея мы выведем надпись “Circuit Digest”.
Затем мы отобразим на экране дисплея картинку, для этого сформируем для картинки шестнадцатеричный (HEX ) код. Это можно сделать, например, с помощью конвертера Image2cpp. В качестве картинки, выводимой на экран дисплея, мы будем использовать лого сайта CircuitDigest (ссылка на него приведена в конце статьи). Шестнадцатеричный код (hex code) этой картинки необходимо записать в библиотеку imagedata.cpp.
На следующей картинке показан результат работы нашего проекта – на экран дисплея выведена одна строка текста и картинка (лого сайта CircuitDigest). Но даже вывод одного такого изображения отнял очень много памяти у платы Arduino Uno. Поэтому для полноценной работы с дисплеями E-Paper желательно использовать микроконтроллерные платы с большим объемом памяти, например, ESP8266, ESP32, STM32, Raspberry Pi. У дисплея E-Paper есть такая особенность как возможность обновления изображения части экрана, не обновляя при этом содержимое всего экрана дисплея. Обновление всего экрана дисплея занимает около 2 секунд и на это затрачивается достаточно много энергии. А обновление части экрана и происходит быстрее, и требует значительно меньшего количества энергии.
Энергопотребление дисплея E-Paper
Мы измерили энергопотребление дисплея E-Paper с помощью USB измерителя тока (USB current meter). Когда происходит обновление экрана дисплея на это затрачивается достаточно много тока (приблизительно 7-9 mA), а когда дисплей не обновляется он потребляет совсем мало так (0.02 mA). Таким образом, дисплеи E-Paper можно использовать в устройствах, получающих питание от батареек.
Измерения тока дисплея E-Paper показаны на следующих картинках (во время процесса обновления экрана и после его завершения). Но здесь следует учитывать тот факт, что мы измерили немного большее значение тока чем потребляет непосредственно сам дисплей, поскольку в данном случае мы измерили его энергопотребление совместно с платой Arduino Uno.
Преимущества дисплеев E-Paper
Дисплеи E-Paper (электронная бумага) не излучают свет, а отражают его. В этом плане они не похожи на традиционные ЖК или OLED-дисплеи. Они больше похожи на обычные чернила на бумаге. Данная особенность делает дисплеи E-Paper очень удобными для чтения и они обладают отличной читаемостью даже под прямыми солнечными лучами. Еще одна замечательная особенность подобных дисплеев заключается в том, что они могут хранить статичный текст и изображения в течение нескольких месяцев без потребления электричества. Дисплеи E-Paper могут отображать текст и изображения, даже когда они выключены (!), что делает их идеальными для применения в маломощных проектах.
Недостатки дисплеев E-Paper
Стоимость дисплеев E-paper значительно выше чем у других типов дисплеев. Другим существенным недостатков данных дисплеев является большое время, необходимое для обновления информации на экране дисплея – около 2-3 секунд. Таким образом, они хорошо подходят для отображения статичных изображений и текста и очень плохо – для отображения меняющихся изображений (анимации). Поэтому они и находят применение только, в основном, в различных “читалках” и почти никогда не применяются в проектах, требующих отображения видео.
Исходный код программы (скетча)
В данном проекте мы использовали дисплей E-Paper с диагональю 1,54 дюйма версии V2. Следует помнить о том, что коды программ для различных версий данного дисплея отличаются. Например, здесь мы использовали библиотеку apd1in54_V2.h, а библиотека epd1in54.h в нашем случае работать уже не будет – она подходит только для первой версии дисплея.