Подключение к Raspberry Pi Zero W ЖК дисплея с интерфейсом I2C и клавиатуры 4x4


Плата Raspberry Pi Zero W является новой усовершенствованной платой семейства Raspberry Pi Zero. Ранее на нашем сайте мы уже рассмотрели первоначальную настройку данной платы, мигание светодиодом с ее помощью и подключение к ней TFT ЖК дисплея с диагональю 3,5 дюйма. В этой же статье мы рассмотрим подключение к плате Raspberry Pi Zero W ЖК дисплея 16x2 с интерфейсом I2C и клавиатуры (клавишной панели) 4x4. Мы будем выводить на экран ЖК дисплея символы, печатаемые на клавиатуре 4x4.

Внешний вид подключения к Raspberry Pi Zero W ЖК дисплея с интерфейсом I2C и клавиатуры 4x4

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

  1. Плата Raspberry Pi Zero W (купить на AliExpress).
  2. ЖК дисплей 16x2 с интерфейсом I2C (купить на AliExpress).
  3. Клавиатура (клавишная панель) 4x4 (купить на AliExpress).
  4. Соединительные провода.

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

Схема подключения к плате Raspberry Pi Zero W ЖК дисплея с интерфейсом I2C и клавиатуры 4x4 представлена на следующем рисунке.

Схема подключения к плате Raspberry Pi Zero W ЖК дисплея с интерфейсом I2C и клавиатуры 4x4

Используемая в нашем проекте клавиатура 4x4 имеет 4 столбца и 4 строки кнопок. Контакты в подобной клавиатуре могут быть подключены к любым цифровым контактам общего назначения платы Raspberry Pi Zero W, в нашем случае контакты строк (ROWS) клавиатуры мы подключили к контактам 5, 16, 20, 21 платы, а контакты столбцов (COLUMNS) клавиатуры – к контактам 6, 13, 19, 26 платы. Внешний вид клавиатуры 4x4 показан на следующем рисунке.

Внешний вид клавиатуры 4x4

При нажатии произвольной кнопки на клавиатуре, относящейся к конкретной строке, на контакт которой подано напряжение высокого уровня, на контакте столбца клавиатуры, к которому относится данная кнопка, также появляется напряжение высокого уровня. Поскольку клавиатура не требует подачи на нее напряжения питания ее можно подключить к любым 8 цифровым контактам общего назначения платы Raspberry Pi Zero W.

Если вы хотите более подробно разобраться с технологией мультиплексирования, используемой в подобной клавиатуре для идентификации нажатия клавиш, то вы это можете прочитать в статье про подключение клавиатуры 4x4 к микроконтроллеру AVR, также на нашем сайте рассматривалось подключение подобной клавиатуры к плате Arduino.

ЖК дисплей 16x2 в настоящее время является одним из самых распространённых типов дисплеев, используемых в современной электронике. Обычный модуль подобного дисплея имеет 16 контактов и может подключаться к современным микроконтроллерам (микроконтроллерным платам) либо по 8-битной схеме, либо по 4-битной. Однако для сокращения числа используемых контактов микроконтроллера (платы) подобный ЖК дисплей 16x2 часто дополняют модулем интерфейса I2C и тогда его можно подключать к микроконтроллерам (платам) используя всего 2 контакта интерфейса I2C (ну и +2 контакта для подачи питания, разумеется). Внешний вид ЖК дисплея 16x2 с интерфейсом I2C показан на следующих рисунках.

Внешний вид ЖК дисплея 16x2 с интерфейсом I2C

Таким образом, модуль интерфейса I2C, припаянный к тыльной стороне ЖК дисплея, преобразует последовательный поток данных с интерфейса I2C в параллельный 8-битовый поток данных, и обратно. По умолчанию, I2C адрес данного модуля равен 0x27. Контакт земли (ground terminal) ЖК дисплея подключен к контакту земли платы Raspberry Pi Zero W, а контакт Vcc подключен к контакту 5V платы (красный провод). Контакты данных интерфейса I2C SDA и SCL подключены к контактам 3 и 5 платы.

Внешний вид собранной схемы проекта показан на следующем рисунке.

Внешний вид собранной схемы проекта

Настройка платы Raspberry Pi Zero W для работы с ЖК дисплеем с интерфейсом I2C и клавиатурой 4x4

После сборки схемы проекта и подачи питания на плату Raspberry Pi Zero W откройте окно терминала платы. В данном проекте для удаленного управления платой по протоколу SSH мы будем использовать программу MobaXterm, но вы можете использовать программу putty или любую другую аналогичную программу, с которой вы привыкли работать.

Для начала нам необходимо включить использование (enable) интерфейса I2C в плате Raspberry Pi Zero W. Для входа в меню настроек платы введите в окне терминала команду sudo raspi-config. Далее в меню настроек выберите настройки подключения (‘Interface options’), а в них выберите настройки интерфейса I2C (‘I2C option’). Затем нажмите кнопку yes для включения использования интерфейса I2C в плате.

Вход в настройки подключения в плате Raspberry Pi Zero W

Вход в настройки интерфейса I2C в плате Raspberry Pi Zero W

Включение использования интерфейса I2C в плате Raspberry Pi Zero W

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

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

Прежде чем переходить к программированию платы для данного проекта нам необходимо установить на плату библиотеку для работы с ЖК дисплеем по интерфейсу I2C. Для установки данной библиотеки мы создадим файл используя команду nano RPi_I2C_driver.py, затем вставим в этот файл код библиотеки, который можно скачать по этой ссылке, после этого сохраним файл. После этого запустим код программы на выполнение с помощью команды python RPi_I2C_driver.py. После этого можно приступать к написанию кода для данного проекта.

В нашем проекте мы будем использовать библиотеку RPi_I2C_driver для установления связи с ЖК дисплеем по интерфейсу I2C. Библиотека RPi.GPIO будет использоваться для работы с контактами GPIO платы Raspberry Pi zero W. Библиотека time будет использоваться для организации временных задержек в программе.

Команда RPi_I2C_driver.lcd() будет использоваться для создания объекта "mylcd", с помощью которого мы и будем работать с ЖК дисплеем, использую функции библиотеки RPi_I2C_driver. Функция mylcd.backlight(1) будет использоваться для включения фоновой подсветки ЖК дисплея. Чтобы отключить использование фоновой подсветки ЖК дисплея эту функцию следует вызывать с параметром "0" вместо "1". Для очистки экрана ЖК дисплея мы будем использовать функцию mylcd.lcd_clear(). Функция time.sleep() будет использоваться для формирования задержки в программе, время задержки в данной функции указывается в секундах.

Функция GPIO.setwarnings(False) используется для отключения любых предупреждений во время работы с программой. Функция GPIO.setmode(GPIO.BCM) устанавливает режим работы с контактами по их функциональным (логическим) номерам. Если вы хотите использовать не логические, а физические номера контактов на плате, то тогда вам вместо параметра "GPIO.BCM" в этой функции необходимо указать параметр "GPIO.BOARD". Функция GPIO.setup() используется для инициализации контакта GPIO при помощи указания параметра GPIO.OUT (контакт будет использоваться в качестве цифрового выхода) или GPIO.IN (контакт будет использоваться в качестве цифрового входа).

Функция readLine() используется для считывания контактов GPIO, которые подключены к столбцам клавиатуры. Эта функция содержит два параметра – "line" и "characters". В результате выполнения данной функции мы считываем информацию с каждого столбца клавиатуры (KeyPad) и если на каком-нибудь контакте мы обнаруживаем сигнал высокого уровня, мы отображаем на экране дисплея соответствующий символ, который мы получаем из списка "characters". В цикле while мы осуществляем поочередный опрос всех строк клавиатуры с помощью функций readLine() и отображаем нажатый символ на экране ЖК дисплея.

Мы сохраним нашу программу в файл с именем example.py, но вы можете использовать любое другое имя файла по своему усмотрению.

На этом подключение ЖК дисплея с интерфейсом I2C и клавиатуры 4x4 к плате Raspberry Pi Zero W будет завершено. На следующем рисунке показан пример работы нашего проекта.

Тестирование работы проекта

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

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

Источник статьи

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

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

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