ELECTRONICS

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

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

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

Графика для дисплеев Adafruit и совместимых: текст, линии, фигуры, картинки, шрифты. Работает поверх драйвера экрана — SSD1306, SH1106, ST7735, ILI9341.

GFX сама с экраном не разговаривает: это набор команд рисования, общий для всех драйверов. Класс драйвера — Adafruit_SSD1306, Adafruit_ST7735, Adafruit_ILI9341 — наследует GFX, поэтому drawLine() или print() пишутся одинаково для любого экрана. Меняется только объект и строка его создания.

Координаты — в точках от левого верхнего угла: x вправо, y вниз. Цвет — 16-битное число: у монохромного OLED это SSD1306_WHITE и SSD1306_BLACK, у цветных экранов — формат RGB565, например 0xF800 — красный.

Отдельно GFX обычно не ставят: менеджер предлагает её как зависимость драйвера. Но ищут её почти вдвое чаще, чем драйвер SSD1306, — потому что именно в ней живут шрифты и вопрос «как вывести русский текст».

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

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

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

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

#include <Adafruit_SSD1306.h>   // драйвер вашего дисплея
#include <Adafruit_GFX.h>

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

Adafruit_SSD1306 display(128, 64, &Wire, -1);   // объект драйвера — он и есть GFX
// все методы ниже вызываются у него: display.drawLine(...)

Методы

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

drawPixel(int16_t x, int16_t y, uint16_t color)
Одна точка.
drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)
Линия между двумя точками.
drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) / drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)
Горизонтальная и вертикальная линия — заметно быстрее drawLine().
drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) / fillRect(...)
Прямоугольник контуром или заливкой: угол, ширина, высота.
drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color) / fillRoundRect(...)
Прямоугольник со скруглёнными углами радиуса r.
drawCircle(int16_t x, int16_t y, int16_t r, uint16_t color) / fillCircle(...)
Окружность и круг: центр и радиус.
drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color) / fillTriangle(...)
Треугольник по трём вершинам.
fillScreen(uint16_t color)
Залить весь экран одним цветом.
drawBitmap(int16_t x, int16_t y, const uint8_t bitmap[], int16_t w, int16_t h, uint16_t color)
Монохромная картинка из массива в PROGMEM: бит на точку, строка дополняется до целого байта.
setCursor(int16_t x, int16_t y)
Куда печатать. Для встроенного шрифта — левый верхний угол символа, для шрифтов из Fonts/ — базовая линия.
setTextSize(uint8_t s)
Увеличение шрифта: 1 — встроенные 6×8 точек, 2 — вдвое крупнее.
setTextColor(uint16_t c) / setTextColor(uint16_t c, uint16_t bg)
Цвет текста; второй вариант ещё и закрашивает фон под буквами — только у встроенного шрифта.
setTextWrap(bool w)
Переносить ли длинную строку на следующую. false — строка уходит за край.
print(...) / println(...)
Вывести текст или число, как в Serial.
setFont(const GFXfont *f)
Шрифт из папки Fonts/ библиотеки: setFont(&FreeSans9pt7b). setFont() без аргумента — вернуть встроенный.
getTextBounds(const char *str, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h)
Размер надписи до вывода — для центровки и выравнивания по правому краю.
cp437(bool x)
Включить правильную таблицу символов встроенного шрифта. Без неё часть символов после 176-го сдвинута на один.
setRotation(uint8_t r)
Повернуть систему координат: 0–3, по 90°.
width() / height()
Размер экрана в точках с учётом поворота.

Пример

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>

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

// строка по центру экрана по горизонтали
void printCentered(const char *text, int16_t y) {
  int16_t x1, y1;
  uint16_t w, h;
  display.getTextBounds(text, 0, y, &x1, &y1, &w, &h);
  display.setCursor((display.width() - w) / 2 - x1, y);
  display.print(text);
}

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);

  display.setFont(&FreeSans9pt7b);   // курсор — на базовой линии, поэтому y = 20, а не 0
  printCentered("Niro", 20);
  display.setFont();                  // обратно встроенный 6×8

  display.drawRoundRect(0, 28, 128, 36, 6, SSD1306_WHITE);
  display.fillCircle(24, 46, 10, SSD1306_WHITE);
  display.fillTriangle(52, 56, 64, 36, 76, 56, SSD1306_WHITE);
  display.drawLine(90, 36, 116, 56, SSD1306_WHITE);
  display.display();
}

void loop() {}

Пример на OLED SSD1306, но всё, кроме строки создания объекта и begin(), без изменений работает на любом дисплее с драйвером на GFX.

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

Вместо русских букв — кракозябры

Встроенный шрифт — таблица символов CP437, кириллицы в ней нет, а строки в скетче записаны в UTF-8. Проще всего библиотека U8g2_for_Adafruit_GFX: она рисует кириллические шрифты U8g2 поверх любого дисплея на GFX. Второй путь — свой шрифт: конвертер fontconvert лежит в папке библиотеки и делает GFXfont из TTF. Распространённая замена файла glcdfont.c на русифицированный работает, но слетает при каждом обновлении библиотеки.

Текст со шрифтом из Fonts/ уехал вверх и обрезан

У этих шрифтов курсор — базовая линия, а не верхний угол: setCursor(0, 0) рисует строку выше экрана. Ставьте y не меньше высоты шрифта — для 9pt это около 13.

Цифры наслаиваются друг на друга

setTextColor(c) рисует только сами буквы, старые не стираются. У встроенного шрифта поможет setTextColor(цвет, фон); у шрифтов из Fonts/ фона нет вовсе — затирайте место fillRect() перед выводом.

Вместо значка градуса другой символ

Без cp437(true) символы после 176-го сдвинуты на один. Включите её в setup() и выводите градус как print((char)248).

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

Что дальше