В небольших устройствах тоже бывает нужно вывести какую-либо полезную информацию, сохраняя компактные габариты. Обычные экраны, вроде Nokia 3310, не обеспечивают достаточного разрешения, к тому же их не видно в темноте. В различных плеерах, электронных сигаретах и прочем давно уже используют компактные OLED-дисплеи с большим для их габаритов разрешением – так чем наши проекты хуже?
Краткий обзор модуля
OLED-экраны на базе контроллера SSD1306 популярны благодаря простому подключению, относительно низкой цене и высокому разрешению – для экрана диагональю 0.96 дюйма разрешение составляет аж 128×64! У того же Nokia 3310 разрешение составляет 84×48 пикселей при диагонали 1.5”.
Важным плюсом OLED-экранов является работа без подсветки – каждый пиксель – сам себе подсветка. За счёт такой системы, экран потребляет крайне мало тока (фактически, его можно запитать от пина Arduino). Есть и один минус – при постоянном использовании отдельные пиксели начинают выгорать и терять яркость, но до наступления этого состояния вы успеете отладить и вывести всё, что только можно.
Дисплей подключается по высокоскоростному интерфейсу I2C (относительно высокоскоростному – до 400Кбод) и использует всего 2 сигнальных провода. Это ещё один неоспоримый плюс! Несмотря на то, что интерфейс последовательный, да ещё и данные в обе стороны идут по одной линии, на рядовой Arduino можно достичь порядка 15-20fps, чего более чем достаточно для проектов.
Стоит заметить, что дисплей монохромный – цветные картинки на него не выведешь, а для текста или графика хватит и двух цветов.
Схема подключения
Всего у дисплея 4 пина – VCC, GND, SDA, SCL. VCC и GND подключаются к VCC и GND Arduino соответственно (чтобы перестраховаться, лучше питать дисплей от пина 3.3В – не на всех модулях стоят понижающие преобразователи), а линии данных находятся у каждой версии Arduino на разных пинах. У Uno (Nano, Pro Mini и других платах на ATMega328/168) SDA – A4, SCL – A5. У Mega – SDA – 20, SCL – 21.
На платах 3 ревизии контакты интерфейса выведены перед 13 пином на гребёнке и подписаны соответственно.
Подключение в Arduino IDE
Для экрана написано множество библиотек, его поддерживает в том числе и универсальная U8g2.
Для управления дисплеем нам потребуются две библиотеки:
1) Adafruit_GFX_Library — мы её уже ставили, когда подключали Nokia 5110
2) Adafruit_SSD1306 — библиотека для управления именно OLED дисплеями
Устанавливаем обе библиотеки в Arduino IDE, и пробуем вывести наш любимый «Hello world!»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include "SPI.h" #include #include #include #define SCREEN_WIDTH 128 // Ширина дисплея в пикселях #define SCREEN_HEIGHT 64 // Высота дисплея в пикселях // Объявляем, что SSD1306 подключен по I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(115200); // инициализация и очистка дисплея if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); display.clearDisplay(); display.setTextSize(1); // установка размера шрифта display.setTextColor(WHITE); // установка цвета текста display.setCursor(0, 10); // установка курсора // Display static text display.println("Hello, world!"); display.display(); } void loop() { } |
2 комментария. Оставить новый
А почему у вас название статьи “OLED I2C 128 x 64 px – схема подключения к Arduino” и текст вроде бы об этом, а картинка и скетч от дисплея, подключенного по SPI ?
Непорядок )
Вы, если что-то меняете, то объявляйте это явно.
Спасибо, поправили! Вся остальная информация корректна – перепроверили 🙂