Подключение и программирование дисплеев для Arduino и DIY-проектов

Иван Корнев·25 сентября 2026·⏱3 мин

Основные дисплеи для 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 ILI9341240x320 пикселейSPIЦветная графика, сенсорные интерфейсы

OLED-дисплеи компактны и потребляют мало энергии, но имеют малую площадь. LCD 1602 идеален для вывода текста, но не поддерживает графику. TFT-экраны дают полноценную цветную картинку, но требуют больше контактов и ресурсов микроконтроллера.

Схемы подключения по интерфейсам

I2C (OLED и LCD 1602)

Интерфейс I2C требует всего четырех проводов. На платах Arduino Uno/Nano используются аппаратные пины A4 (SDA) и A5 (SCL). На Arduino Mega — пины 20 (SDA) и 21 (SCL).

  1. VCC — к 5V (или 3.3V, если указано на модуле).
  2. GND — к GND.
  3. SDA — к A4 (Uno) или 20 (Mega).
  4. SCL — к A5 (Uno) или 21 (Mega).

SPI (TFT ILI9341)

SPI-подключение требует больше проводов. Для Arduino Uno стандартные пины: MOSI (11), SCK (13). Остальные пины можно назначить программно, но чаще используют стандартную распиновку.

  1. VCC — к 5V или 3.3V (зависит от наличия стабилизатора на плате).
  2. GND — к GND.
  3. CS — к D10.
  4. RESET — к D9 (или к RESET платы).
  5. DC/RS — к D8.
  6. MOSI (SDI) — к D11.
  7. SCK (CLK) — к D13.
  8. 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.