- Що таке протокол зв'язку I2C?
- Необхідні матеріали
- Модуль I2C
- Кругова діаграма
- Код для пошуку адреси контролера I2C
- Код для ESP32
У попередньому підручнику OLED взаємодіє з ESP32 за допомогою SPI-зв'язку, яка використовує 5 контактів. У цьому посібнику ми взаємодіємо РК-дисплей 16x2 з ESP32, використовуючи лише 2 висновки, за допомогою зв'язку I2C. Це зменшує кількість контактів, що використовуються ESP32, завдяки чому більша кількість контактів ESP32 залишається вільною для взаємодії різних датчиків.
Що таке протокол зв'язку I2C?
Термін I2C розшифровується як “ Інтегральні мікросхеми”. Зазвичай його позначають як IIC або I в квадраті C або навіть як 2-дротовий інтерфейсний протокол (TWI) в деяких місцях, але все це означає одне і те ж. I2C - це синхронний протокол зв'язку, що означає, що обидва пристрої, які обмінюються інформацією, повинні мати спільний тактовий сигнал. Він має лише два дроти, SDA і SCL для обміну інформацією, з яких SCL використовується для тактового сигналу, а SDA використовується для надсилання та прийому даних.
Ви можете придбати РК-модуль I2C, в якому вбудований РК-контролер I2C1602, або просто придбати контролер I2C для інтерфейсу РК-дисплея 16x2 з ESP32.
Необхідні матеріали
- ESP32
- 16 * 2 РК-дисплей
- РК-контролер I2C
- Провід
- Макет
Модуль I2C
Контролер I2C має мікросхему PCF8574, яка забезпечує дистанційне розширення вводу-виводу загального призначення за допомогою двопровідного двонаправленого послідовного годинника I2C-шини (SCL) та послідовних даних (SDA). Це дуже корисна мікросхема і може бути використана на дошках світлодіодних вивісок, дисплеях, накладках клавіш, промисловому керуванні тощо. Є 8 висновків вводу-виводу, 3 висновки (A0, A1, A2) для адреси шини I2C та виводи SDA, SCL.
Плата контролера РК має вбудований потенціометр для контролю контрастності РК.
Схеми контактів мікросхеми та РК-контролера наведені нижче.
Кругова діаграма
З'єднання для взаємодії РК з ESP32 наведено нижче
- підключіть контакт 1-16 модуля I2C до контакту 1-16 РК-дисплея.
- Контакт SDA модуля I2C -> Контакт SDA ESP32, тобто D21
- Штифт SCL модуля I2C -> Штифт SCL ESP32, тобто D22
Я підключив 3v ESP32 до 5v 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 |
А1 |
А2 |
Шістнадцяткова адреса |
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.
Завантажте бібліотеку з цього
Код написаний таким чином, що все, що введено на послідовному моніторі, відображатиметься на РК-дисплеї. ID середовища Arduino використовувався для написання та завантаження нашого коду.
По-перше, ми повинні включити дротову бібліотеку для зв'язку I2C, яка постачається з IDE Arduino.
#включати
Тоді для I2C LCD включіть LiquidCrystal_I2C.h, завантажений раніше.
#включати
Потім встановіть для РК-адреси I2C значення 0x27 або адресу, яку ви отримали, запустивши код сканера, наведений вище, для 16- символьного 2-рядкового дисплея
Рідкий кристал LiquidCrystal_I2C (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);
На РК-дисплеї спочатку відображатимуться вказівки щодо використання послідовного монітора та введення символів для відображення.
Встановіть для параметра Серійний монітор значення "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 (); // очищаємо екран, поки (Serial.available ()> 0) {// читаємо всі доступні символи lcd.write (Serial.read ()); // відображення кожного символу на РК-дисплеї}}}}
Код конкуренції наведено нижче, тому завантажте код і відкрийте послідовний монітор. Потім введіть повідомлення та натисніть Enter. Ваше повідомлення відобразиться на РК-дисплеї.
Якщо на РК-дисплеї ви не отримали належної відповіді або не отримали відповіді, перевірте адресу свого контролера I2C або відскануйте її за допомогою вказаного вище коду, щоб отримати правильну адресу.