Библиотека Adafruit SSD1306
- В менеджере библиотек
- Adafruit SSD1306 by Adafruit
- Версия
- 2.5.17 · всего 49 версий, первая — 1.0.0
- Платы
- любые — автор не ограничивал
- Зависимости
- Adafruit GFX Library — менеджер предложит поставить вместе
Архивы — копии из официального индекса 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, с тем же набором методов.
Как скачать и установить
- Через менеджер — самый простой путь. В Arduino IDE: Инструменты → Управлять библиотеками (Ctrl+Shift+I). Введите
Adafruit SSD1306и найдите в списке строку «Adafruit SSD1306 by Adafruit» — одноимённых библиотек бывает несколько, отличаются они автором. Нажмите «Установить», и на вопрос про зависимости — «Установить всё». - Конкретная версия — если в чужом проекте указана не последняя. В той же карточке менеджера рядом с кнопкой есть выпадающий список версий: выберите нужную и нажмите «Установить».
- Из архива — если нет интернета на рабочем компьютере или менеджер не открывается. Скачайте 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 или наоборот. Высота задаётся в конструкторе.