Подключение жидкокристаллического (ЖК) дисплея 16x2 к Raspberry Pi


В данной статье мы рассмотрим подключение жидкокристаллического (ЖК) дисплея 16x2 к плате Raspberry Pi. ЖК дисплей мы будем подключать к контактам ввода/вывода (GPIO pins) платы Raspberry Pi. Также мы рассмотрим написание программы на Python, с помощью которой мы будем передавать команды и символы на экран ЖК дисплея. Рассматриваемый в данной статье ЖК дисплей 16x2 отлично подходит для отображения различной информации от датчиков и о состоянии подключенных периферийных устройств.

Внешний вид подключения ЖК дисплея 16x2 к плате Raspberry Pi

В настоящее время производится достаточно много типов ЖК дисплеев. Графические ЖК дисплеи более сложные по устройству чем алфавитно-цифровые (как в нашем проекте). В этой статье мы будем использовать ЖК дисплей 16x2, который также можно использовать и как дисплей 16x1. ЖК дисплей 16x2 может одновременно отображать 32 символа: 16 на первой строке и 16 на второй. Достаточно подробно про принципы подключения ЖК дисплея 16x2 к микроконтроллерам описано в статье про его подключение к микроконтроллеру AVR – во многом описываемое в этой статье его подключение к плате Raspberry Pi похоже именно на его подключение к микроконтроллеру AVR. Также на нашем сайте мы рассматривали подключение ЖК дисплея 16x2 к плате Arduino, но там все намного проще (по сравнению с его подключением к AVR и Raspberry Pi) поскольку все рутинные функции берет на себя специальная библиотека для Arduino.

Схема расположения контактов ввода/вывода (GPIO) на плате Raspberry Pi 2 показана на следующем рисунке. Более подробно об этих контактах вы можете прочитать в статье про мигание светодиода с помощью Raspberry Pi.

Распиновка контактов ввода/вывода (GPIO) платы Raspberry Pi

Каждый из 17 универсальных контактов ввода/вывода (GPIO) может выдерживать ток до 15mA. А суммарный ток от всех контактов ввода/вывода не должен превышать 50mA – таким образом, в среднем на каждый контакт будет приходиться ток примерно 3mA.

Также на плате Raspberry Pi присутствуют силовые контакты +5V (Pin 2 & 4) и +3.3V (Pin 1 & 17), от которых можно запитывать различные датчики и модули. В нашем проекте мы будем подавать питание на ЖК дисплей от силовых контактов +5V. Мы можем передавать управляющие сигналы напряжением +3.3V на ЖК дисплей и он будет их воспринимать, но для его питания обязательно напряжение +5V, он не будет работать если вы попытаетесь его запитать от напряжения +3.3V.

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

  1. Плата Raspberry Pi 2 Model B или другая аналогичная (купить на AliExpress).
  2. ЖК дисплей 16x2 (купить на AliExpress).
  3. Резистор 1 кОм – 2 шт. (купить на AliExpress).
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. Конденсатор 1000 мкФ (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

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

Схема подключения ЖК дисплея 16x2 к плате Raspberry Pi представлена на следующем рисунке.

Схема подключения ЖК дисплея 16x2 к плате Raspberry PiКак показано на схеме, мы подключили ЖК дисплей 16x2 к 10 контактам ввода/вывода (GPIO pins) платы Raspberry Pi. Эти 10 контактов будут использоваться для управления ЖК дисплеем и передачи ему данных. Мы использовали контакты 21, 20, 16, 12, 25, 24, 23 и 18 в качестве BYTE (то есть по ним мы будем непосредственно передавать данные). Контакт GPIO21 в данном случае будет играть роль младшего значащего бита (Least Significant Bit, LSB), а контакт GPIO18 – роль старшего значащего бита (Most Significant Bit, MSB).

Модуль ЖК дисплея 16x2 имеет 16 контактов, которые можно разделить на 5 категорий: Power Pins (силовые контакты), contrast pin (контакт для управления контрастностью), Control Pins (управляющие контакты), Data pins (контакты для передачи данных) и Backlight pins (контакты подсветки). Краткое описание этих контактов приведено в следующей таблице (описание контактов не переводил - этой информации на русском полно в сети).

Назначение контактов ЖК дисплея 16x2

Общие принципы передачи данных с Raspberry Pi на ЖК дисплей

Вкратце, процесс передачи данных от платы Raspberry Pi на ЖК дисплей состоит из следующих основных операций:

  1. Контакт E ЖК дисплея устанавливается в состояние high (разрешение на работу дисплея), а контакт RS устанавливается в состояние low (сообщаем ЖК дисплею что мы будем передавать команду).
  2. Передаем на порт данных (data port) команду 0x01 – это команда очистить экран.
  3. Контакт E ЖК дисплея устанавливается в состояние high (разрешение на работу дисплея), контакт RS также устанавливается в состояние high (сообщаем ЖК дисплею что мы будем передавать данные).
  4. Передаем ASCII код символа, который необходимо отобразить на экране дисплея.
  5. Контакт E ЖК дисплея устанавливается в состояние low (сообщаем ЖК дисплею что мы закончили процесс передачи данных).
  6. Как только на контакте E будет уровень low, ЖК дисплей обрабатывает принятые данные и показывает результат на своем экране. Таким образом, контакт E необходимо устанавливать в high перед передачей данных и устанавливать в low после завершения передачи данных.

Символы, которые необходимо отобразить на экране, мы будем передавать ЖК дисплею последовательно – один за другим. Точнее сказать, мы будем передавать не сами символы, а их ASCII коды (American standard Code for Information Interchange). Таблица ASCII кодов приведена на рисунке ниже. К примеру, чтобы отобразить на экране ЖК дисплея символ “@”, мы должны передать шестнадцатеричный код 40”. А если мы передадим ЖК дисплею значение 0x73, то на его экране отобразится символ “s”. В этом проекте мы с помощью передачи ЖК дисплею соответствующих ASCII кодов отобразим на его экране строку “CIRCUITDIGEST”.

Таблица ASCII кодов

Объяснение программы для Raspberry Pi

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

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

В программе нам первым делом необходимо подключить (импортировать) библиотеку для работы с контактами ввода/вывода. Также мы импортируем эту библиотеку RPi.GPIO под именем “IO” (то есть переименовываем ее для использования в программе), то есть далее в программе всегда, когда мы захотим обратиться к контактам ввода/вывода, мы будем использовать слово ‘IO’.

Иногда контакты ввода/вывода (GPIO pins), которые мы собираемся использовать в программе, могут выполнять другие функции. В этом случае во время исполнения программы мы будем получать предупреждения (warnings). Следующей командой мы укажем плате Raspberry Pi на то, чтобы она игнорировала эти предупреждения и продолжала исполнение программы.

Мы можем обращаться к контактам ввода/вывода (GPIO pins) платы Raspberry Pi используя либо номер контакта на плате, либо его функциональный номер. Например, если смотреть распиновку контактов ввода/вывода платы Raspberry Pi, то можно увидеть, что в ней обозначение GPIO5 соответствует контакту PIN 29. То есть в зависимости от того, какой способ обращения к контактам мы выбрали, мы можем обращаться к рассмотренному контакту либо по номеру ‘29’, либо по номеру ‘5’. В данном проекте мы выберем способ обращения к контактам по их функциональным номерам, поэтому используем следующую команду:

Контакты платы Raspberry Pi, к которым подключен ЖК дисплей, инициализируем в качестве цифровых выходов – с них мы будем передавать данные ЖК дисплею и управлять режимами его работы.

Команду "while 1:" мы будем использовать для создания бесконечного цикла, внутри него все команды будут исполняться непрерывно.

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

В результате исполнения программы вы увидите как на экране ЖК дисплея отобразится строка “CIRCUITDIGEST”.

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

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

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

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