Построение контроллеров на Raspberry Pi #5: отображение сообщений на LCD дисплее

Добавлено 6 декабря 2016 в 22:50

Светодиоды используются в качестве прямой замены ламп накаливания из-за таких преимуществ, как меньшая теплоотдача и более долгий срок службы. Помимо использования в качестве источников света, светодиоды достаточно гибки, чтобы использовать их в бегущей строке для отображения сообщений. Буквы и цифры могут быть легко созданы с помощью семисегментных светодиодных дисплеев, используя простую схему соединений, полученную из технического описания на конкретный оптоэлектронный компонент. Для создания сообщений, состоящих из нескольких букв с помощью буквенно-цифровых символов (сочетания цифр и букв), требуется методика управления каждой семисегментной светодиодной цифрой через схему электронного драйвера. Этот метод управления каждой семисегментной светодиодной цифрой через схему электронного драйвера называется мультиплексированием. Хотя семисегментные светодиодные дисплеи и отличаются энергоэффективностью и простотой использования, основная проблема оптоэлектронных компонентов – это размытие изображения при ярком солнечном свете.

Жидкокристаллический дисплей (LCD) был разработан с целью удаления тепловыделения и размытия изображения. Кроме того, LCD дисплеи позволяют выводить множество символов и сложную графику. В данном проекте мы рассмотрим использование LCD с помощью Raspberry Pi. Raspberry Pi позволит отображать на LCD дисплее простые текстовые сообщения с помощью языка программирования Python. Мы будем использовать библиотеку Adafruit_Python_CharLCD для экспериментов с RPi LCD контроллером для отображения простых текстовых сообщений. Блок-схема нашего RPi LCD контроллера показана на рисунке 1. Кроме того, ниже приведен также список компонентов RPi LCD контроллера.

Компоненты, необходимые для создания RPi LCD контроллера
Рисунок 1 – Компоненты, необходимые для создания RPi LCD контроллера

Перечень компонентов

Основное об LCD

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

Типовая блок-схема LCD дисплея с контроллером показана на рисунке 2.

Блок-схема типового LCD дисплея
Рисунок 2 – Блок-схема типового LCD дисплея

Кристаллические сегменты LCD дисплея расположены между стеклянными пластинами с электродами. Для того чтобы кристаллические сегменты начали отображать буквы или символы, необходимо небольшое переменное напряжение. Переменное напряжение включает кристаллические сегменты. Электронным устройством, ответственным за управление этим электрическим напряжением для кристаллических сегментов, является контроллер LCD. Для обеспечения правильных длительностей времени включения и выключения кристаллических сегментов внутри LCD контроллера используется микропроцессор или микроконтроллер. Типовыми LCD контроллерами, используемыми для управления кристаллическими сегментами, являются HD44780 и KS0066. LCD дисплеи поставляются с различным количеством строк и столбцов, например, 8x1, 16x1, 20x2 и 20x4. В данном проекте мы будем использовать стандартный LCD дисплей 16x2. Типовой LCD дисплей и его контроллер, обозначенный как U2, показан на рисунке ниже.

Обратная сторона типового LCD дисплея. На плате показан LCD контроллер, обозначенный как U2
Рисунок 3 – Обратная сторона типового LCD дисплея. На плате показан LCD контроллер, обозначенный как "U2".

Теперь, когда мы рассмотрели основные понятия об LCD дисплеях, можно начать сборку RPi LCD контроллера.

Сборка RPi LCD контроллера

Как и предыдущие проекты на Raspberry Pi в данной серии, мы соберем LCD контроллер, используя лишь несколько электронных компонентов. Беспаечная макетная плата является незаменимым инструментом прототипирования при создании электронных проектов, она так же будет использоваться и при соединении компонентов RPi LCD контроллера. Кроме того, мы подключим к LCD дисплею потенциометр (10 или 100 кОм) для регулировки контрастности дисплея. Ниже приведены схема соединений компонентов и две принципиальные схемы.

Схема соединений компонентов LCD контроллера
Рисунок 4 – Схема соединений компонентов LCD контроллера

Эквивалентная принципиальная схема из Fritzing для LCD контроллера показана ниже.

Принципиальная схема LCD контроллера во Fritzing
Рисунок 5 – Принципиальная схема LCD контроллера во Fritzing

Поскольку принципиальная схема во Fritzing слегка трудночитаема, ниже приведена нормальная принципиальная схема LCD контроллера.

Принципиальная схема RPi LCD контроллера
Рисунок 6 – Принципиальная схема RPi LCD контроллера

Перед тем, как перейти к тестированию RPi LCD контроллера, проверьте соединения на наличие ошибок. Если ошибок нет, вы готовы протестировать управление контрастностью LCD дисплея перед загрузкой библиотеки Adafruit_Python_CharLCD на Raspberry Pi.

Собранный макет LCD контроллера на Raspberry Pi
Рисунок 7 – Собранный макет LCD контроллера на Raspberry Pi

Тестирование правильности сборки LCD контроллера на Raspberry Pi

Теперь, когда LCD контроллер на Raspberry Pi полностью собран на макетной плате, вы готовы провести электрическое испытание устройства. Для проверки правильности сборки LCD контроллера необходимо просто подать питание на Raspberry Pi и подстроить контрастность LCD дисплея с помощью потенциометра. Вы можете увидеть ряд прямоугольных блоков, их видимость зависит от положения потенциометра. На рисунке 7 ниже приведена фотография моего RPi LCD контроллера. Если прямоугольников не видно, подстройте контрастность дисплея с помощью потенциометра. Поздравляю, вы успешно собрали свой LCD контроллер на Raspberry Pi! Заключительным этапом данного проекта является добавление библиотеки Adafruit_Python_CharLCD в Raspberry Pi для отображения сообщения.

Тестирование правильности сборки RPi LCD контроллера
Рисунок 8 – Тестирование правильности сборки RPi LCD контроллера

Добавление библиотеки 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)
LCD контроллер на Raspberry Pi
Рисунок 9 – LCD контроллер на Raspberry Pi

Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!

Теги

LCD дисплейPythonRaspberry Pi

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.