ELECTRONICS

Библиотека Adafruit SSD1306

В менеджере библиотек
Adafruit SSD1306 by Adafruit
Версия
2.5.17 · всего 49 версий, первая — 1.0.0
Платы
любые — автор не ограничивал
Зависимости
Adafruit GFX Library — менеджер предложит поставить вместе
СкачатьAdafruit_SSD1306-2.5.17.zip · 41 КБ

Архивы — копии из официального индекса Arduino, контрольная сумма совпадает. Сверено 19.10.2026.

Драйвер OLED-дисплеев 0,96″ и 0,91″ на контроллере SSD1306: подключение, буфер экрана, яркость, прокрутка. Текст и фигуры рисует Adafruit GFX.

Дисплей держится в памяти платы как буфер: 128×64 точки — это 1024 байта, половина ОЗУ UNO. Всё рисуется в буфер, потом display() отправляет его на экран целиком.

SSD1306 отвечает за сам экран: включить, очистить, отправить буфер, приглушить, прокрутить. Команды рисования — текст, линии, фигуры, картинки, шрифты — живут в Adafruit GFX, общей для всех дисплеев Adafruit. Менеджер поставит её вместе с SSD1306, а заодно Adafruit BusIO.

У дисплеев 1,3″ часто стоит не SSD1306, а SH1106: для него другая библиотека, Adafruit SH110X, с тем же набором методов.

Как скачать и установить

  1. Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите Adafruit SSD1306 и найдите в списке строку «Adafruit SSD1306 by Adafruit» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить», и на вопрос про зависимости — «Установить всё».
  2. Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
  3. Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте ZIP выше, затем Скетч → Подключить библиотеку → Добавить .ZIP библиотеку и укажите файл. Распаковывать не нужно.

Файл Adafruit_SSD1306.h отдельно не скачивают: он внутри библиотеки и появляется после установки. Если среда пишет Adafruit_SSD1306.h: No such file or directory — библиотека не установлена или установлена не та. Как устроен менеджер и куда складываются файлы — в общей статье про библиотеки.

Строка подключения:

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

Создание объекта — обычно до setup():

Adafruit_SSD1306 display(128, 64, &Wire, -1);         // ширина, высота, шина, вывод сброса (−1 — нет)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);              // в setup(); адрес 0x3C или 0x3D

Методы

Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 2.5.17.

begin(uint8_t switchvcc, uint8_t i2caddr)
Инициализация: SSD1306_SWITCHCAPVCC и адрес 0x3C (реже 0x3D). false — дисплей не ответил или не хватило памяти под буфер.
clearDisplay()
Очистить буфер. Экран изменится после display().
display()
Отправить буфер на экран. Без него ничего не видно.
invertDisplay(bool i)
Инвертировать весь экран — белое на чёрном и наоборот.
dim(bool dim)
Приглушить яркость.
ssd1306_command(uint8_t c)
Команда контроллеру напрямую. Яркость точнее, чем dim(): сначала SSD1306_SETCONTRAST, следом значение 0–255.
startscrollright(uint8_t start, uint8_t stop) / startscrollleft(...)
Аппаратная прокрутка страниц start–stop (0–7 для 64 строк). Идёт сама, без перерисовки.
startscrolldiagright(uint8_t start, uint8_t stop) / startscrolldiagleft(...)
Прокрутка по диагонали.
stopscroll()
Остановить прокрутку. Перед рисованием её останавливают, иначе картинка съедет.
getPixel(int16_t x, int16_t y)
Узнать, горит ли точка в буфере.
setTextSize(uint8_t s) / setCursor(int16_t x, int16_t y) / print(...)
Текст — из Adafruit GFX: размер, место, вывод как в Serial.
drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) / fillRect(...)
Фигуры — тоже из GFX. Полный список — на её странице.

Пример

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

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

void setup() {
  Serial.begin(9600);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("Дисплей не найден");
    while (1);
  }
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
  int value = analogRead(A0);
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("A0:");
  display.setTextSize(3);
  display.setCursor(0, 20);
  display.print(value);
  // полоса-индикатор внизу
  display.drawRect(0, 54, 128, 10, SSD1306_WHITE);
  display.fillRect(0, 54, map(value, 0, 1023, 0, 128), 10, SSD1306_WHITE);
  display.display();
  delay(100);
}
Запустить в симулятореСхема с этим скетчем — запустить в браузере

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

На чём попадаются

begin() не проходит

Адрес 0x3D вместо 0x3C или дисплей на SH1106. Проверьте сканером и посмотрите на маркировку контроллера.

Пустой экран, ошибок нет

Нет display() после рисования — самая частая.

Скетч перестал помещаться в память

Буфер экрана съедает килобайт из двух. На UNO остаётся мало; строки заворачивайте в F(), большие массивы — в PROGMEM.

Картинка сдвинута или полосит

Дисплей 128×32 объявлен как 128×64 или наоборот. Высота задаётся в конструкторе.

Где используется на сайте

Что дальше