Глиф Учебники

Как подключить дисплей LCD 1602 по I2C к Arduino

Справочник · Arduino · 2 минуты чтения

Дисплей 1602 (16 знаков, 2 строки) с припаянным переходником I2C подключается четырьмя проводами:

ДисплейArduino Uno / Nano
GNDGND
VCC5V
SDAA4
SCLA5

У Uno R3 есть ещё отдельные гнёзда SDA и SCL возле AREF — это те же линии, что A4 и A5.

Библиотека и скетч

Поставьте через менеджер библиотек библиотеку LiquidCrystal I2C (автор Frank de Brabander) — в поиске наберите LiquidCrystal I2C.

Arduino
#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:

Arduino
#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(…).

Подсветка горит, а текста нет

Чаще всего это контраст. На переходнике есть синий подстроечный резистор с винтом: поверните его отвёрткой, пока не проявятся буквы или ряд прямоугольников.

Русские буквы

Стандартный дисплей 1602 хранит в памяти латиницу, цифры и японскую азбуку — русских букв в нём нет, и строка "Привет" выведется непонятными знаками. Есть версии дисплея с кириллицей в памяти, а на обычном можно нарисовать до восьми своих символов функцией createChar.

Другие платы