Как управлять символьным LCD-дисплеем с помощью Raspberry Pi

Как управлять LCD-дисплеем с помощью Raspberry Pi

В этом руководстве мы расскажем, как подключить LCD-дисплей 16x2 к вашему Raspberry Pi с помощью GPIO-пинов. Возможность отображать сообщение на LCD — это не только очень круто, но и может быть весьма полезно. Например, в этом руководстве мы покажем, как настроить LCD-дисплей для отображения IP-адреса вашего Raspberry Pi.

Для этого упражнения вам понадобятся:

  • Raspberry Pi (разумеется!)

  • Совместимый с HDD44780 LCD-дисплей 16x2

  • Макетная плата

  • Adafruit Pi Cobbler

  • Разноцветные провода для макетирования

Шаг 1 — Сборка LCD-дисплея

Для этого упражнения я использовал символьный LCD-дисплей Adafruit HDD44780. В комплекте с ним должна идти штырьковая гребёнка 0.1» и потенциометр.

Комплект LCD-дисплея Adafruit HDD44780 с гребёнкой и потенциометром

Сначала нам нужно припаять гребёнку 0.1» к плате LCD. Отломите нужное количество штырьков (в данном случае 16) и аккуратно припаяйте их к плате.

Припаянная гребёнка к плате LCD-дисплея

Для этого упражнения мы будем управлять LCD-дисплеем в 4-битном режиме. Хотя его можно подключить и другими способами — через I2C или UART — это наиболее прямой метод. Для управления дисплеем таким образом нам потребуется использовать 6 пинов на GPIO-порту: 4 пина данных и 2 пина управления.

Распиновка LCD

Распиновка LCD-дисплея
  • Пины данных — мы будем использовать пины 11–14 (data4–7) для отправки данных на дисплей путём переключения уровней high/low.

  • Enable — будет переключаться для записи данных в регистры.

  • Read/Write — поскольку мы хотим только записывать на дисплей, а не считывать, этот пин будет установлен в low (запись).

  • Register Select — этот пин переключает LCD-дисплей между двумя режимами: командный режим (high) и режим данных (low). Командный режим передаёт инструкцию LCD. Например — «Очистить дисплей», «Переместить курсор в начало» и т.д. Режим данных сообщает LCD, что нужно отображать символы.

  • Contrast Voltage — регулирует контрастность дисплея и будет управляться потенциометром при подключении к схеме.

  • VDD — будет подключён к источнику питания 5V от GPIO-порта Pi.

Шаг 2 — Сборка схемы

Ниже представлена принципиальная схема и схема подключения, взятые с сайта Adafruit:

Принципиальная схема подключения LCD к Raspberry Pi Схема подключения LCD к Raspberry Pi на макетной плате

Для работы LCD мы подключим схему аналогично диаграмме выше, но пока не соединяйте всё вместе! Список ниже точно указывает, к чему подключаются пины LCD:

  • Pin #1 (VSS) подключается к земле (чёрный провод)

  • Pin #2 (VDD) подключается к +5V (красный провод)

  • Pin #3 (VE) подключается к среднему выводу потенциометра (оранжевый провод)

  • Pin #4 (RS) подключается к Cobbler #25 (жёлтый провод)

  • Pin #5 (RW) подключается к земле (чёрный провод)

  • Pin #6 (EN) подключается к Cobbler #24 (зелёный провод)

  • Пропустите LCD-пины #7, #8, #9 и #10

  • Pin #11 (D4) подключается к Cobbler #23 (синий провод)

  • Pin #12 (D5) подключается к Cobbler #17 (фиолетовый провод)

  • Pin #13 (D6) подключается к Cobbler #21 (серый провод)

  • Pin #14 (D7) подключается к Cobbler #22 (белый провод)

  • Pin #15 (LED +) подключается к +5V (красный провод)

  • Pin #16 (LED -) подключается к земле (чёрный провод)

Начните сборку схемы, вставив Adafruit Cobbler в макетную плату. Не забудьте расположить Cobbler по центру макетной платы так, чтобы никакие два пина не оказались в одном ряду. Затем вставьте LCD-дисплей в макетную плату. Подключите пины 5V и GND от Cobbler к верхней части макетной платы, а также подключите пины 1, 2, 15 и 16 LCD к соответствующим шинам питания. Ваша схема должна выглядеть примерно как на фото ниже:

Собранная схема с Cobbler и LCD на макетной плате

Подключите шлейфовый кабель GPIO от Cobbler к Pi. Если всё подключено правильно, подсветка LCD должна включиться, как на фото выше. Если это не работает, проверьте правильность всех подключений.

Далее подключите потенциометр. Средний вывод потенциометра подключается к пину 3 LCD-дисплея, а два других вывода подключаются к земле и 5V (порядок не имеет значения). Проверьте работу потенциометра, повернув ручку, пока в первой строке дисплея не появятся квадраты, как на фото ниже:

LCD-дисплей с отображёнными квадратами после настройки потенциометра

Наконец, подключите оставшиеся пины LCD. Ваша схема должна выглядеть примерно так:

Полностью собранная схема подключения LCD к Raspberry Pi

Шаг 3 — Программное обеспечение

Для использования GPIO-пинов в Python вам потребуется установить библиотеку GPIO для Python. Инструкции по установке библиотеки GPIO для Python можно найти здесь.

Чтобы получить код Python для управления LCD-дисплеем, мы «заберём» его у Adafruit через GitHub. Убедитесь, что ваш Raspberry Pi подключён к интернету, и мы воспользуемся командой git для клонирования кода Python. Выполните следующие команды в терминале для загрузки файлов.

apt-get install git

затем

git clone git://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git

Теперь мы можем проверить, что дисплей работает и правильно подключён. Один из загруженных файлов — Adafruit_CharLCD.py — содержит класс Python для управления LCD-дисплеем. Он также содержит небольшой фрагмент кода, который при запуске программы отобразит сообщение на LCD.

Чтобы запустить программу, сначала нужно перейти в правильный каталог. Введите следующие команды в окне терминала:

cd Adafruit-Raspberry-Pi-Python-Code
cd Adafruit_CharLCD

Если вы используете версию 2 Raspberry Pi, вам нужно будет немного отредактировать программу, так как пин #21 теперь заменён на пин #27. Откройте файл Adafruit_CharLCD.py в Python или используйте команду nano Adafruit_CharLCD.py для редактирования программы прямо в терминале. Перейдите к строке 57 кода и замените:

def __init__(self, pin_rs=25, pin_e=24, pins_db=[23, 17, 21, 22], GPIO = None):

на:

def __init__(self, pin_rs=25, pin_e=24, pins_db=[23, 17, 27, 22], GPIO = None):

Убедитесь, что вы сохранили изменения в программе. Сначала сделайте файл программы исполняемым:

chmod +x Adafruit_CharLCD.py

Затем запустите программу, введя следующую команду:

sudo ./Adafruit_CharLCD.py

Если всё работает правильно, на экране должно появиться сообщение, как на фото ниже:

LCD-дисплей с сообщением Adafruit

Не стесняйтесь заглянуть в код программы и изменить то, что отображается на LCD. Для этого откройте программу для редактирования, как и раньше, и прокрутите до последней строки кода:

lcd.message("  Adafruit 16x2  Standard LCD")

Просто измените текст в скобках после lcd.message(), чтобы отобразить нужный вам текст. Команда \n используется для переноса текста на новую строку. Более аккуратный способ сделать это — изменить последнюю часть программы, чтобы она выглядела следующим образом:

if __name__ == '__main__':
    lcd = Adafruit_CharLCD()
    message = raw_input("Type your message here  ")
    lcd.clear()
    lcd.message(message)

Таким образом, при запуске программы вам будет предложено «type your message here» для ввода сообщения с клавиатуры, которое затем отобразится на LCD. Это было сделано путём определения новой переменной message, которая равна команде raw_input(), позволяющей пользователю вводить текст вручную. Часть в скобках команды raw_input() просто выводится на экран компьютера, подсказывая вам, что нужно написать.

LCD-дисплей с пользовательским сообщением

Шаг 5 — Пример с IP-адресом и часами

Отображение произвольного текста на LCD — это круто, но не очень практично. Запуск программы Adafruit_CharLCD_IPclock_example.py отобразит дату/время и IP-адрес Pi на LCD. Программа использует методы из предыдущей программы Adafruit_CharLCD.py. Вы можете открыть программу, чтобы изучить код. Для этого откройте программу в Python или используйте команду sudo nano Adafruit_CharLCD_IPclock_example.py в терминале.

Код программы Adafruit_CharLCD_IPclock_example.py

Запустите программу (из того же каталога, что и раньше), введя в окне терминала следующее:

sudo ./Adafruit_CharLCD_IPclock_example.py

Если всё работает правильно, дисплей должен выглядеть так:

LCD-дисплей с отображением IP-адреса и времени

Вот и всё!