Raspberry Pi и Pi4J. Урок 7. Работа с LCD на базе HD44780

Информации о том, что из себя представляет LCD на базе HD44780, в интернете очень много. Даже на этом сайте две статьи на эту тему (первая и вторая). Однако в этой статье речь пойдет не о нём, а о библиотеках Pi4J, что позволяют работать с данным дисплеем из Java.

Pi4J предоставляет 3 библиотеки для этих целей:

  1. com.pi4j.wiringpi.Lcd — это библиотека, позволяющая получать доступ к жидкокристаллическим дисплеям с параллельным интерфейсом через GPIO пины. Все методы этого класса нативные, так как вызываются функции wiringPi напрямую. Грубо говоря — это библиотека lcd.h, но только на Java.
  2. com.pi4j.component.lcd.impl.GpioLcdDisplay — это ООП версия com.pi4j.wiringpi.Lcd, что удобнее использовать. Для записи данных на дисплей используются функции com.pi4j.wiringpi.Lcd.
  3. com.pi4j.component.lcd.impl.I2CLcdDisplay — это библиотека для работы с жидкокристаллическими дисплеями через I2C (IIC/TWI), а именно — адаптер на чипе PCF8574. В таком случае для управления дисплеем будет использоваться всего 2 провода вместо 6 или 10.

Pi4J предоставляет возможность работы с LCD из Java на Raspberry Pi, Banana Pi, Orange Pi, Nano Pi и Odroid. Все классы и интерфейсы находятся в пакетах com.pi4j.component.lcd.*; com.pi4j.wiringpi.*; и com.pi4j.gpio.extension.pcf.*.

Ниже представлены описания интерфейсов/классов и примеры программ.

Класс Lcd

Как я уже писал выше, эта библиотека аналогична «wiringPi». Ниже вы найдёте пример программы, которая показывает, как использовать эту библиотеку для отображения строк на ЖК-дисплее.

Все нативные методы класса Lcd:

Описание этих функций вы найдёте здесь.

Схема подключения LCD в 4-битном режиме

Подключение LCD 1602 HD44780 к Orange Pi в 4-битном режиме

Пример программы в 4-битном режиме

Прежде всего, мы должны выбрать платформу, иначе программа будет работать с ошибками или вообще не будет работать. В моем случае это Orange Pi PC.

Затем нам нужно инициализировать контроллер GPIO для работы с ним. Если он не может быть инициализирован, будет сгенерировано исключение.

После этого мы можем инициализировать экземпляр ЖК-дисплея.

Метод lcdInit генерирует идентификатор lcdHandle, который будет использоваться для связи именно с этим ЖК-дисплеем.

Проверяем код:

  1. создаём java файл и вставляем код;
  2. компилируем файл;
  3. запускаем программу.

Интерфейс LCD

Интерфейс LCD содержит методы для передачи строк и символов на ЖК-дисплей. Интерфейс реализован в двух классах GpioLcdDisplay и I2CLcdDisplay, первый работает с GPIO, а второй работает с I2C контроллером PCF8574.

getRowCount() и getColumnCount()

Методы возвращают число строк и символов соответственно.

clear()

Метод void clear() возвращает курсор в начало экрана, заодно стирая всё, что было на дисплее до этого. Метод void clear(int row) стирает один ряд, а void clear(int row, int column, int length) — только нужную часть текста.

setCursorHome() и setCursorPosition()

Метод setCursorHome() устанавливает курсор в исходное положение; setCursorPosition() устанавливает положение курсора для последующего ввода текста.

write(…)

Записывает строку данных на ЖК-дисплей.

write(int, …)

Печатает нужную строку на указанный ряд.

write(int, int, …)

Печатает нужную строку, начиная с указанной позиции.

writeln(int, …)

Метод печатает текст на жидкокристаллическом индикаторе на указанный ряд, после переводит курсор в начало следующего.

Перечисление LCDTextAlignment

Это перечисление используется с методами отображения текста на ЖК-дисплее (write и writeln) для выравнивания текста.

  • ALIGN_CENTER — используется для размещения текста в середине экрана;
  • ALIGN_LEFT — для размещения текста слева от экрана;
  • ALIGN_RIGHT — для размещения текста справа.

Класс GpioLcdDisplay

Класс GpioLcdDisplay реализует интерфейс LCD для работы с дисплеем через GPIO. Конструктор класса используется для инициализации ЖК-дисплея 8-битном или 4-битном режиме:

Параметры:
int rows — количество строк;
int columns — количество символов;
Pin rsPin — пин выбора регистра;
Pin strobePin — пин строба;
Pin... dataPins — пины данных;

Схема подключения LCD в 8-битном режиме

Подключение LCD 1602 HD44780 к Orange Pi в 8-битном режиме

Пример инициализации в 8-битном режиме

Схема подключения LCD в 4-битном режиме

Подключение LCD 1602 HD44780 к Orange Pi в 4-битном режиме

Пример инициализации в 4-битном режиме

Класс I2CLcdDisplay

Класс I2CLcdDisplay — это второй класс, который реализует интерфейс LCD.java для передачи данных на ЖК-дисплей через протокол I2C. В этих случаях используются адаптеры на основе чипов PCF8574. В моем случае — это адаптер FC-113 на базе FCF8574AT, что имеет диапазон адресов от 38h до 3Fh.

Этот класс содержит дополнительные методы для включения и выключения подсветки ЖК-дисплея.

Схема подключения

Подключение LCD 1602 HD44780 к Orange Pi по I2C с использованием адаптера PCF8574
Если хотите подключить LCD к 5В, тогда необходимо использовать I2C преобразователя логических уровней 5-3.3В по линиям SDA и SCL.
Подключение LCD 1602 HD44780 к Orange Pi по I2C с использованием адаптера PCF8574 и I2C Преобразователя логических уровней 5-3.3В

Orange Pi Преобразователь PCF8574
LV/3.3В HV/5.0В
HV VCC
3.3В LV
GND GND GND GND
SDA.0 LV2 HV2 SDA
SCL.0 LV1 HV1 SCL

Пример программы

Эта программа инициализируется для работы с Orange Pi;

создает экземпляр класса I2CLcdDisplay. Стоит заметить, что бывают разные адаптеры на базе FCF8574AT и распиновка тоже разная;

записывает строку на ЖК-дисплей на первый ряд по центру;

выключает и включает подсветку;

и выводит текущее время;

Полный код программы:

Проверяем код:

  1. создаём java файл и вставляем код;
  2. компилируем файл;
  3. запускаем программу.

Результат

Подключение LCD 1602 HD44780 к Orange Pi по I2C с использованием адаптера PCF8574 - Результат Подключение LCD 1602 HD44780 к Orange Pi по I2C с использованием адаптера PCF8574 - РезультатЕсли у Вас будут вопросы — можете задать их в комментариях.

Материалы

LCD Library (HD44780U)
PCF8574_PCF8574A.pdf
Sainsmart 16×2 I2C lcd

Похожие записи

Комментарии 2

  • По поводу подключения LCD по i2c. У вас подключение к плате без преобразования уровней. Разве GPIO Orange PI толерантны к 5В ой логике?

    • Вы правы, в действительности я подключил модуль к 3.3 В, а в схеме чуток ошибся и подключил к 5В. Я исправлю схему, чтобы не вести людей в заблуждении. Спасибо, что заметили и предупредили.

      Если присмотреться к фотографии, то видно, что чёрный провод от Vcc идёт к первому пину — 3.3В

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

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