Зачем нужна библиотека LiquidCrystal I2C
Стандартные символьные дисплеи на базе микросхем HD44780 (например, LCD1602) требуют для подключения к Arduino не менее шести цифровых выводов. Это создаёт неудобства в проектах, где количество свободных пинов ограничено. Библиотека LiquidCrystal I2C решает эту проблему, позволяя управлять дисплеем всего по двум сигнальным проводам — SDA и SCL шины I2C. Для этого используется дополнительный модуль на микросхеме PCF8574, который преобразует параллельный интерфейс дисплея в последовательный I2C.
Без библиотеки для вывода текста на дисплей пришлось бы вручную передавать байты команд и данных, знать архитектуру памяти контроллера дисплея и читать его datasheet. С библиотекой достаточно вызвать одну функцию lcd.print("my text"). Это значительно ускоряет разработку и делает код более читаемым.
Где скачать библиотеку LiquidCrystal I2C
Существует несколько вариантов библиотеки LiquidCrystal I2C. Наиболее популярная и поддерживаемая версия размещена на GitHub по адресу: https://github.com/troublegum/liquidcrystal_i2c. Этот репозиторий содержит актуальный код, примеры и документацию.
Также библиотеку можно найти через встроенный менеджер библиотек Arduino IDE. Для этого откройте меню "Скетч" → "Подключить библиотеку" → "Управлять библиотеками...", в строке поиска введите "LiquidCrystal I2C" и выберите подходящую версию. Установка через менеджер — самый простой и рекомендуемый способ, так как он автоматически разрешает зависимости (например, библиотеку Wire).
Если вы используете альтернативные источники, убедитесь, что скачиваете ZIP-архив, а не отдельные файлы. Название архива может не совпадать с именем библиотеки, но внутри должна быть папка с правильным именем (например, LiquidCrystal_I2C).
Установка библиотеки через менеджер библиотек Arduino IDE
Этот метод подходит для большинства пользователей и не требует ручного копирования файлов.
- Откройте Arduino IDE.
- Перейдите в меню "Скетч" → "Подключить библиотеку" → "Управлять библиотеками...".
- В открывшемся окне "Менеджер библиотек" введите в строку поиска "LiquidCrystal I2C".
- В результатах поиска выберите нужную библиотеку (обычно она называется "LiquidCrystal I2C" от автора "Marco Schwartz" или "Frank de Brabander").
- Нажмите кнопку "Установка". После завершения установки библиотека будет готова к использованию.
Преимущество этого способа — автоматическое обновление библиотеки при выходе новых версий и отсутствие необходимости вручную искать папку libraries.
Установка библиотеки вручную из ZIP-архива
Если библиотека отсутствует в менеджере или вы скачали архив с GitHub, можно установить её вручную.
Способ 1: через Arduino IDE
- Выберите меню "Скетч" → "Подключить библиотеку" → "Добавить .ZIP библиотеку...".
- В появившемся окне найдите и выберите скачанный ZIP-файл. Arduino IDE сама распакует архив и поместит библиотеку в нужную папку.
Способ 2: вручную
- Распакуйте ZIP-архив. Внутри должна быть папка с именем библиотеки (например,
LiquidCrystal_I2C). - Скопируйте эту папку в папку
libraries, которая находится в директории ваших скетчей Arduino. Обычно этоC:\Users\Имя_пользователя\Documents\Arduino\libraries(Windows) или~/Arduino/libraries(Linux/macOS). - Если Arduino IDE была открыта во время копирования, закройте и снова откройте её, чтобы библиотека стала доступна.
Важно: не копируйте библиотеку в папку libraries внутри установочной директории Arduino IDE. При обновлении IDE эти библиотеки будут потеряны. Пользовательская папка libraries сохраняется при переустановке.
Подключение библиотеки в скетче
После установки библиотеку нужно подключить в начале скетча с помощью директивы #include. Для LiquidCrystal I2C также требуется библиотека Wire, обеспечивающая работу с шиной I2C.
Пример правильного подключения:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>Порядок важен: сначала подключается Wire, затем LiquidCrystal_I2C, так как вторая использует функции первой.
Далее необходимо создать объект библиотеки, указав I2C-адрес дисплея, количество символов в строке и количество строк. Например:
LiquidCrystal_I2C lcd(0x27, 16, 2);Здесь 0x27 — типичный адрес модуля PCF8574 (может быть 0x3F для некоторых моделей), 16 — ширина дисплея в символах, 2 — количество строк. Имя объекта (lcd) может быть любым, например myLCD.
Основные функции библиотеки LiquidCrystal I2C
Библиотека предоставляет полный набор функций для управления дисплеем. Их можно разделить на несколько групп.
Системные функции:
LiquidCrystal_I2C(address, cols, rows)— конструктор, создаёт объект с указанным I2C-адресом и размерами дисплея.begin()— инициализация дисплея, должна вызываться вsetup().init()— альтернативный вариант инициализации (используется в некоторых версиях библиотеки).display()/noDisplay()— включение/выключение дисплея без потери данных.backlight()/noBacklight()— управление подсветкой.
Функции работы с текстом и курсором:
clear()— очистка экрана и возврат курсора в начало.home()— возврат курсора в начало без очистки.setCursor(col, row)— установка курсора в указанную позицию (нумерация с 0).print(text)— вывод текста или числа на дисплей.write(byte)— вывод одного символа по его коду.cursor()/noCursor()— показать/скрыть подчёркивание курсора.blink()/noBlink()— включить/выключить мигание курсора.
Функции прокрутки и направления текста:
scrollDisplayLeft()/scrollDisplayRight()— сдвиг содержимого на один символ.autoscroll()/noAutoscroll()— автоматический сдвиг при выводе нового текста.leftToRight()/rightToLeft()— задаёт направление вывода текста.
Пользовательские символы:
createChar(num, data)— создаёт пользовательский символ (0-7) из массива байт. Позволяет выводить нестандартные значки, например, стрелки или смайлики.
Пример простого скетча для вывода текста
Рассмотрим базовый пример, который выводит на дисплей строку "HELLO WORLD!" и включает подсветку.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Адрес 0x27, дисплей 16 символов, 2 строки
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // Инициализация дисплея
lcd.backlight(); // Включение подсветки
lcd.print("HELLO WORLD!");
}
void loop() {
// Пустой цикл
}Если после загрузки скетча дисплей не показывает текст, проверьте:
- Правильно ли подключены провода (GND → GND, VCC → 5V, SDA → A4 на Arduino Uno, SCL → A5).
- Соответствует ли I2C-адрес (0x27 или 0x3F). Его можно определить с помощью скетча-сканера I2C.
- Установлена ли библиотека Wire (она входит в стандартный набор Arduino IDE).
Для дисплея 20x4 измените параметры конструктора: LiquidCrystal_I2C lcd(0x27, 20, 4);.
Создание пользовательских символов
Библиотека позволяет создавать до восьми пользовательских символов размером 5x8 пикселей. Это полезно для вывода значков, которых нет в стандартной таблице символов дисплея.
Символ задаётся массивом из 8 байт, где каждый байт соответствует одной строке пикселей (младшие 5 бит). Например, для создания простого смайлика:
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
B00000
};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(0, smiley); // Создаём символ с номером 0
lcd.setCursor(0, 0);
lcd.write(byte(0)); // Выводим созданный символ
}Номер символа (0-7) используется для обращения к нему через write(). После создания символ сохраняется в памяти дисплея до выключения питания.
Поиск и устранение неисправностей
Наиболее частые проблемы при работе с LiquidCrystal I2C и способы их решения:
Дисплей не загорается или не показывает текст
- Проверьте питание: модуль должен получать 5V.
- Убедитесь, что провода SDA и SCL подключены к правильным пинам (A4 и A5 для Arduino Uno, для других плат уточните в документации).
- Проверьте I2C-адрес. Напишите простой скетч-сканер, который выводит все обнаруженные адреса в Serial Monitor. Типичные адреса: 0x27, 0x3F, 0x20.
- Попробуйте подтянуть линии SDA и SCL резисторами 4.7 кОм к питанию, если они отсутствуют на модуле.
Текст отображается иероглифами или квадратами
- Неправильно заданы размеры дисплея в конструкторе. Убедитесь, что cols и rows соответствуют вашему дисплею.
- Контрастность настроена неверно. На модуле I2C обычно есть потенциометр для регулировки контраста — поверните его отвёрткой.
Библиотека не найдена при компиляции
- Проверьте, что библиотека установлена в правильную папку
libraries(в документах пользователя, а не в папке программы). - Перезапустите Arduino IDE после установки.
- Убедитесь, что в скетче написано
#include <LiquidCrystal_I2C.h>без опечаток.
Вопросы и ответы
Какой I2C-адрес у модуля LCD1602 с PCF8574?
Наиболее распространённые адреса: 0x27 и 0x3F. Точный адрес зависит от производителя модуля. Чтобы его определить, загрузите на Arduino скетч-сканер I2C (например, из примеров библиотеки Wire) и посмотрите вывод в Serial Monitor.
Можно ли использовать библиотеку LiquidCrystal I2C с дисплеем 20x4?
Да. При создании объекта укажите правильные размеры: LiquidCrystal_I2C lcd(0x27, 20, 4);. Остальные функции работают аналогично. Убедитесь, что ваш модуль I2C поддерживает 20x4 дисплей.
Что делать, если после установки библиотеки компилятор выдаёт ошибку "LiquidCrystal_I2C.h: No such file or directory"?
Проверьте, что библиотека установлена в папку libraries внутри директории ваших скетчей (обычно Документы/Arduino/libraries). Перезапустите Arduino IDE. Если ошибка остаётся, удалите библиотеку и установите её заново через менеджер библиотек.
Как изменить контрастность дисплея, подключённого через I2C?
На модуле I2C (плата с микросхемой PCF8574) обычно есть небольшой потенциометр (синего цвета). Вращая его отвёрткой, вы регулируете контрастность. Делайте это при включённом дисплее, чтобы видеть изменения.
Зачем в скетче нужно подключать библиотеку Wire, если я использую LiquidCrystal I2C?
Библиотека LiquidCrystal I2C использует функции библиотеки Wire для обмена данными по шине I2C. Без Wire компилятор выдаст ошибку. Подключайте Wire перед LiquidCrystal I2C: #include <Wire.h>.
Можно ли вывести на дисплей русские буквы?
Стандартный знакогенератор HD44780 не содержит кириллицы. Для вывода русских букв необходимо создать пользовательские символы с помощью функции createChar(). Вы можете определить до 8 символов, что достаточно для ограниченного набора букв.
Как проверить, работает ли дисплей без написания сложного скетча?
Загрузите пример из библиотеки: в Arduino IDE выберите "Файл" → "Примеры" → "LiquidCrystal I2C" → "HelloWorld". Если дисплей подключён правильно, на нём отобразится тестовый текст. При необходимости подстройте контрастность и проверьте I2C-адрес.