Для взаимодействия с 128×64 пиксельным монитором на чипе SSD1306 потребуются четыре провода: VCC (3.3V), GND, SCL (A5) и SDA (A4). Библиотека Adafruit_SSD1306 упрощает инициализацию – после установки через менеджер плат добавьте #include
Связь монохромного экрана с микроконтроллером
Установите библиотеку Adafruit_SSD1306 через менеджер библиотек в среде разработки. Добавьте зависимости Adafruit_GFX и Adafruit_BusIO, иначе код не скомпилируется.
Проверьте работу экрана с минимальным скетчем:
#include
#include
#include
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Тест");
display.display();
}
void loop() {}
Если символы не отображаются, проверьте контрастность командой display.ssd1306_command(SSD1306_SETCONTRAST, 0xFF)
. Для графики используйте drawLine()
, drawRect()
или drawCircle()
, но не забывайте вызывать display()
после внесения изменений.
При мерцании увеличьте задержку между обновлениями до 50–100 мс. Для экономии памяти храните часто используемые элементы в PROGMEM.
Выбор подходящего OLED и его распиновка
SSD1306 – оптимальный вариант для большинства проектов. Разрешение 128×64 пикселей, поддержка I2C и SPI, низкое энергопотребление. Модели с диагональю 0.96″ и 1.3″ совместимы с большинством плат.
Если нужен больший экран, рассмотрите SH1106 (128×64, но с другой архитектурой памяти). Для цветных проектов подойдет SSD1331 (96×64, 16-битный цвет), но он дороже и сложнее в настройке.
Перед покупкой проверьте напряжение логики: 5 В или 3.3 В. Большинство модулей имеют встроенный преобразователь, но дешевые аналоги могут сгореть от 5 В.
Распиновка указывается на обратной стороне платы или в даташите. Если контакты не подписаны, ищите маркировку: SDA (данные), SCL (такты) для I2C; DIN (вход), CLK (синхронизация) для SPI.
Установите Adafruit_SSD1306 и Adafruit_GFX через менеджер библиотек в среде разработки. Для I²C укажите размер экрана (128×64 или 128×32) и адрес (обычно 0x3C или 0x3D) в конструкторе:
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
В setup() инициализируйте экран:
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Ошибка инициализации");
while(1);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(10, 10);
display.println("Текст");
display.display();
Рисование линий и фигур:
display.drawLine(0, 0, 127, 63, SSD1306_WHITE);
display.drawRect(20, 20, 50, 30, SSD1306_WHITE);
display.fillCircle(64, 32, 10, SSD1306_WHITE);
display.display();
Обновляйте содержимое только при изменениях, чтобы избежать мерцания. Для анимации очищайте буфер перед каждым кадром:
display.clearDisplay();
// Рисование нового кадра
display.display();
delay(100);