Главная → Дисплеи

OLED-дисплей на SSD1306: обзор, подключение, подводные камни

4 сентября 2026 · Дисплеи

Маленький жёлто-синий или белый экранчик 0,96 дюйма — самый частый дисплей в самодельных приборах. Внутри у него контроллер Solomon Systech SSD1306: он держит в себе видеопамять, сам генерирует высокое напряжение для панели и общается с платой по двум проводам. Разбираемся, что он умеет по паспорту и обо что спотыкаются при сборке.

Подключение OLED-дисплея SSD1306 по шине I2C к Arduino и ESP32
Подключение OLED-дисплея SSD1306 по шине I2C к Arduino и ESP32

Характеристики по документации Solomon Systech

Параметр Значение
Разрешение 128 × 64 точки
Питание логики VDD 1,65…3,3 В
Питание панели VCC 7…15 В (на модулях получается из VDD встроенным преобразователем)
Выходное напряжение на панель до 15 В
Ток сегмента / общего электрода до 100 мкА / до 15 мА
Регулировка яркости 256 ступеней
Видеопамять встроенная, 128 × 64 бита
Интерфейсы I²C, 3- и 4-проводной SPI, параллельный 6800/8080
Рабочая температура −40…+85 °C

Почему на модуле всего четыре ноги

По паспорту панели нужно 7–15 В, а плата даёт 3,3 В. Вопрос закрывает встроенный в контроллер преобразователь (charge pump): на модуле он включён, поэтому наружу выведены только VCC, GND, SCL и SDA. Отсюда же следует, что при программной инициализации нужно явно разрешить этот преобразователь — библиотеки Adafruit и U8g2 делают это сами, а вот в самописном драйвере забытая команда 0x8D даёт чёрный экран при живом контроллере.

Подключение по I²C

OLED     ESP32        Arduino Uno
VCC   -> 3V3          5V (на модуле есть стабилизатор)
GND   -> GND          GND
SCL   -> GPIO 22      A5
SDA   -> GPIO 21      A4

Адрес — 0x3C, реже 0x3D. Дисплей висит на той же шине, что и датчики: BME280 с адресом 0x76 ему не мешает, обе линии тянутся к одним и тем же двум пинам.

Код: вывод показаний

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

Adafruit_SSD1306 oled(128, 64, &Wire, -1);

void setup() {
  if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {   // не завёлся — пробуйте 0x3D
    while (1) delay(10);
  }
  oled.clearDisplay();
  oled.setTextSize(2);
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0, 0);
  oled.print("23.4 C");
  oled.display();       // без этой строки на экране ничего не появится
}

void loop() {}

Самая частая ошибка новичка — забыть display(). Все методы рисуют в буфер в памяти микроконтроллера, и только эта команда выгружает буфер в дисплей.

Три подводных камня

Памяти нужно больше, чем кажется. Библиотека Adafruit держит копию экрана в оперативной памяти: 128 × 64 бита — это 1 килобайт. У Arduino Uno всего 2 килобайта, и после подключения дисплея на всё остальное остаётся половина. Если проект начал вести себя странно после добавления экрана — дело в памяти, а не в дисплее. Лечится переходом на U8g2 в страничном режиме или на плату с большей памятью.

Выгорание. OLED — это светодиоды, и статичная картинка выжигается за месяцы непрерывной работы. В контроллере для этого есть аппаратная прокрутка содержимого, а в прикладном коде помогает сдвиг изображения на пару пикселей раз в минуту и снижение яркости ночью — все 256 ступеней в вашем распоряжении.

Жёлто-синий экран — это не два цвета. Верхние 16 строк матрицы физически залиты жёлтым люминофором, остальные — синим. Управлять цветом нельзя, это свойство панели. Если нужен однотонный вид, берите модуль, где в описании указан белый или синий целиком.

I²C или SPI

По I²C дисплей занимает два провода и общую шину с датчиками, но обновляется медленнее. SPI требует минимум пять проводов, зато выдаёт заметно больше кадров в секунду — это важно только для анимации и графиков в реальном времени. Для показаний датчика температуры раз в две секунды разницы нет никакой: берите I²C.

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Датчики

Тензодатчик и HX711: делаем электронные весы

Почему датчику не обойтись без усилителя Электронные весы — это пара: тензодатчик, превращающий деформацию металла в изменение сопротивления, и АЦП-усилитель, потому что…

Читать обзор →
Моторы и приводы

Шаговый двигатель 28BYJ-48 с драйвером ULN2003: обзор и подключение

Если нужно повернуть вал строго на заданный угол — шторка, задвижка, дозатор корма — берите шаговый мотор. Самый доступный вариант из наборов…

Читать обзор →
Связь

nRF24L01+: радиосвязь между платами без Wi-Fi

Когда датчик надо вынести на улицу, в теплицу или в подвал, тянуть провод неудобно, а Wi-Fi там либо не добивает, либо съедает…

Читать обзор →