Подключение к плате Raspberry Pi 4 ЖК дисплея 20x4


ЖК (жидкокристаллические) дисплеи в настоящее время являются одними из самых популярных типов дисплеев, используемых в современной электронике. В большинстве своем они используют для работы драйвер Hitachi HD44780. В данной статье мы рассмотрим подключение алфавитно-цифрового ЖК дисплея 20x4, работающего на основе драйвера Hitachi HD44780 к плате Raspberry Pi 4, и попробуем выводить на экран данного дисплея строки символов, производить скроллинг текста, создавать новые пользовательские символы и многое другое.

Внешний вид проекта подключения к плате Raspberry Pi 4 ЖК дисплея 20x4

В проекте мы будем использовать библиотеку RPLCD from PyPI. С ее помощью можно создавать собственные пользовательские функции для работы с ЖК дисплеем: скроллинг текста, создание новых символов и т.п.

Демонстрация возможностей ЖК дисплея 20x4 в нашем проекте

Необходимые компоненты

  1. Плата Raspberry Pi 4 (или другая подходящая модель платы) (купить на AliExpress).
  2. ЖК дисплей 20x4 (купить на AliExpress).
  3. Соединительные провода.

ЖК дисплей 20x4

"Сердцем" данного ЖК дисплея является схема драйвера HD44780. Даташит на нее можно посмотреть по следующей ссылке. Данный дисплей можно подключить к плате Raspberry Pi двумя способами: по интерфейсу I2C или с помощью непосредственного подключения контактов. Однако второй способ потребует использования 14 контактов платы Raspberry Pi, также он займет и контакты SPI порта платы если мы будем использовать 8-битный способ передачи. Поэтому в данной статье мы будем использовать интерфейс I2C для подключения дисплея к плате Raspberry Pi.

Внешний вид ЖК дисплея 20x4

Если у вас нет модуля I2C, то тогда можно использовать следующую схему подключения дисплея к плате:

Контакт ЖК дисплея Контакт Raspberry Pi
RS 15
RW 18
E 16
Data 4 21
Data 5 22
Data 6 23
Data 7 24

Другие альтернативные способы подключения ЖК дисплея 20x4 к плате Raspberry Pi вы можете посмотреть в документации RPLCD.

Модуль расширения I2C PCF8574

Внешний вид модуля расширения I2C PCF8574

Данный модуль позволяет преобразовать параллельные контакты общего назначения в стандартную двунаправленную двухпроводную шину интерфейса I2C (линии SCL и SDA). Модуль имеет очень низкое потребление тока (2.5uA) что делает его пригодным для применения в мобильных приложениях. Диапазон питающих напряжения для модуля: от 2.5 V до 6V. Может обеспечивать Latched-выходы для непосредственного управления светодиодами.

Схема проекта

Схема подключения ЖК дисплея 20x4 к плате Raspberry Pi по интерфейсу I2C представлена на следующем рисунке.

Схема подключения ЖК дисплея 20x4 к плате Raspberry Pi по интерфейсу I2C

Как видите, использование интерфейса I2C, значительно упрощает подключения ЖК дисплея к плате Raspberry Pi.

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

На следующем рисунке показана способ формирования блоков для отображения символов на экране ЖК дисплея 20x4. Из рисунка видно, что для отображения одного символа на экране дисплея используется блок (матрица) 8x5 пикселов.

Способ формирования блоков для отображения символов на экране ЖК дисплея 20x4

Установка необходимых библиотек для работы с ЖК дисплеем 20x4

В данном проекте для работы с дисплеем мы будем использовать библиотеку RPLCD from PyPI. Ее можно установить в плату Raspberry Pi с помощью команды:

Если вы используете I2C модуль для подключения дисплея, то в этом случае вам необходимо будет установить и библиотеку Python-SMBUS. Ее можно установить с помощью следующей команды:

или с помощью команды:

Библиотека RPLCD будет автоматически использовать необходимые функции из библиотеки smbus. После установки библиотек вы увидите запрос на установку адреса I2C. В случае использования I2C модуля PCF8574 (вместо него можно также использовать модули MCP2308 или MCP23017) у него будет I2C адрес равный 0x27. Подробнее о том, как определить I2C адрес устройства, подключенного к плате Raspberry Pi, можно прочитать в этой статье.

В нашем проекте мы используем ЖК дисплей в 4-битном режиме – интерфейс I2C будет работать только в этом режиме, в 8-битном режиме он уже работать не будет.

Код программы для вывода строки на ЖК дисплей 20x4

Попробуем вывести строку символов ‘Hello world’ на экран ЖК дисплея. Для этого создадим новый python файл, его имя вы можете выбрать по своему желанию. Вначале этой программы подключим (импортируем) необходимые библиотеки и создадим объект для работы с ЖК дисплеем.

Библиотека RPLCD содержит файл i2c.py и импортируя его мы получаем доступ к всем методам (функциям), содержащимся в "i2c.py". При создании объекта для работы с ЖК дисплеем с помощью функции CharLCD(), нам необходимо указать I2C имя устройства (у нас это PCF8574) и I2C адрес устройства (в нашем случае 0x27).

Далее вывести строку символов на экран дисплея можно с помощью функции lcd.write_string(). Позицию курсора для вывода начала этой строки можно изменить с помощью функции cursor_pos(m,n). Для ЖК дисплея 20x4 номер строки m может принимать значения от 0 до 3, а номер столбца n – значения от 0 до 19.

Но помните о том, что с помощью функции lcd.write_string() на экран дисплея можно вывести только строку, но нельзя вывести значение целого типа (integer). Чтобы вывести значение целого типа на экран дисплея его предварительно необходимо конвертировать в строку. С помощью функции lcd.write_string() можно вывести строку на двух строках дисплея если отключена опция auto_linebreak().

Вывод строки символов ‘Hello world’ на экран ЖК дисплея 20х4

Код программы для скроллинга текста на экране дисплея

Поскольку у нас нет в распоряжении никакой готовой функции для вывода длинного текста в одной строке или для скроллинга текста, то попробуем запрограммировать ее самостоятельно.

В представленном фрагменте кода мы используем способ буферизации кадров для отображения длинных строк. Также мы используем двухмерный массив, содержащий строки и столбцы, для вывода информации на экран ЖК дисплея 20x4.

После этого для вывода длинного текста с помощью скроллинга мы используем функцию:

Эта команда выведет скроллинг текста во второй строке ЖК дисплея как показано на следующем рисунке:

Скроллинг текста во второй строке ЖК дисплея 20х4

Код программы для создания нового символа

Мы можем создавать свои собственные символы для вывода на экран ЖК дисплея с помощью функции create_char(location,bitmap_tuple).

Переменная location в этой функции – это местоположение символа в памяти, а bitmap_tuple – двухмерный массив данных размером 5х8 элементов (пикселов). Массива 5х8 пикселов достаточно для представления всех символов английского алфавита.

Используемый нами ЖК дисплей содержит память для хранения 8 новых пользовательских символов. Каждый из них может храниться по любому адресу в диапазоне от x00 до x07. Обращаясь по нужному адресу, мы можем “вызвать” нужный нам символ.

Создадим массивы растровых данных для хранения символов “locked” и “unlock”.

Разместим символ “Locked” по адресу 0.

Выведем на экран наш символ “Locked” на позиции (2,4).

Вывод созданного символа “Locked” на экран ЖК дисплея 20х4

Аналогичным образом вы можете создавать свои любые символы для их последующего вывода на экран ЖК дисплея 20x4.

Код программы для индикации заряда батареи

Сначала создадим битовые массивы для необходимых нам символов.

После этого мы будем по очереди выводить их на экран дисплея на одной и той же позиции курсора.

Индикация заряда батареи на экране ЖК дисплея 20х4

Код программы для создания нескольких символов

Мы создадим 4 символа таким образом, чтобы размещенные вместе они формировали улыбающееся лицо человека. Массивы для создания этих символов назовем face_LB, face_LT, face_RT и face_RB. Для создания этих символов можно использовать любой растровый редактор, даже размещенный на каком-нибудь сайте в сети.

Внешний вид получившегося у нас символа, составленного из 4-х созданных нами символов, показан на следующем рисунке.

Внешний вид получившегося у нас составного символа

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
891 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *