ELECTRONICS

Библиотека LiquidCrystal I2C

менеджер: LiquidCrystal I2CFrank de Brabanderверсия 1.1.2

Те же дисплеи 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 обычно подключаются напрямую — но не всегда, иногда нужен преобразователь уровней.

Где используется на сайте

Что дальше