Построение контроллеров на Raspberry Pi #5: отображение сообщений на LCD дисплее
Светодиоды используются в качестве прямой замены ламп накаливания из-за таких преимуществ, как меньшая теплоотдача и более долгий срок службы. Помимо использования в качестве источников света, светодиоды достаточно гибки, чтобы использовать их в бегущей строке для отображения сообщений. Буквы и цифры могут быть легко созданы с помощью семисегментных светодиодных дисплеев, используя простую схему соединений, полученную из технического описания на конкретный оптоэлектронный компонент. Для создания сообщений, состоящих из нескольких букв с помощью буквенно-цифровых символов (сочетания цифр и букв), требуется методика управления каждой семисегментной светодиодной цифрой через схему электронного драйвера. Этот метод управления каждой семисегментной светодиодной цифрой через схему электронного драйвера называется мультиплексированием. Хотя семисегментные светодиодные дисплеи и отличаются энергоэффективностью и простотой использования, основная проблема оптоэлектронных компонентов – это размытие изображения при ярком солнечном свете.
Жидкокристаллический дисплей (LCD) был разработан с целью удаления тепловыделения и размытия изображения. Кроме того, LCD дисплеи позволяют выводить множество символов и сложную графику. В данном проекте мы рассмотрим использование LCD с помощью Raspberry Pi. Raspberry Pi позволит отображать на LCD дисплее простые текстовые сообщения с помощью языка программирования Python. Мы будем использовать библиотеку Adafruit_Python_CharLCD для экспериментов с RPi LCD контроллером для отображения простых текстовых сообщений. Блок-схема нашего RPi LCD контроллера показана на рисунке 1. Кроме того, ниже приведен также список компонентов RPi LCD контроллера.
Перечень компонентов
- Raspberry Pi ( Model A+, B, B+, Pi 2 или Pi 3)
- (R1) потенциометр 10 кОм или 100 кОм
- символьный LCD дисплей 16x2
- переходник для GPIO выводов Raspberry Pi
- беспаечная макетная плата
- перемычки
Основное об LCD
Прежде, чем мы начнем практическую работу с LCD дисплеями, давайте узнаем, как они работают. LCD дисплеи традиционно используются для отображения данных, графики или того и другого на стеклянной пластине. Типовые LCD дисплеи состоят из контроллера и материала стеклянной подложки. Сегменты LCD дисплея, установленные на материале стеклянной подложки, управляются электронным контроллером, который состоит из микропроцессора или микроконтроллера.
Типовая блок-схема LCD дисплея с контроллером показана на рисунке 2.
Кристаллические сегменты LCD дисплея расположены между стеклянными пластинами с электродами. Для того чтобы кристаллические сегменты начали отображать буквы или символы, необходимо небольшое переменное напряжение. Переменное напряжение включает кристаллические сегменты. Электронным устройством, ответственным за управление этим электрическим напряжением для кристаллических сегментов, является контроллер LCD. Для обеспечения правильных длительностей времени включения и выключения кристаллических сегментов внутри LCD контроллера используется микропроцессор или микроконтроллер. Типовыми LCD контроллерами, используемыми для управления кристаллическими сегментами, являются HD44780 и KS0066. LCD дисплеи поставляются с различным количеством строк и столбцов, например, 8x1, 16x1, 20x2 и 20x4. В данном проекте мы будем использовать стандартный LCD дисплей 16x2. Типовой LCD дисплей и его контроллер, обозначенный как U2, показан на рисунке ниже.
Теперь, когда мы рассмотрели основные понятия об LCD дисплеях, можно начать сборку RPi LCD контроллера.
Сборка RPi LCD контроллера
Как и предыдущие проекты на Raspberry Pi в данной серии, мы соберем LCD контроллер, используя лишь несколько электронных компонентов. Беспаечная макетная плата является незаменимым инструментом прототипирования при создании электронных проектов, она так же будет использоваться и при соединении компонентов RPi LCD контроллера. Кроме того, мы подключим к LCD дисплею потенциометр (10 или 100 кОм) для регулировки контрастности дисплея. Ниже приведены схема соединений компонентов и две принципиальные схемы.
Эквивалентная принципиальная схема из Fritzing для LCD контроллера показана ниже.
Поскольку принципиальная схема во Fritzing слегка трудночитаема, ниже приведена нормальная принципиальная схема LCD контроллера.
Перед тем, как перейти к тестированию RPi LCD контроллера, проверьте соединения на наличие ошибок. Если ошибок нет, вы готовы протестировать управление контрастностью LCD дисплея перед загрузкой библиотеки Adafruit_Python_CharLCD на Raspberry Pi.
Тестирование правильности сборки LCD контроллера на Raspberry Pi
Теперь, когда LCD контроллер на Raspberry Pi полностью собран на макетной плате, вы готовы провести электрическое испытание устройства. Для проверки правильности сборки LCD контроллера необходимо просто подать питание на Raspberry Pi и подстроить контрастность LCD дисплея с помощью потенциометра. Вы можете увидеть ряд прямоугольных блоков, их видимость зависит от положения потенциометра. На рисунке 7 ниже приведена фотография моего RPi LCD контроллера. Если прямоугольников не видно, подстройте контрастность дисплея с помощью потенциометра. Поздравляю, вы успешно собрали свой LCD контроллер на Raspberry Pi! Заключительным этапом данного проекта является добавление библиотеки Adafruit_Python_CharLCD в Raspberry Pi для отображения сообщения.
Добавление библиотеки Adafruit_Python_CharLCD
Нам остается сделать еще один шаг для получения полностью рабочего LCD контроллера. Всё, что остается, это добавить библиотеку Adafruit_Python_CharLCD на Raspberry Pi для отображения сообщений на дисплее. Библиотека Adafruit_Python_CharLCD входит в пакет примеров программного обеспечения для Raspberry Pi от Adafruit. HD44780 представляет собой электронный контроллер, обычно используемый в LCD дисплеях. Пакет примеров Adafruit содержит библиотеку для управления данным LCD контроллером. Библиотеку Adafruit_Python_CharLCD можно получить из репозитория Github.
Перед установкой необходимо проверить наличие следующих зависимостей:
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus python-pip
Затем необходимо убедиться, что установлена библиотека RPi.GPIO, с помощью команды:
sudo pip install RPi.GPIO
Теперь необходимо скачать библиотеку Adafruit_Python_CharLCD, распаковать архив, перейти в каталог распакованного архива и установить библиотеку, выполнив команду:
sudo python setup.py install
Код программы
Обратите внимание на конфигурацию выводов Raspberry Pi, подключенных к LCD дисплею. Кроме того, библиотека Adafruit_Python_CharLCD позволяет управлять подсветкой LCD дисплея (в собранном нами проекте подсветка не используется).
#!/usr/bin/python
import time
import Adafruit_CharLCD as LCD
# Конфигурация выводов Raspberry Pi:
lcd_rs = 25
lcd_en = 24
lcd_d4 = 23
lcd_d5 = 17
lcd_d6 = 21
lcd_d7 = 22
lcd_backlight = 4
# Определяем размеры LCD дисплея в строках и столбцах для LCD дисплея 16x2.
lcd_columns = 16
lcd_rows = 2
# Пример указания LCD дисплея 20x4.
# lcd_columns = 20
# lcd_rows = 4
# Инициализация LCD, используя выводы, определенные выше.
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
lcd_columns, lcd_rows, lcd_backlight)
# Напечатать двухстрочное сообщение
lcd.message('Hello\nworld!')
# Ждать 5 секунд
time.sleep(5.0)
# Демонстрация, показывающая курсор.
lcd.clear()
lcd.show_cursor(True)
lcd.message('Show cursor')
time.sleep(5.0)
# Демонстрация, показывающая мигание курсора.
lcd.clear()
lcd.blink(True)
lcd.message('Blink cursor')
time.sleep(5.0)
# Остановить мигание и отображение курсора.
lcd.show_cursor(False)
lcd.blink(False)
# Демонстрация прокрутки сообщения вправо/влево.
lcd.clear()
message = 'Scroll'
lcd.message(message)
for i in range(lcd_columns-len(message)):
time.sleep(0.5)
lcd.move_right()
for i in range(lcd_columns-len(message)):
time.sleep(0.5)
lcd.move_left()
# Демонстрация включения/выключения подсветки.
lcd.clear()
lcd.message('Flash backlight\nin 5 seconds...')
time.sleep(5.0)
# Выключить подсветку.
lcd.set_backlight(0)
time.sleep(2.0)
# Изменить сообщение.
lcd.clear()
lcd.message('Goodbye!')
# Включить подсветку.
lcd.set_backlight(1)
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!