Подключение и программирование дисплеев для Arduino и DIY-проектов
Основные дисплеи для Arduino и DIY-проектов — OLED (I2C), LCD 1602 и TFT (SPI). Подключаются они к шинам I2C (SDA/SCL) или SPI (MOSI/SCK), а программируются через библиотеки U8g2 или Adafruit GFX.
Оглавление
Выбор дисплея: OLED, LCD и TFT
Для любительской электроники используют три основных типа экранов. Выбор зависит от требуемой графики и объема выводимых данных.
| Тип дисплея | Разрешение | Интерфейс | Применение в DIY |
|---|---|---|---|
| OLED 0.96" (SSD1306) | 128x64 пикселя | I2C | Меню, статусы, показания датчиков |
| LCD 1602 с I2C-адаптером | 16x2 символа | I2C | Простой текст, таймеры, логи |
| TFT ILI9341 | 240x320 пикселей | SPI | Цветная графика, сенсорные интерфейсы |
OLED-дисплеи компактны и потребляют мало энергии, но имеют малую площадь. LCD 1602 идеален для вывода текста, но не поддерживает графику. TFT-экраны дают полноценную цветную картинку, но требуют больше контактов и ресурсов микроконтроллера.
Схемы подключения по интерфейсам
I2C (OLED и LCD 1602)
Интерфейс I2C требует всего четырех проводов. На платах Arduino Uno/Nano используются аппаратные пины A4 (SDA) и A5 (SCL). На Arduino Mega — пины 20 (SDA) и 21 (SCL).
- VCC — к 5V (или 3.3V, если указано на модуле).
- GND — к GND.
- SDA — к A4 (Uno) или 20 (Mega).
- SCL — к A5 (Uno) или 21 (Mega).
SPI (TFT ILI9341)
SPI-подключение требует больше проводов. Для Arduino Uno стандартные пины: MOSI (11), SCK (13). Остальные пины можно назначить программно, но чаще используют стандартную распиновку.
- VCC — к 5V или 3.3V (зависит от наличия стабилизатора на плате).
- GND — к GND.
- CS — к D10.
- RESET — к D9 (или к RESET платы).
- DC/RS — к D8.
- MOSI (SDI) — к D11.
- SCK (CLK) — к D13.
- LED — к 5V (через резистор 100 Ом для ограничения тока подсветки).
Дисплеи TFT (ILI9341) часто работают на логике 3.3В. При подключении к 5В-платам Arduino (например, Uno) обязательно используйте преобразователи уровней (logic level shifter) для линий данных, иначе экран может сгореть.
Программирование и библиотеки
Для работы с экранами в Arduino IDE необходимо установить соответствующие библиотеки через «Менеджер библиотек» (Инструменты -> Управлять библиотеками).
OLED (SSD1306) и U8g2
Библиотека U8g2 поддерживает большинство монохромных дисплеев.
#include <U8g2lib.h>
#include <Wire.h>
// Инициализация для I2C OLED 128x64
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void setup() {
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB08_tr);
}
void loop() {
u8g2.clearBuffer();
u8g2.drawStr(10, 20, "Hello DIY!");
u8g2.sendBuffer();
delay(1000);
}
TFT (ILI9341) и Adafruit GFX
Для цветных экранов используется связка Adafruit_ILI9341 и Adafruit_GFX.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.begin();
tft.setRotation(1);
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.print("DIY Project");
}
void loop() {}
Частые ошибки
- Неверный I2C-адрес. OLED-дисплеи SSD1306 чаще всего имеют адрес
0x3C, но некоторые партии используют0x3D. LCD-адаптеры PCF8574 обычно имеют адрес0x27или0x3F. Если экран не реагирует, используйте скетч I2C_Scanner для поиска устройства. - Отсутствие подтяжки в длинных линиях. Встроенные pull-up резисторы на модулях рассчитаны на короткие провода. Если длина шин SDA/SCL превышает 30 см, добавьте внешние резисторы 4.7 кОм между SDA и VCC, а также SCL и VCC.
- Белый экран на TFT. Возникает, если не инициализирован SPI или неверно указан пин CS/DC. Убедитесь, что в коде пины совпадают с физической распайкой.
FAQ
Как узнать точный I2C-адрес дисплея?
Загрузите в Arduino стандартный скетч I2C_Scanner (доступен в примерах библиотеки Wire или в интернете). Он просканирует шину и выведет в Serial Monitor HEX-адрес найденного устройства.
Почему TFT-дисплей показывает только белый экран?
Это означает, что подсветка работает, но контроллер дисплея не получает данных. Проверьте правильность подключения пинов CS, DC и MOSI. Убедитесь, что в коде указан верный драйвер (ILI9341, а не, например, ST7735) и вызван метод tft.begin().
Можно ли подключить два OLED-дисплея к одной шине I2C?
Да, если у них разные аппаратные адреса (например, 0x3C и 0x3D). Если адреса одинаковы, потребуется дисплей с перемычкой для смены адреса или аппаратный мультиплексор TCA9548A.