- Что такое протокол связи I2C?
- Необходимые материалы
- Модуль I2C
- Принципиальная электрическая схема
- Код для поиска адреса контроллера I2C
- Код для ESP32
В предыдущем руководстве OLED взаимодействует с ESP32 с помощью связи SPI, которая использует 5 контактов. В этом руководстве мы соединяем ЖК-дисплей 16x2 с ESP32, используя только 2 контакта, с помощью связи I2C. Это уменьшает количество контактов, используемых ESP32, так что большее количество контактов ESP32 остается свободным для взаимодействия с различными датчиками.
Что такое протокол связи I2C?
Термин I2C расшифровывается как « Inter Integrated Circuits». Обычно он обозначается как IIC, или я в квадрате C, или даже как протокол 2-проводного интерфейса (TWI) в некоторых местах, но все это означает то же самое. I2C - это протокол синхронной связи, это означает, что оба устройства, которые совместно используют информацию, должны использовать общий тактовый сигнал. Он имеет только два провода, SDA и SCL для обмена информацией, из которых SCL используется для тактового сигнала, а SDA используется для отправки и получения данных.
Вы можете купить ЖК-модуль I2C со встроенным ЖК-контроллером I2C1602 или просто купить контроллер I2C для сопряжения ЖК-дисплея 16x2 с ESP32.
Необходимые материалы
- ESP32
- ЖК-дисплей 16 * 2
- Контроллер I2C LCD
- Провода
- Макетная плата
Модуль I2C
Контроллер I2C имеет IC PCF8574, который обеспечивает расширение удаленного ввода / вывода общего назначения через двухпроводную двунаправленную последовательную синхронизацию шины I2C (SCL) и последовательные данные (SDA). Это очень полезная ИС, которую можно использовать в светодиодных вывесках, дисплеях, клавиатурах, промышленном управлении и т. Д. Имеется 8 контактов ввода / вывода, 3 контакта (A0, A1, A2) для адреса шины I2C и контакты SDA, SCL.
Плата контроллера ЖК-дисплея имеет встроенный потенциометр для управления контрастностью ЖК-дисплея.
Схемы контактов IC и контроллера LCD приведены ниже.
Принципиальная электрическая схема
Подключения для сопряжения ЖК-дисплея с ESP32 приведены ниже.
- подключите контакты 1-16 модуля I2C к контактам 1-16 ЖК-дисплея.
- Вывод SDA модуля I2C -> Вывод SDA ESP32, т.е. D21
- Контакт SCL модуля I2C -> Контакт SCL ESP32, т.е. D22
Я подключил 3 В ESP32 к 5 В I2C только для демонстрации, но нам нужно питание 5 В для модуля I2C для правильного отображения данных, потому что ESP32 может выдавать только 3,3 В, что является низким для модуля I2C, и данные не будут четко видны. Так что лучше использовать внешнее питание 5В.
Нам нужны файлы платы для ESP32, поэтому, если вы новичок в ESP32, сначала следуйте Руководству по началу работы с ESP32, а затем вернитесь сюда. Вы также можете подключить ЖК-дисплей с ESP32 без I2C, но для этого потребуется больше контактов ESP32.
Код для поиска адреса контроллера I2C
Перед тем, как перейти к основному коду, мы должны сначала найти адрес модуля I2C.
Контроллер I2C имеет встроенный бит ADDRESS, который используется для управления шиной I2C. АДРЕС по умолчанию - 0x27, но в некоторых случаях может быть 0x3f. Итак, чтобы проверить адрес контроллера I2C, подключите схему, как показано выше, загрузите приведенный ниже код и откройте последовательный монитор. Вы увидите адрес в шестнадцатеричном формате.
#включают
Обратите внимание, что мы используем этот адрес в коде нашего ЖК-интерфейса.
В контроллере I2C, как вы можете видеть, есть три перемычки / паяльные площадки, обозначенные как A0, A1 и A2. Они используются для изменения адреса модуля. Вот как адрес изменяется от значения по умолчанию 0x27 или 0x3F, если вы соедините адресные панели вместе. (1 = не подключен. 0 = подключен):
A0 |
A1 |
A2 |
HEX адрес |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
Код для ESP32
Для начала нам понадобится библиотека LiquidCrystal_I2C для ЖК-модуля I2C. Обычная библиотека Liquidcrsytal не будет работать, потому что мы здесь используем I2C.
Загрузите библиотеку с
Код написан таким образом, что все, что набирается на последовательном мониторе, будет отображаться на ЖК-дисплее. Arduino IDE использовалась для написания и загрузки нашего кода.
Во-первых, мы должны включить библиотеку проводов для связи I2C, которая поставляется с Arduino IDE.
#включают
Затем для ЖК-дисплея I2C включите файл LiquidCrystal_I2C.h, загруженный ранее.
#включают
Затем установите адрес ЖК-дисплея I2C на 0x27 или адрес, который вы получили, запустив код сканера, указанный выше, для 16-символьного 2-строчного дисплея.
LiquidCrystal_I2C lcd (0x27, 16,2);
В функции настройки инициализируйте последовательную связь и ЖК-дисплей для 16 символов 2 строки и включите подсветку. Если вы хотите выключить подсветку, используйте lcd .noBacklight () и измените функцию setCursor () в соответствии с вашими предпочтениями.
void setup () { Serial.begin (9600); lcd.init (); lcd.backlight (); lcd.setCursor (0,0); lcd.print («Привет, мир!»); задержка (1000); lcd.setCursor (0,1); lcd.print ("circuitdigest.com"); задержка (3000);
ЖК-дисплей сначала отобразит инструкции по использованию последовательного монитора и введет символы для отображения.
Установите для параметра Serial Monitor значение «No Line Ending»
lcd.clear (); lcd.setCursor (0,0); lcd.print («Использовать сер. монитор»); lcd.setCursor (0,1); lcd.print («Тип для отображения»); }
Функция цикла будет непрерывно проверять любые входящие последовательные данные из последовательного порта с помощью функции Serial.available (). Если есть сообщение, он ждет секунду и печатает сообщение на ЖК-дисплее с помощью функций lcd .write () и Serial.read ().
void loop () {{// когда символы прибывают через последовательный порт… if (Serial.available ()) {delay (100); // немного подождем прибытия всего сообщения lcd.clear (); // очищаем экран while (Serial.available ()> 0) {// читаем все доступные символы lcd.write (Serial.read ()); // выводим каждый символ на ЖК-дисплей}}}}
Код соревнования приведен ниже, поэтому загрузите код и откройте монитор последовательного порта. Затем введите сообщение и нажмите Enter. Ваше сообщение будет отображаться на ЖК-дисплее.
Если вы не получаете правильного ответа или его нет на ЖК-дисплее, проверьте адрес вашего контроллера I2C или отсканируйте его еще раз, используя указанный выше код, чтобы получить правильный адрес.