Уроки / Урок 5

Первый текст на экране

Подключаем встроенный OLED 72×40 через U8g2.

Экран подключён к шине I2C: SDA — GPIO5, SCL — GPIO6. Контроллер — SSD1306, но видна только часть его памяти: 72 точки в ширину и 40 в высоту. В U8g2 для этого есть отдельный конструктор, который сам учитывает смещение.

#include <U8g2lib.h>
#include <Wire.h>

// Встроенный экран 0.42": контроллер SSD1306, видимая область 72×40.
// Аргументы: поворот, вывод сброса (нет), SCL = GPIO6, SDA = GPIO5.
U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 6, 5);

void setup() {
  u8g2.begin();
}

void loop() {
  u8g2.clearBuffer();                // очистить картинку в памяти
  u8g2.drawFrame(0, 0, 72, 40);      // рамка по краю экрана
  u8g2.setFont(u8g2_font_6x10_tf);
  u8g2.drawStr(6, 16, "Hello!");     // x, y — y задаёт нижнюю линию текста
  u8g2.drawStr(6, 30, "ESP32-C3");
  u8g2.sendBuffer();                 // отправить картинку на экран
  delay(1000);
}

Как рисует U8g2

  • Всё рисуется в буфер в памяти, а sendBuffer() отправляет его на экран целиком.
  • Координаты: (0, 0) — левый верхний угол, (71, 39) — правый нижний.
  • У текста y — это нижняя линия букв, а не верх.

Экран показывает картинку криво или со сдвигом? Убедитесь, что используется именно U8G2_SSD1306_72X40_ER_F_HW_I2C, а не конструктор для 128×64.