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

Как подключить lcd дисплей с i2c модулем к arduino

  • автор:

Текстовый экран 16×2 / I²C: инструкция по подключению и примеры использования

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Вывод Обозначение Пин Arduino Uno
1 GND GND
2 VCC 5V
3 VO GND
17 SDA SDA
18 SCL SCL

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Библиотека для Arduino «Liquid Crystal I²C». В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

// подключаем библиотеку LiquidCrystal_I2C #include #include // создаем объект-экран, передаём используемый адрес // и разрешение экрана: LiquidCrystal_I2C lcd(0x38, 16, 2); void setup() { // инициализируем экран lcd.init(); // включаем подсветку lcd.backlight(); // устанавливаем курсор в колонку 0, строку 0 lcd.setCursor(0, 0); // печатаем первую строку lcd.print("Hello world"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself"); } void loop() { }

Кириллица

Существует способ вывода кириллицы на текстовые дисплеи с помощью таблицы знакогенератора.

Таблица знакогенератора

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

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// подключаем библиотеку LiquidCrystal_I2C #include #include // создаем объект-экран, передаём используемый адрес // и разрешение экрана: LiquidCrystal_I2C lcd(0x38, 16, 2); void setup() { // инициализируем экран lcd.init(); // включаем подсветку lcd.backlight(); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("o\xBF A\xBC\xBE""ep\xBA\xB8"); } void loop() { }

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

// переключение с нулевой страницы на первую command(0b101010); // переключение с первой страницы на нулевую command(0b101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// подключаем библиотеку LiquidCrystal_I2C #include #include // создаем объект-экран, передаём используемый адрес // и разрешение экрана: LiquidCrystal_I2C lcd(0x38, 16, 2); void setup() { // инициализируем экран lcd.init(); // включаем подсветку lcd.backlight(); // устанавливаем курсор в колонку 5, строку 0 lcd.setCursor(5, 0); // печатаем строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // ждём 1 секунду delay(1000); // устанавливаем 1 станицу знакогенератора lcd.command(0b101010); // ждём 1 секунду delay(1000); }

Подключение нескольких дисплеев

Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.

После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.

// подключаем библиотеку LiquidCrystal_I2C #include #include // создаем объекты-экранов, передаём используемые адреса // и разрешение экранов: LiquidCrystal_I2C lcd1(0x38, 16, 2); LiquidCrystal_I2C lcd2(0x39, 16, 2); void setup() { // инициализируем первый экран lcd1.init(); // включаем подсветку lcd1.backlight(); // выводим информацию на первый дисплей // устанавливаем курсор lcd1.setCursor(4, 0); // печатаем первую строку lcd1.print("Display_1"); lcd1.setCursor(2, 1); lcd1.print("Address: 0x38"); // инициализируем второй экран lcd2.init(); // включаем подсветку lcd2.backlight(); // выводим информацию на второй дисплей // устанавливаем курсор lcd2.setCursor(4, 0); // печатаем первую строку lcd2.print("Display_2"); lcd2.setCursor(2, 1); lcd2.print("Address: 0x39"); } void loop() { }

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Подключение к Iskra JS

Вывод Обозначение Пин Iskra JS
1 GND GND
2 VCC 5V
3 VO GND
17 SDA SDA
18 SCL SCL

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев // настраиваем интерфейс I2C PrimaryI2C.setup({sda: SDA, scl: SCL}); // подключаем библиотеку и указываем адрес дисплея var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38); // включаем подсветку PrimaryI2C.writeTo(0x38, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x38, 0x00); // печатаем первую строку lcd.print("Hello world"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself");

Кириллица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

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

Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1"+"eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев // настраиваем интерфейс I2C PrimaryI2C.setup({sda: SDA, scl: SCL}); // подключаем библиотеку и указываем адрес дисплея var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38); // включаем подсветку PrimaryI2C.writeTo(0x38, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x38, 0x00); // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF"); // устанавливаем курсор в колонку 3, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 1); // печатаем вторую строку lcd.print("o\xBF"+" A\xBC\xBE"+"ep\xBA\xB8");

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

// переключение с нулевой страницы на первую command(0b101010); // переключение с первой страницы на нулевую command(0b101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев // настраиваем интерфейс I2C PrimaryI2C.setup({sda: SDA, scl: SCL}); // подключаем библиотеку и указываем адрес дисплея var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38); // включаем подсветку PrimaryI2C.writeTo(0x38, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x38, 0x00); // создаём переменную состояния var state = false; // устанавливаем курсор в колонку 5, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(5, 0); // печатаем первую строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); setInterval(function() { // каждую секунду меняем переменную состояния state = !state; // вызываем функцию смены адреса страницы lcdChangePage(); }, 1000); function lcdChangePage () { if (state) { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.write(0b101000, 1); } else { // устанавливаем 1 станицу знакогенератора lcd.write(0b101010, 1); } }

Подключение нескольких дисплеев

Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним. Подробнее читайте в нашей документации.

После физического смены адреса экрана, подключите дополнительный дисплей параллельно к пинам I²C , а в коде программы инициализируйте работу с двумя дисплеями.

// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев // настраиваем интерфейс I2C PrimaryI2C.setup({sda: SDA, scl: SCL}); // создаем объекты дисплеев, подключаем библиотеку и указываем адреса var lcd1 = require("HD44780").connectI2C(PrimaryI2C, 0x38); var lcd2 = require("HD44780").connectI2C(PrimaryI2C, 0x39); // включаем подсветку первого дисплея PrimaryI2C.writeTo(0x38, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x38, 0x00); // включаем подсветку второго дисплея PrimaryI2C.writeTo(0x39, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x39, 0x00); // выводим информацию на первый дисплей // устанавливаем курсор lcd1.setCursor(4, 0); // печатаем первую строку lcd1.print("Display_1"); lcd1.setCursor(2, 1); lcd1.print("Address: 0x38"); // выводим информацию на второй дисплей // устанавливаем курсор lcd2.setCursor(4, 0); // печатаем первую строку lcd2.print("Display_2"); lcd2.setCursor(2, 1); lcd2.print("Address: 0x39");

Комнатный термометр

Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».

Что понадобится

Управляющая платформа Arduino Uno или Iskra JS

Как собрать

Возьмите Troyka Shield и установите сверху на управляющую плату — Arduino или Iskra JS.
Подключите текстовый экран к управляющей платформе.

Подключите аналоговый термометр к управляющей плате через 3-проводной шлейф к аналоговому пину A0 . В итоге должна получится схема.

Прошейте управляющую платформу кодом, приведённым ниже.

Скетч для Arduino

Для работы с термометром удобно использовать библиотеку TroykaThermometer.

// подключаем библиотеку LiquidCrystal_I2C #include #include // подключим библиотеку для работы с термометром #include // создаем объект-экран, передаём используемый адрес // и разрешение экрана: LiquidCrystal_I2C lcd(0x38, 16, 2); // создаём объект для работы с аналоговым термометром // и передаём ему номер пина выходного сигнала TroykaThermometer thermometer(A0); void setup() { // инициализируем экран lcd.init(); // включаем подсветку lcd.backlight(); } void loop() { // очищаем дисплей lcd.clear(); // считываем данные с аналогового термометра thermometer.readData(); // устанавливаем курсор в колонку 3, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(3, 0); // считываем показания с датчика температуры float temperature = thermometer.getTemperatureC(); // выводим результат на дисплей lcd.print("Temp="); lcd.print(temperature); lcd.print("\x99""C"); delay(500); }

Скрипт для Iskra JS

// HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев // настраиваем интерфейс I2C PrimaryI2C.setup({sda: SDA, scl: SCL}); // подключаем библиотеку var lcd = require("HD44780").connectI2C(PrimaryI2C, 0x38); // включаем подсветку PrimaryI2C.writeTo(0x38, 0x08); // выключить подсветку // PrimaryI2C.writeTo(0x38, 0x00); // создаём переменную для работы с датчиком температуры var thermometer = require('@amperka/thermometer') .connect(A0); // каждую секунду считываем данные с датчика температуры и выводим на дисплей setInterval(function() { var celsius = thermometer.read('C'); lcd.setCursor(3, 0); lcd.print("Temp="+ celsius.toFixed(0) + "\x99"+"C"); }, 1000);

Элементы платы

Дисплей

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

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с драйвером расширителя портов, которые выполняют роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

I²C-расширитель

Для экономии пинов микроконтроллера на плате дисплея также распаян дополнительный преобразователь интерфейсов INF8574A: микросхема позволит общаться экрану и управляющей плате по двум проводам через интерфейс I²C.

Контакты подключения

На плате дисплея выведено 18 контактов для подведения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)
17 SDA Последовательная шина данных
18 SCL Последовательная линия тактированния

Обратите внимания, что физические контакты подсветки экрана 15 и 16 , также интерфейс шины I²C 17 и 18 расположены не в порядком соотношении с другими пинами экрана.

Питание

Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт. Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 16×2 / I²C / 3,3 В.

Интерфейс передачи данных

Дисплей может работать в трёх режимах:

8-битный режим — в нём используются и младшие и старшие биты ( DB0 — DB7 )
4-битный режим — в нём используются только младшие биты ( DB4 — DB7 )
I²C режим — данные передаются по протоколу I²C/TWI. Адрес дисплея 0x38 .

Использовать восьмибитный и четырёхбитный режим в данном дисплее не целесообразно. Ведь главное достоинство этой модели именно возможность подключения через I²C. Если всё-таки есть необходимость использовать 4-битный или 8-битный режим, читайте документацию на текстовый экран 16×2.

Объединение питания

Для подключения питания к дисплею необходимо пять контактов:

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
15 LED+ Питания подсветки (+)
16 LED– Питания подсветки (–)

Но если запаять перемычки J3 и J4 на обратной стороне дисплея, количество контактов питания можно сократить до трёх, объединив цепь питания и подсветки дисплея.

Мы взяли этот шаг на себя и спаяли перемычки самостоятельно.

Выбор адреса

Используя шину I²C можно подключить несколько дисплеев одновременно, при этом количество занятых пинов останется прежним.

Для общения с каждым дисплеем отдельно, необходимо установить в них разные адреса. Для смены адреса на обратной стороне дисплея установлены контактные площадки J0 , J1 и J2 .

Капнув припоем на контактные площадки, мы получим один из семи дополнительных адресов:

L нет припоя, соответственно нет электрического контакта.
H есть припой, соответственно есть электрический контакт.

J2 J1 J0 Адрес
L L L 0x38
L L H 0x39
L H L 0x3A
L H H 0x3B
H L L 0x3C
H L H 0x3D
H H L 0x3E
H H H 0x3F

ЖК-дисплей LCD 1602: подключение к Arduino через I2C-модуль

arduino NANO купить дешево arduino UNO купить дешево arduino UNO R3 ORIG купить дешево

В это статье мы рассмотрим способы подключения жидкокристаллического дисплея LCD 1602 (чип HD44780) к Arduino. Вообще говоря, LCD 0802 подключается аналогично.

Дисплей LCD 1602 наиболее ходовой из ЖК-дисплеев для ардуины, поскольку прост в подключении и программировании, и стоит недорого. Дисплей позволяет выводить на экран 2 строки по 16 символов в каждой, чего в принципе достаточно для простых приложений типа вывести текущее время и дату.

Сразу скажу, что проще всего этот дисплей будет подключать через IIC/I2C-модуль, что позволяет сильно сократить число проводов до четырех , два из которых — это питание. Стоит этот дополнительный модуль меньше стоимости дисплея. Собственно комплект дисплей + IIC/I2C-модуль, если брать на Али, обойдется меньше, чем в 2$ .


Так что нет смысла покупать их по отдельности.

В общем два основных способа подключения — это напрямую и через I2C-модуль. Давайте сначала рассмотрим способ через I2C-модуль, т.к. он наиболее практический.

Вариант 1. Подключение LCD 1602 к Ардуине через I2C-модуль

Схема подключения показана на рисунке:

Подключение LCD 1602 к ардуине через модуль IIC/I2C

т.е. провода соединяются следующим образом:

 I2C-модуль, Arduino --------------------- SCL - A5 SDA - A4 VCC - +5V GND - GND 

SCL — последовательная линия тактирования (Serial CLock);

SDA — последовательная линия данных (Serial Data);

VCC — «+» питания;

GND — «-» питания.

Для работы с дисплеем при таком подключении (т.е. через модуль I2C) можно использовать стандартную библиотеку LiquidCrystal_I2C1602V1 — её нужно распаковать в папку arduino/libraries , если её там нет (хотя обычно уже есть).

А вот базовый пример программы для вывода информации на дисплей.

 #include < Wire.h > #include < LiquidCrystal_I2C.h > LiquidCrystal_I2C lcd(0x27,16,2); /* или 0x3F. */ void setup() < lcd.init(); // Инициализация lcd.backlight(); // Включаем подсветку lcd.print("Hello, world!"); // Выводим текст lcd.setCursor(0, 1); // Курсор в начало 2-ой строки lcd.print("Hello!"); // Выводим текст >void loop() // цикл

Здесь использовался адрес 0x27 шины I2C. У некоторых модулей этот адрес может быть 0x3F. Это возможно определить по маркировке. Вообще говоря, этот адрес можно менять (с помощью паяльника) — такой нехитрый метод позволят в теории подключить более одного дисплея к одной ардуине.

Вариант 2. Прямое подключение LCD 1602 непосредственно к Ардуине

Схема подключения показана на рисунке

Прямое подключение LCD 1602 к Ардуине

В этом случае используется другая библиотека — LiquidCrystal.

 #include < LiquidCrystal.h > LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() < lcd.begin(16, 2); lcd.print("hello, world!"); lcd.setCursor(0,1); lcd.print("123"); >void loop()

Платы ARDUINO по низкой цене

Нажми на изображение, чтобы заказать в интернет-магазине:

arduino NANO купить дешево arduino UNO купить дешево arduino UNO R3 ORIG купить дешево arduino MEGA купить дешево arduino DUE купить дешево

Now 20.02.24 13:48:04, Your IP: 178.132.111.198; arduino.zl3p.com/modules/lcd1602
ePN

Подключение дисплея 1602 lcd i2c. 1602 ардуино дисплей

Сегодня изучим LCD индикаторы. Иногда их ещё называют ЖК – жидкокристаллические экраны.

  • Рассмотрим LCD 1602 и LCD2004.
  • Два способа подключения. С помощью параллельной шины LCD и I2C.
  • Узнаем адрес в I2C на котором подключен экран используя сканер.
  • Протестируем дисплей на наличие или отсутствии русского шрифта.
  • Рассмотрим таблицу знакогенератора. Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница.
  • Научимся создавать свои символы

В самом названии LCD 1602 и LCD2004 заложено количество символов в строке и количество строк.
Так в LCD 1602 – 16 символов в 2 строчках,
LCD2004 уже 20 символов в 4 строчках.
Ещё они отличаются цветом подсветки. Например, синяя или желтая подсветка.

Приступаем к изучению.
Сначала нам нужно узнать по какому адресу находится LCD дисплей. Для этого нам понадобится скетч Сканер I2C.

Характеристики дисплеев.

Характеристики
• Символов: 16
• Строк: 2
• Напряжение питания VCC,В: от 4.7 до 5.3
• Ток потребления ICC,мА: 1.5
• Размеры модуля, мм: 80x36x11;
• Размеры индикатора, мм: 64.5×14;
• Цвет точки: серый, позитивный;
• Цвет LED подсветки: желто-зеленый;
• Интерфейс: последовательный 8 бит.

Очень удобно пользоваться дисплеем с I2C адаптером. Если у вас простой дисплей, без модуля I2C, то вы можете купить модуль отдельно и припаять его к дисплею.
I2C адаптером — это преобразователь интерфейсов обеспечивающий обмен между параллельной шиной LCD и шиной I2C. И вместо 8 контактов на Ардуино вам понадобится всего 2, а к самой шине I2C можно подключить огромное число различных устройств.
Адрес адаптера хранится в энергонезависимой памяти.

Рассмотрим работу скетча Сканер I2C.
Сканер прослушивает все адреса и если будет найдено устройство подключённое к шине I2C то в монитор порта будет выведен адрес устройства который нужно запомнить и затем ввести в код для работы с этим устройством.

Для начала работы нужно установить библиотеку LiquidCristal_ITC. Как добавлять библиотеки мы уже много раз рассматривали. Если вы не знаете, то посмотрите предыдущие видео, там я подробно рассказывал как это делать. Загрузим скетч из архива. HelloWorld. Или из примера библиотеки.

Здесь указываем адрес устройства которое определил сканер. И какой у вас дисплей. 16 или 20 знаков.
Здесь мы инициализируем дисплей.
Включаем на нём подсветку.
Устанавливаем курсор на 3 знакоместо экрана, так как отсчёт ведётся с 0.
Выводим текст. Перемещаем курсор на 2 строку и 2 символ.
Выводим другую надпись.
Прошиваем контроллер и смотрим результат. Мы видим, что обе надписи вывелись на экран и именно там где мы и хотели.

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

Для того что бы выводить текст у вас должна быть установлена библиотека LCD 16 02 RUS ALL
По моему мнению – это самая лучшая библиотека для вывода кириллицы на экран. Она работает с разными дисплеями с 16 и 20 символами и с подключением по I2C и прямым подключением.
Если вы уже установили уту библиотеку, то просто меняем заголовочный текст в скетче на этот.
Этим мы подключаем библиотеку и указываем адрес устройства и тип дисплея.
Больше ничего менять не надо.
Теперь прошиваем и видим, что проблема с кодировкой исчезла. Теперь можно выводить любой текст на экран.

Теперь давайте рассмотрим что же такое кодировка.
В памяти дисплея прошиты символы к которым можно обратиться из программы по определённым адресам.
Например запустив этот скетч вы можете узнать, поддерживает ли ваш дисплей русскую кодировку или нет.
А ещё есть память ОЗУ в которую можно прошить 8 своих символов. Эти места находятся в первом столбце таблицы. Как создавать свои символы мы рассмотрим чуть позже.

Каждый раз когда вы пишете в своём скетче текст вы обращаетесь к этим символам по этим адресам. И если бы вы не использовали библиотеку, то вам пришлось бы писать эти адреса. Что как видно совсем не просто. Вот всю эту грязную работу выполняет за вас библиотека.
А здесь разработчиками были оставлены 2 пустых столбца. Зачем я не знаю. Лучше бы они туда русский шрифт разместили.
А здесь размещены символы которые не входят в основную кодировку. Вот она и меняется производителем в зависимости от страны использования. И если ваш дисплей не показывает здесь русского алфавита, то значит у него нет поддержки русских текстов. Но мы сможем обойти эти ограничения используя библиотеку.

Это скетч из примеров библиотеки. Как видим разработчиками были созданы символы сердце, смайлик, и человечек. Дальше я покажу как создавать свои символы. Не забудьте, в скетче, одновременно, можно использовать до 8 символов. Но это можно обойти, если в процессе выгружать из памяти уже не нужные символы и загружать новые.

Для создания символов будем использовать эту программу. Если вам она не понравилась, то можете найти другую, их много.
Заходим и настраиваем программу. Здесь ничего сложного. Главное указать, что у вас Ардуино, и выбрать I2C.
Вам создадут скетч, который вы можете скопировать и разместить на своей странице. Не забудьте вставить свой адрес и тип дисплея.
Теперь нащёлкиваем свой символ и копируем.

Открываем свой скетч и вставляем скопированный код. Ещё раз проверяем адрес и тип дисплея.
Компилируем и получаем ошибку. Это из-за того, что код всё равно скомпилировался для парцелльного подключения. Исправляем эту строчку.
Еще раз прошиваем. Теперь мы видим символ на экране, но у нас не включена подсветка. Возвращаемся и включаем подсветку. Прошиваем и вот теперь всё хорошо.

Теперь попробуем создать анимированный символ. Для работы с устройствами нам часто приходится использовать батарейки. Давайте сделаем символ который будет показывать значение остаточного напряжения на батарейке. Ну, то есть на сколько она разряжена. Для этого создадим несколько вариантов символов батарейки. От почти разряженной до полностью заряженной. После создания каждого варианты мы копируем код. Теперь нам не надо копировать весь код, а только сам массив.
Единственное, то надо делать – это давать массиву различные имена. Я буду прибавлять каждому имени по 1.
Также в сетапе копируем строку вывода символа. И так же меняем названия.
Я сделал 4 символа, но можно было бы и больше.
Теперь прошиваем скетч и смотрим что получилось. И видим, что батарейка вывелась на экран, но показан только последний символ. Символ полностью заряженной батарейки.
Давайте скопируем весь код и поместим его в луп. Пусть выполняется без конца.
И поставим небольшие задержки после каждого вывода символа, а иначе мы не заметим изменений.
Прошиваем и видим, что что-то не то.
А всё потому, что я при копировании захватил лишнее. Вернём это обратно в сетап.
Прошиваем.
Видим, что теперь всё работает как надо. И батарейка постепенно заполняется. Если вставить каждый символ в определённое место программы, отвечающее за разряд батарейки, то можно видеть на сколько разряжена батарейка.

А теперь давайте напишем небольшой код для вывода на экран. До этого мы выводили только статичный текст. Например давайте сделаем секундомер. Этот скетч будет прибавлять по 1 каждую секунду.
Выводить будем всё в одной строке.
Слово Секундомер будем выводить начиная с первого знака, а сам счётчик начиная с 13 знакоместа. Не забываем, что счёт идёт с 0.
Прошиваем. Но скетч нам возвращает ошибку. Это всё потому, что мы пытались вывести на экран цифру. То есть результат имеющий тип int. А на экран можно выводить только текстовую информацию.
Переведём int в string. Сделаем из цифры текст.
Теперь скетч прошился без ошибок и на экране мы видим надпись Секундомер и меняющиеся цифры с частотой в 1 секунду.
А это один из примеров входящих в библиотеку. На этом индикаторе можно делать бегущие строки.
Для этого в библиотеке есть различные функции. Мы их рассмотрим дальше в видео.
Кстати вот так я подключил 4 строчный индикатор на 20 символов без шины i2c.

А теперь давайте рассмотрим примеры работы с курсором.
Для того чтобы увидеть курсор его надо включить. Курсор может иметь два вида. В виде подчёркивания и как мигающий прямоугольник. Устанавливаем курсор на 9 знакоместо.
Прошиваем и видим курсор по середине экрана.
Теперь изменим тип курсора с подчёркивания на мигающий прямоугольник. Чтобы отключить, надо набрать ноублинк. Прямоугольник пропадёт, а подчёркивание останется до тех пор пока не отключим курсор.

Теперь немного познакомимся с функциями библиотеки. Я покажу только основные из них.
Например можно выводить текст справа на лево. А вот тут произошёл обломс. Русская библиотека не работает с функциями. Поэтому будем работать с основной библиотекой.
Загружаем пример HELLO WORLD из библиотеки Liquid Crystal i2c.

Снова вставляем выводить текст справа на лево. И наш текст убежал за пределы экрана. Так как он вывелся с 4 знакоместа и ушёл вправо. Изменяем начало текста. Я забыл и написал с 16 места, забыв что счёт идёт с нуля. Поэтому первый символ стал за границы экрана. Исправил на 15.
Теперь мы получили текст справа на лево, начинающийся с крайней правой точки первой строки.
А теперь для сравнения добавим этот же текст, но с лево на право.

Давайте сдвинем все тексты на экране на 1 символ вправо. Видим, что у нас пропал первый символ первой строки, так как всё передвинулось вправо.
Ещё есть возможность скрыть весь текст на экране не удаляя его и не очищая экран. Теперь размещу функцию показать всё на дисплее в середину текста. Как можно увидеть, часть экрана показать нельзя. Только или скрыть весь экран или показать весь экран.

Ну и в конце покажу как я подключил 4 строчечный дисплей без i2c. Подстроечным резистором можно регулировать яркость и контрастность экрана, добиваясь нужной яркости.
И покажу как смотрится таблица символов на этом экране. Я вывел только основную страницу.
На этом я заканчиваю этот большой урок про LCD дисплеи.

Характеристики I2C адаптера.

Характеристики
• Напряжение питания: 5 В.
• Потребляемый ток: до 6 мА.
• Интерфейс: I2C.
• Скорость шины I2C: 100 кбит/с.
• Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
• Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
• Рабочая температура: от -20 до +70 °С.
• Габариты: 41,91 х 17,15 мм (1650 x 675 mil).
• Вес: 6 г.

Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)

Подключить LCD1602 к Arduino (или любой другой LCD на базе микросхем HD44780) не всегда удобно, потому что используются как минимум 6 цифровых выходов. LCD I2C модули на базе микросхем PCF8574 позволяют подключить символьный дисплей к плате Arduino всего по двум сигнальным проводам (SDA и SCL).

PCF8574 — I2C модуль для LCD на базе HD44780

Микросхема PCF8574/PCF8574T обеспечивает расширение портов ввода/вывода для контроллеров через интерфейс I2C и позволит легко решить проблему нехватки цифровых портов. При использовании модуля как расширитель портов ввода/вывода следует учитывать то, что вывод Р3 имеет инверсный выход с открытым коллектором.

Микросхема может использоваться для управления ЖК дисплеем под управлением контроллера HD44780, в 4-х битном режиме. Для этой цели на плате установлена микросхема PCF8574, которая является преобразователем шины I2C в параллельный 8 битный порт.

Компоненты PCF8574 - I2C модуль для LCD на базе HD44780

Плата модуля разведена таким образом, чтобы ее можно было сразу подключить к ЖКИ. На вход подается питание и линии I2C. На плате сразу установлены подтягивающие резисторы на линиях SCL и SDA, потенциометр для регулировки контрастности и питание самого дисплея. Джампер справа включает/отключает подсветку.

Установка библиотеки LiquidCrystal I2C

Для работы с данным модулем необходимо установить библиотеку LiquidCrystal I2C. Скачиваем, распаковываем и закидываем в папку libraries в папке Arduino. В случае, если на момент добавления библиотеки, Arduino IDE была открытой, перезагружаем среду.

Библиотеку можно установить из самой среды следующим образом:

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…Подключение LCD1602 к Arduino по I2C (PCF8574) - Управлять библиотеками.
  2. В строке поиска вводим «LiquidCrystal I2C», находим библиотеку Фрэнка де Брабандера (Frank de Brabander), выбираем последнюю версию и кликаем Установить.Подключение LCD1602 к Arduino по I2C (PCF8574) - Установка LiquidCrystal I2C
  3. Библиотека установлена (INSTALLED).Подключение LCD1602 к Arduino по I2C (PCF8574) - LiquidCrystal I2C INSTALLED

Описание методов библиотеки LiquidCrystal I2C

LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t)

Конструктор для создания экземпляра класса, первый параметр это I2C адрес устройства, второй — число символов, третий — число строк.

LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);

init()

void init();

backlight()

Включение подсветки дисплея.

void backlight();

setCursor(uint8_t, uint8_t)

Установка позиции курсора.

void setCursor(uint8_t, uint8_t);

clear()

Возвращает курсор в начало экрана.

void clear();

home()

Возвращает курсор в начало экрана и удаляет все, что было на экране до этого.

void home();

write(uint8_t)

Позволяет вывести одиночный символ на экран.

#if defined(ARDUINO) && ARDUINO >= 100 virtual size_t write(uint8_t); #else virtual void write(uint8_t); #endif

cursor()

Показывает курсор на экране.

void cursor();

noCursor()

Скрывает курсор на экране.

void noCursor();

blink()

Курсор мигает (если до этого было включено его отображение).

void blink();

noBlink()

Курсор не мигает (если до этого было включено его отображение).

void noBlink();

display()

Позволяет включить дисплей.

void display();

noDisplay()

Позволяет отключить дисплей.

void noDisplay();

scrollDisplayLeft()

Прокручивает экран на один знак влево.

void scrollDisplayLeft();

scrollDisplayRight()

Прокручивает экран на один знак вправо.

void scrollDisplayRight();

autoscroll()

Позволяет включить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.

void autoscroll();

noAutoscroll()

Позволяет выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.

void noAutoscroll();

leftToRight()

Установка направление выводимого текста — слева направо.

void leftToRight();

rightToLeft()

Установка направление выводимого текста — справа налево.

void rightToLeft();

createChar(uint8_t, uint8_t[])

Создает символ. Первый параметр — это номер (код) символа от 0 до 7, а второй — массив 8 битовых масок для создания черных и белых точек.

void createChar(uint8_t, uint8_t[]);

Подключение LCD1602 к Arduino

Модуль оборудован четырех-пиновым разъемом стандарта 2.54мм

  • SCL: последовательная линия тактирования (Serial CLock)
  • SDA: последовательная линия данных (Serial DAta)
  • VCC: «+» питания
  • GND: «-» питания

Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся

Arduino Mega Arduino Uno/Nano/Pro Mini LCD I2C модуль Цвет проводов на фото
GND GND GND Черный
5V 5V VCC Красный
20 (SDA) A4 SDA Зелёный
21 (SCL) A5 SCL Жёлтый

Схема подключения LCD1602 к Arduino по I2C

Схема подключения LCD1602 к Arduino по I2C(HD44780 - PCF8574)

Пример скетча

/* Добавляем необходимые библиотеки */ #include /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < /* Инициализируем ЖК-дисплей */ lcd.init(); /* Включаем подсветку дисплея */ lcd.backlight(); /* Устанавливаем курсор на первую строку и нулевой символ. */ lcd.setCursor(0, 0); /* Выводим на экран строку */ lcd.print(" micro-pi.ru "); >void loop() < /* Устанавливаем курсор на вторую строку и 3 символ. */ lcd.setCursor(3, 1); /* Выводим на экран количество секунд с момента запуска ардуины */ lcd.print(millis() / 1000); delay(1000); >

Результат

Подключение LCD1602 к Arduino - Результат
Подключение LCD1602 к Arduino - Результат

Создание собственных символов

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера. А вот что делать если нужного символа в памяти контроллера нет? Требуемый символ можно сделать вручную. Данный способ частично, ограничение в 7 символов, поможет решить проблему вывода.

Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.

Пример скетча

/* Добавляем необходимые библиотеки */ #include extern uint8_t bell[8]; extern uint8_t note[8]; extern uint8_t clock[8]; extern uint8_t heart[8]; extern uint8_t duck[8]; extern uint8_t check[8]; extern uint8_t cross[8]; extern uint8_t retarrow[8]; /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); 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.print("Hello world. "); >void loop() < static char i = 0; /* Устанавливаем курсор на вторую строку и 'i' символ. */ lcd.setCursor(i, 1); /* Выводим на экран символ с номером 'i' */ lcd.print(i); /* Ждём секунду */ delay(1000); if (i == 7) < /* Очищаем вторую строку после вывода всех символов */ i = 0; lcd.setCursor(0, 1); for (char j = 0; j < 16; j++) < lcd.print(' '); >> else < i++; >> /* ..O.. .OOO. .OOO. .OOO. OOOOO . ..O.. */ uint8_t bell[8] = < 0b00100, 0b01110, 0b01110, 0b01110, 0b11111, 0b00000, 0b00100 >; /* . O. . OO . O. .OOO. OOOO. .OO.. . */ uint8_t note[8] = < 0b00010, 0b00011, 0b00010, 0b01110, 0b11110, 0b01100, 0b000000000 >; /* . .OOO. O.O.O O.OOO O. O .OOO. . */ uint8_t clock[8] = < 0b00000, 0b01110, 0b10101, 0b10111, 0b10001, 0b01110, 0b00000 >; /* . .O.O. OOOOO OOOOO .OOO. ..O.. . */ uint8_t heart[8] = < 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 >; /* . .OO.. OOO.O .OOOO .OOOO ..OO. . */ uint8_t duck[8] = < 0b00000, 0b01100, 0b11101, 0b01111, 0b01111, 0b00110, 0b00000 >; /* . . O . OO O.OO. OOO.. .O..O . */ uint8_t check[8] = < 0b00000, 0b00001, 0b00011, 0b10110, 0b11100, 0b01001, 0b00000 >; /* . OO.OO .OOO. ..O.. .OOO. OO.OO . */ uint8_t cross[8] = < 0b00000, 0b11011, 0b01110, 0b00100, 0b01110, 0b11011, 0b00000 >; /* . O . O ..O.O .O..O OOOOO .O..O ..O.. */ uint8_t retarrow[8] = < 0b00001, 0b00001, 0b00101, 0b01001, 0b11111, 0b01001, 0b00100 >;

Результат

Подключение LCD1602 к Arduino - Создание собственных символов

Проблемы подключения LCD1602 к Arduino по I2C

Если после загрузки скетча у вас не появилось никакой надписи на дисплее, попробуйте выполнить следующие действия:

  1. Можно регулировать контрастность индикатора потенциометром. Часто символы просто не видны из-за режима контрастности и подсветки.Подключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - контрастность дисплея
  2. Проверьте правильность подключения контактов, подключено ли питание подсветки. Если вы использовали отдельный I2C переходник, то проверьте еще раз качество пайки контактов.
  3. Проверьте правильность I2C адреса. Попробуйте сперва поменять в скетче адрес устройства с 0x20 до 0x27 для PCF8574 или с 0x38 до 0x3F для PCF8574A. Если и это не помогло, можете запустить скетч I2C сканера, который просматривает все подключенные устройства и определяет их адрес методом перебора. Для изменения адресации необходимо установить джамперы в нужное положение, тем самым притянуть выводы A0, A1, A2 к положительному либо отрицательному потенциалу. На плате положения промаркированы. Подключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - адресПодключение LCD1602 к Arduino по I2C (HD44780-PCF8574) - Выбор адресации
  4. Если экран все еще останется нерабочим, попробуйте подключить LCD обычным образом.

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

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