Рубрики
Проекты на Raspberry Pi

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

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

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

Схема расположения контактов ввода/вывода (GPIO) на плате Raspberry Pi 2 показана на следующем рисунке. Более подробно об этих контактах вы можете прочитать в статье про мигание светодиода с помощью 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. ЖК дисплей 16×2 (купить на AliExpress).
  3. Резистор 1 кОм – 2 шт. (купить на AliExpress).
  4. Потенциометр 10 кОм (купить на AliExpress).
  5. Конденсатор 1000 мкФ (купить на AliExpress).
  6. Макетная плата.
  7. Соединительные провода.

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

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

Как показано на схеме, мы подключили ЖК дисплей 16×2 к 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).

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

Общие принципы передачи данных с 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”.

Объяснение программы для 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”.

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

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

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