Подключение LCD 1602 по i2c к ардуино

Жидкокристаллический дисплей (LCD) 1602 и его старший брат 2004 встречаются в двух исполнениях: с параллельным интерфейсом и с поддержкой шины I2C. В первом случае, для подключения к контроллеру требуется задействовать целых шесть контактов, что часто заставляет нас грустить. Модуль дисплея приходится ставить на макетную плату, подключать в цепь внешний потенциометр контраста и связывать всё это кучей проводов.

Другое дело дисплеи с I2C шиной. Универсальный интерфейс, который позволяет на двухконтактную шину «навесить» множество разных устройств. Тех же ЖК дисплеев можно подключить целых 8 штук (если I2C модуль имеет перемычки для выставления адреса).

На этом уроке мы будем разбираться с I2C версией русифицированного жидкокристаллического модуля 1602. О работы с данным дисплеем без I2C мы уже рассказывали в одном из уроков ранее (дисплей 1602 с русскими буквами).

Список необходимых компонентов

Для выполнения простого примера, кроме самого дисплея, потребуется I2C модуль, Arduino-совместимый контроллер с напряжением логики 5В и немного проводов. Если вам не хватает чего-то из этого, можно добавить необходимые компоненты в корзину прямо здесь и затем оформить заказ в нашем интернет-магазине.

Для начала, нам потребуется убедиться, что на нашем дисплее установлен тот самый I2C модуль. Как правило, это такая чёрная плата с микросхемой, 16 контактами для подключения дисплея и 4 контактами, собственно, для работы I2C.

Дисплей 1602 с I2C, кириллица

Микросхема, которая находится на чёрной плате — это ни что иное, как расширитель GPIO с I2C интерфейсом. Про полезный модуль с аналогичной микросхемой мы уже рассказывали ранее (расширитель GPIO от RobotClass).

Подключаем его к Arduino или к иному контроллеру по стандартной схеме:

Arduino+5VGNDA4A5
LCDVCCGNDSDASCL

Также на I2C модуле есть три перемычки для смены адреса. По-умолчанию, когда все перемычки разомкнуты, адрес устройства — 0x27. Другие комбинации можно посмотреть в таблице:

ПеремычкиАдрес
0x27
A00x26
A10x25
A0,A10x24
A20x23
A0,A20x22
A1,A20x21
A0,A1,A20x20

LCD 1602 i2c Arduino распиновка, характеристики

LCD 1602 i2c Arduino распиновка, характеристики

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

Характеристики LCD 1602 i2c (datasheet)

  • Напряжение питания: 5 В
  • Количество строк: 2
  • Количество символов в строке: 16
  • Общее количество символов: 32
  • Диапазон рабочих температур: 0 — +60º C

По умолчанию жк дисплей с модулем I2C имеет адрес «0x27«. Если необходимо подключить к микроконтроллеру более одного дисплея 1602, необходимо изменить адреса устройств. Если вы перевернете дисплей и посмотрите на модуль IIC, вы увидите контакты, обозначенные «A0», «A1» и «A2». Если по умолчанию модуль имеет адрес «0x27» на шине IIC Arduino, то замыкание перемычки «A0» изменит адрес устройства на «0x26«.

Как подключить LCD 1602 к Ардуино по i2c

Как подключить LCD 1602 к Ардуино с модулем i2c

LCD 1602 i2cArduino UnoArduino NanoArduino Mega
GNDGNDGNDGND
VCC5V5V5V
SDAA4A420
SCLA5A521

ЖК дисплей 1602 i2c подключается к плате Ардуино всего 4 проводами — 2 провода для обмена данными и 2 провода питания. Подключение дисплея QAPASS 1602a к Arduino осуществляется стандартным для шины i2c способом: вывод SDA подключается к порту A4 (SDA), вывод SCL — к порту A5 (SCL). Питание дисплея осуществляется от 5 Вольт. Подробная схема подключения дисплея 1602 приведена на изображении выше.

Описание методов библиотеки 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[]);

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

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

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

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

Схема подключения 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 - Создание собственных символов

Necessary components

Arduino UNO

The Arduino UNO is a microcontroller board based on the ATmega328P. It has 14 digital input/output pins, 6 analog inputs, a 16 MHz quartz crystal, a USB connection, a power jack, an ICSP header, and a reset button. It is the most popular and widely used board among the Arduino boards.

The Arduino UNO can be programmed using the Arduino programming language, which is based on C++. It uses a simple and intuitive programming environment, making it easy for beginners to get started with microcontroller programming.

The Arduino UNO can be connected to various sensors and actuators to control different devices and perform different tasks. For example, it can be used to control motors, read data from sensors, display information on an LCD screen, and communicate with other devices via serial communication protocols such as I2C and SPI.

The Arduino UNO can also be powered by a USB cable or an external power supply, making it easy to use in a wide range of projects and applications. It’s compatible with a wide range of shields (expansion boards) that adds functionality to the board, such as Ethernet, WiFi, and Bluetooth, and it’s widely supported by a strong and active community, which provides a lot of tutorials, examples and libraries to help users to get the most of the board.

LCD I2C 160A display

An LCD I2C 160A display is a type of liquid crystal display (LCD) that uses the I2C communication protocol and has a screen size of 160×128 pixels. The I2C (Inter-Integrated Circuit) protocol is a communication protocol that allows multiple devices to communicate with each other over a shared bus. This means that the LCD display can be connected to a microcontroller, such as an Arduino, using just two wires for communication and power.

The I2C interface allows for a simpler wiring and board design, and also multiple LCD can be connected to a single microcontroller by just changing the I2C address of each display. The size of 160×128 pixels provides a decent resolution for displaying text, images or graphics.

This type of LCD display can be used in various projects such as in home automation, weather station, data logger, etc. It’s also compatible with many development board like Raspberry Pi, Arduino, etc.

connecting wires

Connecting wires are used to connect various components in an electronic circuit. They allow for the transfer of electricity, data, or signals between different devices and components.

When connecting wires to an Arduino or other microcontroller, it is important to pay attention to the correct pinout. The pinout refers to the arrangement of pins on the microcontroller and the corresponding function of each pin. The Arduino pinout can be found in the documentation provided by the manufacturer, or in various resources available online.

Mounting

To complete the assembly you must connect:

  • the SDA pin of the LCD display to A4 PIN of the Arduino
  • the SCL pin of the LCD display to A5 PIN of the Arduino
  • the GND pin of the LCD display to GND pin of the Arduino
  • the VCC pin of the LCD display to 5V pin of the Arduino

4 Скетч для вывода текста на LCD экран по шине I2C

Откроем образец: Файл Образцы LiquidCrystal_I2C CustomChars и немного его переделаем. Выведем сообщение, в конце которого будет находиться мигающий символ. В комментариях к коду прокомментированы все нюансы скетча.

#include // подключаем библиотеку Wire #include // подключаем библиотеку ЖКИ #define printByte(args) write(args); // uint8_t heart[8] = ; // битовая маска символа «сердце» LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаём адрес 0x27 для LCD дисплея 16×2 void setup() lcd.init(); // инициализация ЖК дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(3, heart); // создаём символ «сердце» в 3 ячейке памяти lcd.home(); // ставим курсор в левый верхний угол, в позицию (0,0) lcd.print(«Hello SolTau.ru!»); // печатаем строку текста lcd.setCursor(0, 1); // перевод курсора на строку 2, символ 1 lcd.print(» i «); // печатаем сообщение на строке 2 lcd.printByte(3); // печатаем символ «сердце», находящийся в 3-ей ячейке lcd.print(» Arduino «); > void loop() // мигание последнего символа lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print(«t»); delay(500); lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print(» «); delay(500); >

Кстати, символы, записанные командой lcd.createChar();, остаются в памяти дисплея даже после выключения питания, т.к. записываются в ПЗУ дисплея 1602.

5 Создание собственных символов для ЖК дисплея

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: . Преобразуем 16-ричные числа в бинарные: . Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где «0» обозначают светлую точку, а «1» – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана

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

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

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

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

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

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

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

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

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

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

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

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

  • GND экрана подключаем к GND Arduino
  • VCC экрана подключаем к +5V Arduino
  • SDA экрана подключаем к 4 аналоговому пину Arduino Uno
  • SCL экрана подключаем к 5 аналоговому пину Arduino Uno
  • LiquidCrystal() — создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
  • noDisplay() — выключение дисплея с сохранением всей отображаемой информации;
  • display() — включение дисплея с сохранением всей отображаемой информации;
  • begin() — инициализация LCD дисплея, задание параметров (кол-во строк и символов);

Функции работы с текстом:

  • clear() — очистка экрана и возврат курсора в начальную позицию;
  • home() — возврат курсора в начальную позицию;
  • setCursor() — установка курсора на заданную позицию;
  • write() — выводит символ на ЖК экран;
  • print() — выводит текст на ЖК экран;
  • cursor() — показывает курсор, т.е. подчёркивание под местом следующего символа;
  • noCursor() — прячет курсор;
  • blink() — мигание курсора;
  • noBlink() — отмена мигания;
  • scrollDisplayLeft() — прокрутка содержимого дисплея на 1 позицию влево;
  • scrollDisplayRight() — прокрутка содержимого дисплея на 1 позицию вправо;
  • autoscroll() — включение автопрокрутки;
  • noAutoscroll() — выключение автопрокрутки;
  • leftToRight() — задаёт направление текста слева направо;
  • rightToLeft() — направление текста справа налево;
  • createChar() — создаёт пользовательский символ для LCD-экрана.

Пример работы скетча

Выведем на дисплей простую строку «HELLO WORLD!» для этого будем использовать нижеследующий скетч для IDE Arduino:

#include // Set the LCD address to 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() < // initialize the LCD lcd.init(); lcd.backlight(); lcd.print(«HELLO WORLD!»); >void loop()

Скачать библиотеку LiquidCrystal I2C

Скачать Arduino LiquidCrystal I2C можно тут.

Оцените статью
TutShema
Добавить комментарий