Подключение дисплея WINSTAR WH1602A-YYK-CT к Arduino по I2C
Всем привет.
Не так давно решил немного поиграться с Arduino, т. к. опыт программирования и схемотехники имеется, особых проблем разобраться не составило. Ради спортивного интересе решил подключить ЖК-дисплей, который был куплен очень-очень давно. Все статьи в интернете говорят «просто подключите дисплей и подключите библиотеку». Однако, всё может быть не так просто.
Для подключения я решил использовать шину I2C. По идее, подключаться она должна легко и просто. Контакты переходника, соединяются с контактами дисплея и всё отлично работает. НО, всегда есть какое-нибудь НО.
Я столкнулся с 2-мя вопросами:
- Подключение модуля I2C.
- Некорректная работа библиотек по работе с дисплеем.
И так, по первому вопросу возникла сложность при подключении модуля I2C, т. к. предполагается, что на плате дисплея контакты идут от 1 до 16, где 15 и 16 контакты отвечают за подсветку дисплея. Однако на моём дисплее контакты расположены в последовательности: 15, 16, 1 ... 14. На плате переходника I2C контакты расположены от 1 до 16. Первый контакт переходника отмечен квадратиков вокруг контактной площадки.
Для подключения дисплея пришлось сдвинуть контакты переходника на 2 контакта, а 15 и 16 контакты подключить проводами к соответствующим контактам переходника. Т. е. 15 и 16 выводы переходника соединяем с соответствующими контактами дисплейного модуля.
Можно не подключать контакты 15 и 16, нов таком случае не будет работать подсветка дисплея. Как вариант, можно подать напряжение непосредственно на 15 и 16 контакты дисплея (соблюдайте полярность), но в таком случае вы не сможете управлять подсветкой дисплея программно из Arduino.
После подключения дисплея и подачи питания, проверьте контрастность дисплея, если буквы слишком яркие или наоборот плохо читаемые, то необходимо отрегулировать из отображение подстроечным резистором на плате переходника I2C. Саму схему подключения переходника I2C к Arduino я описывать не буду, так как её легко найти в интернете.
Для работы с дисплеями во всех статьях предлагается использовать библиотеку LiquidCrystal и аналогичные для работе по шине I2C, однако они не поддерживают языки кроме английского без использования костылей и библиотеки давно не обновлялись. Для работы с дисплеем я использовал библиотеку LCDI2C_Multilingual. Пример использования:
#include <LCDI2C_Multilingual.h>
LCDI2C_Russian lcd(0x27, 16, 2); // I2C адрес: 0x27; Размер дисплея: 16x2
void setup() {
lcd.init();
lcd.backlight();
lcd.println("Расцветали яблони и груши, Поплыли туманы над рекой.\
Выходила на берег Катюша, На высокий берег на крутой.\
Выходила, песню заводила, Про степного, сизого орла,\
Про того, которого любила, Про того, чьи письма берегла.\
Ой ты, песня, песенка девичья, Ты лети за ясным солнцем вслед.\
И бойцу на дальнем пограничье, От Катюши передай привет.\
Пусть он вспомнит девушку простую, Пусть услышит, как она поет,\
Пусть он землю бережет родную, А любовь Катюша сбережет.", 4); // подождать 4 секунды между переключением экранов;
}
void loop() {
// put your main code here, to run repeatedly:
}В целом, всё отлично работает без каких-либо костылей. Более подробную информацию по работе с модулем можно посмотреть на странице библиотеки на Github, а так же ознакомится с примерами работы с дисплеями.
Всем удачи!