Как подключить дисплей LCD 1602 по I2C к Arduino
Дисплей 1602 (16 знаков, 2 строки) с припаянным переходником I2C подключается четырьмя проводами:
| Дисплей | Arduino Uno / Nano |
|---|---|
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
У Uno R3 есть ещё отдельные гнёзда SDA и SCL возле AREF — это те же линии, что A4 и A5.
Библиотека и скетч
Поставьте через менеджер библиотек библиотеку LiquidCrystal I2C (автор Frank de Brabander) — в поиске наберите LiquidCrystal I2C.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, знаков в строке, строк
void setup() {
lcd.init(); // запустить дисплей
lcd.backlight(); // включить подсветку
lcd.setCursor(0, 0); // столбец 0, строка 0
lcd.print("Hello, Arduino!");
lcd.setCursor(0, 1); // вторая строка
lcd.print("Uptime:");
}
void loop() {
lcd.setCursor(8, 1);
lcd.print(millis() / 1000); // секунды с запуска
lcd.print(" s");
delay(500);
}setCursor(столбец, строка) считает с нуля: (0, 0) — левый верхний угол, (0, 1) — начало второй строки. lcd.clear() очищает экран, но частый clear() вызывает мерцание — лучше перезаписывать нужное место.
Адрес: 0x27 или 0x3F
На переходнике стоит микросхема PCF8574 или PCF8574A, и адрес у дисплея чаще всего 0x27 или 0x3F. Если дисплей не отвечает, узнайте адрес сканером — скетч перебирает все адреса шины I2C:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Поиск устройств I2C...");
int found = 0;
for (byte address = 1; address < 127; address++) {
Wire.beginTransmission(address);
if (Wire.endTransmission() == 0) { // устройство ответило
Serial.print("Найдено: 0x");
if (address < 16) Serial.print("0");
Serial.println(address, HEX);
found++;
}
}
if (found == 0) Serial.println("Ничего не найдено — проверьте провода");
}
void loop() {
}Откройте монитор порта на скорости 9600 и подставьте найденный адрес в строку LiquidCrystal_I2C lcd(…).
Подсветка горит, а текста нет
Чаще всего это контраст. На переходнике есть синий подстроечный резистор с винтом: поверните его отвёрткой, пока не проявятся буквы или ряд прямоугольников.
- Ряд залитых прямоугольников в верхней строке — дисплей включён, но не получает команд: неверный адрес, перепутаны
SDAиSCLили забытlcd.init(). - Совсем пусто, подсветки нет — нет питания или забыт
lcd.backlight(); на некоторых переходниках подсветку включает перемычка на плате. - Сканер ничего не нашёл — проверьте провода и что
SDAидёт наA4, аSCLнаA5. - Остатки старого текста —
printне стирает то, что было на экране. Допишите пробелы после короткого числа или очистите строку.
Русские буквы
Стандартный дисплей 1602 хранит в памяти латиницу, цифры и японскую азбуку — русских букв в нём нет, и строка "Привет" выведется непонятными знаками. Есть версии дисплея с кириллицей в памяти, а на обычном можно нарисовать до восьми своих символов функцией createChar.
Другие платы
- Дисплей 2004 (20 знаков, 4 строки) подключается так же, в скетче —
LiquidCrystal_I2C lcd(0x27, 20, 4);. - Arduino Mega:
SDA— вывод 20,SCL— вывод 21. - Эта библиотека рассчитана на платы с микроконтроллерами AVR (Uno R3, Nano, Mega). Для Uno R4 и плат на ESP32 ищите в менеджере библиотек версию, где в описании указана ваша плата.