Дисплей 1602 I2C с русскими буквами

Жидкокристаллический дисплей (LCD) 1602 и его старший брат 2004 встречаются в двух исполнениях: с параллельным интерфейсом и с поддержкой шины I2C. В первом случае, для подключения к контроллеру требуется задействовать целых шесть контактов, что часто заставляет нас грустить. Модуль дисплея приходится ставить на макетную плату, подключать в цепь внешний потенциометр контраста и связывать всё это кучей проводов.

Другое дело дисплеи с I2C шиной. Универсальный интерфейс, который позволяет на двухконтактную шину «навесить» множество разных устройств. Тех же ЖК дисплеев можно подключить целых 8 штук (если I2C модуль имеет перемычки для выставления адреса).

На этом уроке мы будем разбираться с I2C версией русифицированного жидкокристаллического модуля 1602. О работы с данным дисплеем без I2C мы уже рассказывали в одном из уроков ранее (дисплей 1602 с русскими буквами).

Список необходимых компонентов

Для выполнения простого примера, кроме самого дисплея, потребуется I2C модуль, Arduino-совместимый контроллер с напряжением логики 5В и немного проводов. Если вам не хватает чего-то из этого, можно добавить необходимые компоненты в корзину прямо здесь и затем оформить заказ в нашем интернет-магазине.

В корзину
В корзину
В корзину
В корзину

Подключение

Для начала, нам потребуется убедиться, что на нашем дисплее установлен тот самый I2C модуль. Как правило, это такая чёрная плата с микросхемой, 16 контактами для подключения дисплея и 4 контактами, собственно, для работы I2C.

Дисплей 1602 с I2C, кириллица

Микросхема, которая находится на чёрной плате — это ни что иное, как расширитель GPIO с I2C интерфейсом. Про полезный модуль с аналогичной микросхемой мы уже рассказывали ранее (расширитель GPIO от RobotClass).

Подключаем его к Arduino или к иному контроллеру по стандартной схеме:

Arduino+5VGNDA4A5
LCDVCCGNDSDASCL

Также на I2C модуле есть три перемычки для смены адреса. По-умолчанию, когда все перемычки разомкнуты, адрес устройства — 0x27. Другие комбинации можно посмотреть в таблице:

ПеремычкиАдрес
0x27
A00x26
A10x25
A0,A10x24
A20x23
A0,A20x22
A1,A20x21
A0,A1,A20x20

Программа

В каждом подобном дисплее имеется немного встроенной постоянной памяти, в которой хранятся образы всех доступных символов. Именно из-за этой таблицы символов и возникает проблема с выводом кириллицы на большинстве нелокализованных дисплеев (купленных на Aliexpress или ещё где-то). То есть, символов кириллицы там просто нет.

Но мы будем работать с модулем 1602, в котором есть полноценная локализованная таблица. Только вот она совсем не стандартная. Не получится просто написать текст в кодировке cp1251 и отправить его на дисплей. Потребуется определённым образом перетасовать символы. К тому же, некоторые русские буквы можно взять из латинской части таблицы ASCII, чем пользуются производители дисплеев для экономии памяти.

Для работы с русифицированными дисплеями версии I2C потребуется установить две библиотеки. Первая — это LiquidCrystal_I2C, которую можно установить из репозитория Arduino IDE.

Вторая — это разработанная нами вспомогательная библиотека RobotClass_LiquidCrystal_I2C. Именно она делает все необходимые манипуляции с таблицей символов. Пользоваться ей так же просто, как и оригинальной LiquidCrystal_I2C.

Напишем программу, которая будет сначала выводить заглавными и прописными буквами первую половину алфавита, а спустя секунду, вторую половину.

#include <RobotClass_LiquidCrystal_I2C.h>

RobotClass_LiquidCrystal_I2C lcd(0x27, 16, 2, CP_UTF8);

byte idx = 0;

void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  lcd.setCursor(0,0);
  lcd.print( "АБВГДЕЁЖЗИКЛМНОП" );
  lcd.setCursor(0,1);
  lcd.print( "абвгдеёжзиклмноп" );
  delay(1000);

  lcd.setCursor(0,0);
  lcd.print( "РСТУФХЦЧШЩЪЫЬЭЮЯ" );
  lcd.setCursor(0,1);
  lcd.print( "рстуфхцчшщъыьэюя" );
  delay(1000);
}

Единственной отличие от обычной библиотеки LiquidCrystal_I2C наблюдается в строке инициализации:

RobotClass_LiquidCrystal_I2C lcd(0x27, 16, 2, CP_UTF8);

Последний аргумент CP_UTF8 означает, что мы передаём в функцию print текст в кодировке UTF-8. Это стандартная кодировка для Arduino IDE. Однако, если пользователь изменил кодировку среды на cp1251, то нужно будет заменить этот аргумент на CP_CP1251. Такие дела.

Остался ещё один момент, который может препятствовать нашей радости от работающего дисплея. После загрузки программы на Arduino необходимо настроить контрастность. Для этого покрутим ручку потенциометра, расположенную на I2C модуле, до тех пор, пока изображение на дисплее не станет чётким.

Дисплей 1602 с I2C, кириллица

Загружаем программу на контроллер и наблюдаем русский алфавит. Теперь ваше устройство сможет общаться с пользователем на чистом русском!


Изменено:

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

Ваш адрес email не будет опубликован.