Подключение символьного дисплея LCD1602 IIC/I2C к плате Arduino

Рассмотрим пример подключения и управления символьным дисплеем LCD1602 IIC/I2C с помощью плат Arduino. На сегодняшний день это один из самых распространенных и недорогих дисплеев, на экран которого, можно например, выводить информацию, получаемую от различных датчиков или просто делать вывод каких-то сообщений характеризующих ход выполнения вашей программы. В принципе на экран можно вывести что угодно в пределах вашей фантазии и 32 символов, из которых состоит символьный дисплей LCD1602 IIC/I2C.

Символьный дисплей LCD1602 IIC/I2C

Данный экран оснащен дополнительной платой IIC/I2C интерфейса (последовательный интерфейс), позволяющей работать с микроконтроллерами с помощью всего двух проводов (без учета проводов питания). О наличии последовательного интерфейса в данном экране нам говорят символы IIC/I2C в его названии, а сама плата последовательного интерфейса с обратной стороны экрана выглядит следующим образом.

 Символьный дисплей LCD1602 IIC/I2C - обратная сторона

На плате IIC/I2C интерфейса мы видим установленный потенциометр для настройки контрастности экрана. После подключения дисплея просто подкрутите его отверткой, чтобы появилось изображение на экране. Джампер подсветки экрана позволяет во время работы отключить вручную подсветку дисплея.

Подключим дисплей к плате Arduino Mega 2560.

Подключение символьного дисплея LCD1602 IIC/I2C к плате Arduino Mega 2560

Все довольно просто. Сначала подключаем питание. Пин GND дисплея соединяем с пином GND платы Ардуино. Пин VCC дисплея соединяем с пином 5V платы Ардуино. После чего подключаем провода управляющие дисплеем. Пин SDA дисплея соединяем с пином 20 SDA платы Arduino Mega 2560. Пин SCL дисплея соединяем с пином 21 SCL платы Arduino Mega 2560. Все пины на IIC/I2C интерфейсе и на плате Arduino Mega 2560 подписаны соответствующим образом, поэтому проблем с подключением на этом этапе не должно возникать.

*Если вы используете плату Arduino UNO, подключайте пин SDA дисплея к пину A4 платы Arduino UNO, а пин SCL дисплея подключайте к пину A5 платы Arduino UNO.

Для работы с дисплеем LCD1602 IIC/I2C необходимо скачать и установить библиотеку LiquidCrystal_I2C. Напишем теперь минимально необходимый скетч для запуска дисплея.

#include <Wire.h> // подключаем штатную библиотеку позволяющую взаимодействовать с I2C/TWI-устройствами
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с дисплеем
 
LiquidCrystal_I2C lcd(0x3F,16,2); // устанавливаем адрес 0x27 или 0x3F, и дисплей 16 символов в 2 строки (16х2)
 
void setup() // НАСТРОЙКИ
{
  lcd.init(); // инициализация LCD 
  lcd.backlight(); // включаем подсветку
}
 
void loop() // ОСНОВНОЙ ЦИКЛ
{
  lcd.setCursor(3, 0); // устанавливаем курсор на 1 строку, 7 символ
  lcd.print("VoltOM.RU"); // вывод надписи
}

Минимальный скетч который выводит в середине верхней строки символы VoltOM.RU. Все очень просто. Когда вам необходимо будет выводить показания датчиков на дисплей, просто в строке lcd.print("VoltOM.RU"); подставляете вместо "VoltOM.RU" имя переменной, которой будут передаваться показания датчика. Когда вы разберетесь с показаниями каких-либо датчиков, особых вопросов как их вывести на экран дисплея у вас не должно возникнуть. А сейчас давайте немного закрепим тему и добавим несколько строк в наш скетч, чтобы под надписью VoltOM.RU сделать секундомер.

#include <Wire.h> // подключаем штатную библиотеку позволяющую взаимодействовать с I2C/TWI-устройствами
#include <LiquidCrystal_I2C.h> // Подключаем библиотеку для работы с дисплеем
 
LiquidCrystal_I2C lcd(0x3F,16,2); // устанавливаем адрес 0x27 или 0x3F, и дисплей 16 символов в 2 строки (16х2)
 
int interval = 0; // создаем переменную, которая будет выступать в роли счетчика
 
void setup() // НАСТРОЙКИ
{
  lcd.init(); // инициализация LCD 
  lcd.backlight(); // включаем подсветку
  lcd.clear(); // очистка дисплея
  lcd.setCursor(3, 0); // устанавливаем курсор на 1 строку, 3 символ
  lcd.print("VoltOM.RU"); // вывод надписи
}
 
void loop() // ОСНОВНОЙ ПОВТОРЯЮЩИЙСЯ ЦИКЛ
{
  delay(1000); // пауза 1 секунда
  interval++; // увеличиваем значение переменной interval на 1
  lcd.setCursor(7, 1); // устанавливаем курсор на 2 строку, 7 символ
  lcd.print(interval); // выводим на экран значение переменной interval
}

Заливаем скетч и видим как под надписью VoltOM.RU на экране дисплея тикает секундомер.

Вроде все минимально необходимое для начала работы с дисплеем LCD1602 IIC/I2C мы разобрали. Стоит обратить ещё внимание на возможные проблемы, которые могут возникнуть у вас при первом знакомстве с этими дисплеями.

 

Возможные проблемы при подключении дисплея LCD1602 IIC/I2C:

1. Если вы заливаете скетч и ничего не видите на экране - покрутите потенциометр с обратной стороны дисплея, чтобы настроить контрастность. Делайте это действие постоянно после каждого подключения дисплея, пока не найдете точную причину почему не работает экран.

2. Дисплеи очень чувствительны к контактам. При подключении дисплея с помощью беспаечных проводов для макетирования есть большая вероятность столкнуться с ситуацией, когда покажется, что экран не работает. Попробуйте после заливки скетча пошевелить провода, немного натянуть их в сторону и не забывайте покрутить потенциометр для проверки контрастности. Если во время подобных манипуляций вы будет наблюдать мигание экрана или временное появление каких-то непонятных символов, значит все дело в плохом контакте пинов дисплея с вашими проводами. Попробуйте в таком случае немного натянуть под небольшим усилием в какую-нибудь сторону провода и зафиксировать их, или засунуть, например кусочек поролона под провода в месте их подключения к контактам дисплея, тем самым мы прижмем одну из сторон контактов беспаечных проводов к контактам дисплея и временно решим эту проблему. Не забывайте опять покрутить потенциометр, а то может все заработать, и банально из-за неправильной контрастности вы ничего не увидите.

3. Обратите внимание на строку LiquidCrystal_I2C lcd(0x3F,16,2); в начале кода. I2C интерфейсы у разных дисплеев могут иметь разные адреса. Возможно, в вашем дисплее будет адрес 0x27, тогда строка будет выглядеть так: LiquidCrystal_I2C lcd(0x27,16,2);, то есть просто меняете 0x3F на 0x27. Если ни один из этих адресов не подошел, необходимо будет запустить сканер I2C интерфейса с помощью следующего скетча.

#include <Wire.h>
 
void setup()
 {
   Wire.begin();
 
  Serial.begin(9600);
   Serial.println("\nI2C Scanner");
 }
 
void loop()
 {
   byte error, address;
   int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
   for(address = 0; address <= 127; address++ )
  {
     Wire.beginTransmission(address);
     error = Wire.endTransmission();
 
    if (error == 0)
     {
       Serial.print("I2C device found at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.print(address,HEX);
       Serial.println(" !");
 
      nDevices++;
     }
     else if (error==4)
    {
       Serial.print("Unknow error at address 0x");
       if (address<16)
        Serial.print("0");
       Serial.println(address,HEX);
     }
   }
   if (nDevices == 0)
     Serial.println("No I2C devices found\n");
   else
     Serial.println("done\n");
 
  delay(8000);   
 }

Код взят с сайта http://blog.jacobean.net/?p=653, разбирать мы его не будем. Наша задача просто залить его и открыть монитор порта. В котором мы должны будем увидеть строки:

Scanning...
I2C device found at address 0x3F !
done

Где 0x3F - (может быть другой) адрес вашего интерфейса. Его мы и должны вставлять в наших скетчах в строке LiquidCrystal_I2C lcd(0x3F,16,2);

На самом деле эти дисплеи очень живучие, спалить их с помощью плат Ардуино не так просто. Поэтому, если вам кажется, что дисплей не работает, не паникуйте раньше времени, а проверьте по пунктам все выше написанные возможные проблемы и их решения, скорей всего причина может быть среди них.

 

 

 

Комментарии  

 
+1 # Egor 21.09.2016 18:24
не выводит на дисплей ничего.подсветка в начале мигает, ставил разные адреса.
Arduino Mega 2560
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+4 # Egor 21.09.2016 18:42
заработало поменял контрастность
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+7 # Volt0m 21.09.2016 19:36
Цитирую Egor:
заработало поменял контрастность

частое явление - контрастность и качественные контакты ) сканер I2C в последнюю очередь запускать
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # savelev_andrey 07.03.2017 05:56
ПРАВИЛЬНО!!! НАСТРОИТЬ КОНТРАСТНОСТЬ ОТВЕРТКОЙ НАДО!!!!
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
-2 # 1602_pcf8574at 04.12.2016 14:25
Дисплей 1602 i2c на pcf8574at. Почему-то не видит устройство. Подключал проверенный 4-значный семисегментник на ТМ1637. Не видит.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+1 # Volt0m 04.12.2016 15:07
Цитирую 1602_pcf8574at:
Дисплей 1602 i2c на pcf8574at. Почему-то не видит устройство. Подключал проверенный 4-значный семисегментник на ТМ1637. Не видит.

Есть хоть какие-то признаки жизни? Подсветка там или может что-то проявляется иногда на экране? Или вообще мертвый? И кто чего не видит? Не совсем понятны Ваши вопросы. Подробней распишите свои действия, постараюсь помочь.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+4 # Виктор 05.01.2017 14:33
Подключал дисплей 1602 i2c на pcf8574at. Не заработал. Раскалился не дисплей, а я.
Вроде бы все правильно по науке и библиотекам. Но не работает! Фуууууу!
Подозрение пало на неправильный адрес дисплея. На многих сайтах адрес 0х27. Верил и ставил. Все разрешил этот сайт. Адрес надо выставить 0x3F. И еще дан сканер адресов, пока не пробовал. Нужная вещь.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+2 # Александр 16.01.2017 07:59
Самый лучший сайт!заработало с первого раза!Всем рекомендую.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # Александр 20.01.2017 20:10
Дисплей 1604. Выводит только один символ из передаваемого слова или числа. Возможно не успевает по времени. Как исправить??
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+1 # Volt0m 20.01.2017 21:32
Цитирую Александр:
Дисплей 1604. Выводит только один символ из передаваемого слова или числа. Возможно не успевает по времени. Как исправить??

Это скорей всего плохие контакты. Проверяйте соединения. Прямо во время работы дисплея пошевелите везде провода в местах соединения с дисплеем, посмотрите что будет изменяться на экране.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+3 # Николай 17.03.2017 18:11
Вот здесь новая библиотека. С ней все работает.
https://github.com/marcoschwartz/LiquidCrystal_I2C
Можно еще попробовать добавить
#define ARDUINO 100
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # Volt0m 17.03.2017 19:02
Цитирую Николай:
Вот здесь новая библиотека. С ней все работает.
https://github.com/marcoschwartz/LiquidCrystal_I2C
Можно еще попробовать добавить
#define ARDUINO 100

Николай, спасибо Вам за поддержку. Уверен, что Ваш комментарий кому-то поможет! Но главное сначала убедиться в качестве соединений. От плохих контактов не спасет ни одна библиотека. Кому-то приходилось даже все соединения спаять, прежде чем начинало все нормально работать. Разъемы на макетных платах и проводах могут на доли микрон отличаться от стандарта и это часто приводит к нестабильной работе дисплея LCD1602 IIC/I2C. В 90% случаев у всех кто первый раз разбирается с дисплеем LCD1602 IIC/I2C, проблема заключается именно в плохих контактах.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
+1 # Александр 12.04.2017 12:50
Цитирую Volt0m:
Цитирую Николай:
Вот здесь новая библиотека. С ней все работает.
https://github.com/marcoschwartz/LiquidCrystal_I2C
Можно еще попробовать добавить
#define ARDUINO 100

Николай, спасибо Вам за поддержку. Уверен, что Ваш комментарий кому-то поможет! Но главное сначала убедиться в качестве соединений. От плохих контактов не спасет ни одна библиотека. Кому-то приходилось даже все соединения спаять, прежде чем начинало все нормально работать. Разъемы на макетных платах и проводах могут на доли микрон отличаться от стандарта и это часто приводит к нестабильной работе дисплея LCD1602 IIC/I2C. В 90% случаев у всех кто первый раз разбирается с дисплеем LCD1602 IIC/I2C, проблема заключается именно в плохих контактах.


Ваша правда пока все контакты не пропаял на модуле I2C, выводило только первый символ.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # Павел 24.09.2017 20:11
У меня была такая проблема, вылечилось правкой .cpp файла. Ищите в и-нете, проблема очень у многих. Железо нормальное.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # Сергей 29.10.2017 19:41
Николай верно написал https://github.com/marcoschwartz/LiquidCrystal_I2C
Тоже один символ выводился.
Помогло)
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 
 
0 # Андрей 07.11.2017 13:57
на экран выводит только одну букву. На которую установлен курсор((
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
 

Добавить комментарий

Защитный код
Обновить

шт.
Корзина пуста
Принимаем к оплате: