Библиотека LiquidCrystal I2C
Те же дисплеи 1602 и 2004, но через переходник I2C на PCF8574: два провода вместо шести.
Почти все дисплеи 1602 сейчас продаются с припаянным переходником, и подключаются они четырьмя проводами: питание, земля, SDA и SCL. Методы вывода те же, что у обычной LiquidCrystal, добавляется управление подсветкой и обязательная инициализация init().
Одноимённых библиотек в менеджере несколько, и у них разные конструкторы. Здесь описана самая распространённая — Frank de Brabander; если у вашей нет init(), это другая, и она ждёт begin().
Установка и подключение
В менеджере библиотек ищите LiquidCrystal I2C автора Frank de Brabander. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.
#include <LiquidCrystal_I2C.h>Создание объекта — обычно до setup():
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк
lcd.init(); // в setup()
lcd.backlight(); // иначе экран тёмныйМетоды
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.1.2.
init()- Инициализация дисплея. Без неё ничего не появится.
backlight() / noBacklight()- Включить или выключить подсветку.
print(...)- Вывести текст или число с позиции курсора, как у Serial.
setCursor(uint8_t col, uint8_t row)- Курсор в столбец и строку, счёт с нуля.
clear()- Очистить экран.
home()- Курсор в начало.
cursor() / noCursor(), blink() / noBlink()- Показ курсора и мигание.
display() / noDisplay()- Погасить и снова показать содержимое.
scrollDisplayLeft() / scrollDisplayRight()- Сдвиг содержимого на символ.
createChar(uint8_t n, uint8_t map[8])- Свой символ 5×8 под номером 0–7.
Пример
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // если пусто — попробуйте 0x3F
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
}
void loop() {
float t = 23.5 + (millis() % 1000) / 1000.0; // имитация датчика
lcd.setCursor(6, 0);
lcd.print(t, 1);
lcd.print(" C ");
delay(500);
}Адрес переходника — 0x27 или 0x3F, зависит от микросхемы. Если не уверены, сначала прогоните сканер из статьи про Wire.
На чём попадаются
Подсветка горит, текста нет
Либо неверный адрес (0x27 против 0x3F), либо контраст: на переходнике есть подстроечник, крутите его.
Ошибка компиляции: нет метода init()
Установлена другая библиотека с тем же именем. Удалите лишние в папке libraries и поставьте версию Frank de Brabander.
Работает на UNO, не работает на ESP32
Переходник рассчитан на 5 В; питайте его от 5V, а SDA и SCL к ESP32 обычно подключаются напрямую — но не всегда, иногда нужен преобразователь уровней.