Как подключить дисплей к ардуино
Перейти к содержимому

Как подключить дисплей к ардуино

  • автор:

LCD 1602 I2C дисплей подключение к Arduino

Классические LCD-дисплеи имеют широкое применение в кассовых аппаратах, офисной технике и многих других устройствах. В этой статье мы рассмотрим их характеристики, виды и особенности использования.

Размеры и типы LCD-дисплеев

LCD-дисплеи могут быть разных размеров. Самый популярный вариант – это LCD 1602 (с 16 столбцами и 2 строками). Встречаются также другие размеры: 2004, 0802 и др. Здесь мы сосредоточимся на дисплее 1602.

Цвет фона и букв

Существуют различные комбинации цветов фона и букв на дисплеях. Пример сочетаний:

  • Синий фон и белые буквы
  • Голубой фон и черные буквы
  • Зеленый фон и чёрные буквы
  • Оранжевый фон и черные буквы
  • Чёрный фон и белые буквы

В данной статье мы будем рассматривать дисплей с темно-синим фоном и белыми буквами.

Светодиодная подсветка

Дисплеи часто имеют отключаемую светодиодную подсветку, что улучшает видимость и комфорт чтения информации с экрана.

Подключение и переходник

Сам по себе классический LCD-дисплей требует для подключения к микроконтроллеру Ардуино минимум 8 цифровых пинов. Однако существует переходник на шину I2C на базе PCF8574, производимый китайскими компаниями. Он значительно упрощает подключение и экономит пины. В данном случае рассматривается дисплей с припаянным переходником.

Настройка контрастности

На переходнике предусмотрен подстроечный резистор настройки контрастности, под крестовую отвёртку. Необходимо вручную подстроить контрастность.

Адресация интерфейса

Переходник может иметь разный адрес для указания в коде: 0х27 или 0x3F. Адрес формируется перемычками обозначенными на плате A0, A1,A2. Это необходимо учитывать при программировании и использовании дисплея.

Код для Ардуино

Скачайте и установите библиотеку LiquidCrystal, выберите пример «demo». Если все подключено без ошибок, то дисплей сразу начнет демонстрировать свои возможности. Для русификации шрифтов дисплея, Вам потребуется библиотека LCD 1602 RUS.

Заключение

Классические LCD-дисплеи являются универсальным и доступным решением для отображения информации на различных устройствах. Учитывая разнообразие цветов и возможность подключения через различные переходники, эти дисплеи остаются по сей день популярными и актуальными на рынке.

Урок 4. Подключение LCD1602 по I2C к Ардуино

К сожалению стандартная схема подключения расмотренная в предыдущих уроках не всегда удобна, так как занимает как минимум 6 цифровых выходов на арудине.

В этом уроке мы рассмотрим способ как это можно обойти и использовать только два аналоговых выхода.

Нам понадобится дополнительный модуль 1602 LCD конвертор в IIC/I2C. Он припаивается к нашему дисплею как видно на фото ниже.

И подключается к ардуине следующим образом

Arduino Mega Arduino Uno LCD i2c Цвет проводов на фото
GND GND GND Черный
5V 5V VCC Красный
20 (SDA) A4 SDA Коричневый
21(SCL) A5 SCL Белый

Этот способ подключения работает только со специально библиотекой, скачать библиотеку можно по ссылке (LiquidCrystal_I2C1602V1 Библиотека). Установите данную библиотеку.

Код программы:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей void setup() < lcd.init(); lcd.backlight();// Включаем подсветку дисплея lcd.print("iarduino.ru"); lcd.setCursor(8, 1); lcd.print("LCD 1602"); >void loop() < // Устанавливаем курсор на вторую строку и нулевой символ. lcd.setCursor(0, 1); // Выводим на экран количество секунд с момента запуска ардуины lcd.print(millis()/1000); >

Видео:

Arduino и дисплей LCD1602

Классический LCD дисплей, раньше такие стояли в кассовых аппаратах и офисной технике.

  • Бывают разного размера, самый популярный – 1602 (16 столбцов 2 строки), есть ещё 2004, 0802 и другие. В наборе идёт 1602.
  • Снабжён отключаемой светодиодной подсветкой. Существует несколько вариантов, например синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. В наборе идёт с зелёным фоном и чёрными буквами.
  • Сам по себе требует для подключения 6 цифровых пинов, но китайцы выпускают переходник на шину I2C на базе PCF8574, что сильно упрощает подключение и экономит пины. В наборе идёт дисплей с припаянным переходником.
  • На переходнике также распаян потенциометр настройки контрастности (синий параллелепипед с крутилкой под крестовую отвёртку). В зависимости от напряжения питания нужно вручную подстроить контрастность. Например при питании платы от USB на пин 5V приходит ~4.7V, а при внешнем питании от адаптера – 5.0V. Контрастность символов на дисплее будет разной!
  • Переходник может иметь разный адрес для указания в программе: 0х26 , 0x27 или 0x3F , об этом ниже.

Подключение

Дисплей подключается по шине I2C, выведенной на пины:

Библиотеки

Для этого дисплея существует несколько библиотек, я рекомендую LiquidCrystal_I2C от Frank de Brabander. Библиотека идёт в архиве к набору, а также её можно скачать через менеджер библиотек по названию LiquidCrystal_I2C и имени автора. Репозиторий на GitHub.

print(data); // вывести (любой тип данных) setCursor(x, y); // курсор на (столбец, строка) clear(); // очистить дисплей home(); // аналогично setCursor(0, 0) noDisplay(); // отключить отображение display(); // включить отображение blink(); // мигать курсором на его текущей позиции noBlink(); // не мигать cursor(); // отобразить курсор noCursor(); // скрыть курсор scrollDisplayLeft(); // подвинуть экран влево на 1 столбец scrollDisplayRight(); // подвинуть экран вправо на 1 столбец backlight(); // включить подсветку noBacklight(); // выключить подсветку createChar(uint8_t, uint8_t[]); // создать символ createChar(uint8_t location, const char *charmap); // создать символ

Пример вывода

При первой работе с дисплеем нужно настроить контраст и определиться с адресом:

  • Прошить пример “Демо”
  • Если дисплей показывает чёрные прямоугольники или пустой экран – крутим контраст
  • Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе: 0х26 , 0x27 и 0x3F
  • Снова крутим контраст, должно заработать
  • Если не работает – проверяем подключение и повторяем сначала
  • Примечание: в наборе должны идти дисплеи с адресом 0x27 , но может зависеть от партии!

// базовый пример инициализации и вывода текста #include // подключаем библу // адрес дисплея 0x3f или 0x27 // размер дисплея 16×2 (поддерживаются и другие, например 20×4) LiquidCrystal_I2C lcd(0x27, 16, 2); // адрес, столбцов, строк void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку lcd.setCursor(1, 0); // столбец 1 строка 0 lcd.print("Hello, world!"); lcd.setCursor(4, 1); // столбец 4 строка 1 lcd.print("GyverKIT"); >void loop()
Выводим по буквам
#include LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку // строки для вывода char s1[] = "Hello, world!"; char s2[] = "GyverKIT"; lcd.setCursor(1, 0); for (int i = 0; i < strlen(s1); i++) < lcd.print(s1[i]); delay(100); >lcd.setCursor(4, 1); for (int i = 0; i < strlen(s2); i++) < lcd.print(s2[i]); delay(100); >> void loop()

Символы дисплея

В памяти дисплея содержится 255 символов, это английские буквы, стандартные символы и китайские буквы. Стандартные символы, такие как !@#$%&()* и так далее выводятся через print() , остальные можно вывести по их коду при помощи write() :

#include LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку // выводим стрелочку, надпись temp, число и градус lcd.write(126); lcd.print("Temp: "); lcd.print(25.6); lcd.write(223); >void loop()

Свои символы

Библиотека поддерживает создание “своих” дополнительных символов размером 5х7 точек, можно воспользоваться онлайн-генератором кодов символов – ссылка. Для компактности рекомендую переключить его в HEX. Вот так будет выглядеть “символ” крестик: byte myX[] = ;

Дисплей имеет 8 ячеек под сторонние символы, добавляются они при помощи createChar(номер, массив) , где номер – от 0 до 7, а массив – имя массива с данными, которое мы создали для символа. Выводятся символы при помощи write(номер) .

Важный момент: после вызова createChar сбрасывается позиция вывода текста, нужно обязательно вызвать setCursor!

// выводим кастомные символы #include LiquidCrystal_I2C lcd(0x27, 16, 2); byte bell[] = ; byte note[] = ; byte clock[] = ; byte heart[] = ; byte duck[] = ; byte check[] = ; byte cross[] = ; byte retarrow[] = ; void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку // загружаем все сразу lcd.createChar(0, bell); lcd.createChar(1, note); lcd.createChar(2, clock); lcd.createChar(3, heart); lcd.createChar(4, duck); lcd.createChar(5, check); lcd.createChar(6, cross); lcd.createChar(7, retarrow); // выводим для примера все lcd.home(); lcd.write(0); lcd.write(1); lcd.write(2); lcd.write(3); lcd.write(4); lcd.write(5); lcd.write(6); lcd.write(7); >void loop()

Важная информация по дисплеям

Данная информация относится ко всем дисплеям.

  • Вывод данных на дисплей занимает время, поэтому выводить нужно либо по таймеру, либо по факту изменения данных.
  • Очищать дисплей полностью не всегда целесообразно, иногда достаточно вывести новые значения поверх старых, либо частично очистить “пробелами”.

Уроки по таймерам:

Рассмотрим два примера.

Выводим значение с потенциометра

Урок по потенциометрам читай здесь.

// оптимально выводим значение с потенциометра по таймеру // текстовый лейбл не выводим, дисплей не очищаем // потенциометр подключен на A0 #include LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку lcd.home(); lcd.print("Pot. val: "); >void loop() < static uint32_t tmr; // таймер на 10 раз в секунду if (millis() - tmr >= 100) < tmr = millis(); lcd.setCursor(10, 0); lcd.print(analogRead(0)); lcd.print(" "); >>

Выводим счётчик от кнопки

Урок по кнопкам читай здесь.

// выводим счётчик нажатий по событию #include EncButton btn(INPUT_PULLUP); // кнопка на D3 #include LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < lcd.init(); // инициализация lcd.backlight(); // включить подсветку >void loop() < btn.tick(); if (btn.isClick()) < static int count = 0; count++; // очищаем и выводим текст и значение lcd.home(); lcd.clear(); lcd.print("Counter: "); lcd.print(count); >>

Вывод на русском языке

Данный дисплей работает следующим образом: шрифт (буквы, цифры, символы) зашит в память контроллера дисплея, поэтому язык определяется моделью контроллера. Самые распространённые – с английским и китайским, как в табличке выше. Есть дисплеи с кириллицей (вместо китайского), но они сильно дороже. Также у нас есть 8 ячеек для хранения своих символов, и с их помощью можно вполне организовать вывод на другом языке. Что касается русского – большая часть букв совпадает по написанию, и это сильно упрощает задачу. Есть готовые библиотеки, где это уже реализовано, например LCD_1602_RUS_ALL от ssilver2007. Библиотека поддерживает также украинский язык для LCD1602. Пример:

#define _LCD_TYPE 1 // для работы с I2C дисплеями #include LCD_1602_RUS lcd(0x27, 16, 2); void setup() < lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Привет!"); >void loop()

Домашнее задание

  • Освоить библиотеку LiquidCrystal_I2C, попробовать все функции из документации
  • Создать несколько символов и вывести их
  • Оптимизировать последний пример: не очищать дисплей и не выводить лейбл при клике, менять только значение

Дисплей 1602 подключение к arduino

Дисплеи очень важные части устройства, если нужно получить обратную связь без использования компьютера. К плате arduino можно подключать как специально разработанные дисплеи, так и схожие по техническим характеристикам.

Дисплеи под ардуино

Дисплеи могут выводит информацию по датчикам или создавать определённый визуальный эффект.

Рассмотрим процесс подключения дисплея 1602. У него шестнадцать выводов. Рассмотрим вариант подключения по четырёх битному параллельному интерфейсу.

Таблица обозначения подключений

Перед тем, как собрать данную схему, вам необходимо припаять провода к выводам дисплея. Для удобства предлагаю использовать провода МГТФ самого малого диаметра. Их преимущества в гибкости и прочности. С них легко снять изоляцию. Также можно использовать акустические провода, но они обладают более «толстой» изоляцией и менее гибкие. Длина провода не более 15 см. для каждого вывода.

Для теста возьмём пример из библиотеки LiquidCrystal.h — «Hello World».

Подадим питание на arduino и загрузим программу.

Ниже представлен видеообзор подключения дисплея.

Лучшие схемы создаются во fritzing.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *