Главная » Ардуино » OLED-дисплей 128×32 I2C с контроллером SSD1306

OLED-дисплей 128×32 I2C с контроллером SSD1306

В некоторых проектах на микроконтроллерах использование крошечных дисплеев может быть оптимальным решением для отображения необходимой информации. Например, информации полученной от какого-либо внешнего датчика.

Сегодня мы рассмотрим как можно использовать популярный и компактный монохромный графический OLED-дисплей I2C 128×32 совместно с Arduino.

Это модуль OLED-дисплея 128×32 с диагональю 0,91 дюйма со встроенным контроллером SSD1306 осуществляет обмен данными через шину I2C. Поскольку контроллер SSD1306 предназначен для OLED-дисплея 128×64, а наш дисплей имеет всего 128×32 пикселей, то здесь используется только часть буфера SSD1306.

OLED модуль имеет удобный формфактор для использования совместно с макетной платой (4 контакта на задней стороне модуля). Будьте осторожны, дисплей очень тонкий и хрупкий, поэтому при установке на макетную плату нажимайте только на область контактов и ни в коем случае не нажимайте на на сам дисплей!

SSD1306 — это однокристальный CMOS драйвер OLED / PLED с графическим контроллером для светодиодной матрицы 128×64. Контроллер предназначен для OLED-дисплеев с общим катодом.

Данный OLED-дисплей, как и многие другие модули, хорошо работает с большинством микроконтроллеров с напряжением питания 3,3 В и 5 В. Поскольку связь осуществляется через интерфейс I2C, то для соединения дисплея с микроконтроллером необходимы только два провода — SCL и SDA. По умолчанию I2C адрес для этого OLED-дисплея — 0x3C. Вы можете посмотреть более подробную информацию о I2C в datasheet SSD1306 (стр. 20).

И так перейдем к делу. Чтобы данный OLED-дисплей заработал с Arduino, необходимо подключить несколько библиотек. Библиотека Wire предназначенная для работы с I2C — по умолчанию присутствует в Arduino IDE. Библиотеки SSD1306 и «GFX» нам придется установить самостоятельно.

Ниже показаны выводы для соединения Arduino и OLED-дисплея:

соединения Arduino и OLED-дисплея

Вот пример кода для теста:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> 
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire); 
void
setup() {
  Serial.begin(9600);
  if (!display.begin(SSD1306_SWITCHCAPVCC,0x3C)) {
    Serial.println(F("SSD1306 Allocation Failed"));
    for (;;);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("Hello 128×32 OLED");

  display.println("Hello Arduino Uno");
  display.println("Quick Test Example");
  display.println("Thank You!");
  display.display();
}
void
loop() {
}

Этот небольшой код просто печатает произвольный текст в 4 разных строках на OLED-дисплее.

Однако, чтобы увидеть демонстрацию его полной графической мощи, вы можете попробовать примеры идущие вместе с библиотекой Adafruit SSD1306 Arduino.

Теперь загрузите следующий скетч, не меняя настройки. Что вы видите? Это похоже на изображение, показанное после скетча?

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);

void
setup(void) {
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void
loop() {
  display.clearDisplay ();
  display.setCursor (10, 5);
  display.setTextSize (2);
  display.setTextColor (WHITE);
  display.print ("Hello");
  display.setCursor (10, 23);
  display.setTextSize (1);
  display.print ("Friends…");
  delay (1000);
  display.drawCircle (110, 15, 15, WHITE); // Head frame
  display.drawCircle (105, 14, 4, WHITE); // Left eye
  display.drawCircle (115, 14, 4, WHITE); // Right eye
  display.drawPixel (103, 22, WHITE); // Mouth
  display.drawPixel (118, 22, WHITE); // Mouth
  display.drawPixel (104, 23, WHITE); // Mouth
  display.drawPixel (117, 23, WHITE); // Mouth
  display.drawPixel (105, 24, WHITE); // Mouth
  display.drawPixel (116, 24, WHITE); // Mouth
  display.drawLine (106, 25, 115, 25, WHITE); // Mouth
  display.display ();
  delay (1000);
}

результат

Как это возможно? Отличный вопрос! Видите ли, все дело в том, что OLED дисплей состоит из пикселей, представляют собой крошечные квадраты, которые можно включить или выключить.

Таким образом, адресовав каждый отдельный пиксель, можно создавать и отображать простые графические элементы, такие как не закрашенные и закрашенные круги, сегменты круга, эллипсы, линии, прямоугольники и треугольники.

Вам нужно помнить, что координатная плоскость состоит из оси X и оси Y. Горизонтальная ось (левая и правая) — это ось X, а вертикальная ось (вверх и вниз) — ось Y. И, когда мы хотим отобразить точку в координатной сетке, мы задаем ей значение X и значение Y.

Чтобы проиллюстрировать это, внимательно посмотрите на рисунок ниже. Здесь правый глаз смайлика имеет значение X=8 и значение Y=2, поэтому математически мы могли бы записать координаты этой точки как (8, 2).

Возвращаясь к нашему скетчу, который мы привели выше, команда:

display.drawPixel (103, 22, WHITE);

указывает Arduino включить пиксель, расположенный в координате (103, 22), то есть 103 пикселя в направлении X и 22 пикселя в направлении Y.

Аналогичным образом команда:

display.drawCircle (105, 14, 4, WHITE);

указывает Arduino нарисовать круг с координатами центра (105, 14) и радиусом 4.

OLED-дисплей 128×32 с шиной I2C очень легко установить и запустить, поскольку он имеет встроенный регулятор напряжения.

Однако у вас нет простого варианта изменить его адрес установленный по умолчанию (хотя не некоторых моделях с помощью одного или нескольких SMD резисторов это можно сделать).

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*