Работа с цветными OLED-экранчиками на базе SSD1351

3 сентября 2018

OLED-экранчики на базе SSD1306 / SSD1309 / SH1106 пользуются большой популярностью как в DIY сообществе, так и индустрии, благодаря своей яркости, широкому углу обзора и небольшой цене. Но при этом они способны выводить только бинарное изображение. В качестве альтернативы, лишенной этого досадного недостатка, можно предложить экранчики на базе контроллера SSD1351. По большому счету, они полостью аналогичны экранчикам на базе SSD1306, но выводят изображение в 16-и битном цвете.

Дисплеи на базе SSD1351 часто продаются в виде модулей с SPI-подобным интерфейсом, диагональю 1.5" и разрешением 128x128 пикселей. Распиновка модулей совместима с распиновкой аналогичных модулей на базе SSD1306. Цена устройства составляет около 12$, что сопоставимо с ценой дисплеев на базе SSD1306 с такой же диагональю. Еще я видел варианты дисплеев 1.27" 128x96 и 0.95" 96x64. Однако почему-то цена таких урезанных модулей выше, чем цена полноразмерного модуля. Поэтому я не думаю, что когда-нибудь стану использовать их в своих проектах. Купить экранчики можно на eBay. Также они доступны в магазине Adafruit, но там они стоят заметно дороже.

Если вы используете Arduino, советую обратить внимание на библиотеку Adafruit SSD1351. Данная библиотека просто работает, поэтому не будем на ней подробно останавливаться. Я же в последнее время предпочитаю микроконтроллеры STM32. Беглое гугление не выявило готовой библиотеки под это семейство МК, поэтому пришлось написать свою.

Оказалось, что SSD1351 использует протокол, крайне похожий на протокол SSD1306, ST7735 и ILI9341, только коды команд немного другие, и отличается последовательность команд, необходимая для инициализации устройства. Поскольку ранее я уже писал библиотеки для всех этих экранчиков, а также имел перед глазами код Adafruit SSD1351, написать и отладить еще одну библиотеку заняло от силы два часа. Она имеет интерфейс, аналогичный интерфейсу предыдущих библиотек, и тоже основана на HAL:

void SSD1351_Init(void);
void SSD1351_DrawPixel(uint16_t x, uint16_t y, uint16_t color);
void SSD1351_WriteString(uint16_t x, uint16_t y, const char* str,
    FontDef font, uint16_t color, uint16_t bgcolor);
void SSD1351_FillRectangle(uint16_t x, uint16_t y,
    uint16_t w, uint16_t h, uint16_t color);
void SSD1351_FillScreen(uint16_t color);
void SSD1351_DrawImage(uint16_t x, uint16_t y,
    uint16_t w, uint16_t h, const uint16_t* data);
void SSD1351_InvertColors(bool invert);

Пример вывода текста:

Вывод текста на OLED-экранчик на базе SSD1351

Исходники библиотеки с примером ее использования вы найдете на GitHub.

Лично я нахожу OLED-экранчики на базе SSD1351 крайне приятными в использовании. И хотя TFT-экранчики на базе ST7735 предложат то же разрешение и количество цветов за существенно меньшие деньги (~4$), они конструктивно менее надежны, уязвимы к нажатиям и их крайне нежелательно отмывать в ультразвуковой ванне. Если вы не планируете серийное производство и хотите, чтобы ваше устройство надежно служило в течение многих лет, при прочих равных я бы отдал предпочтение SSD1351.

Метки: , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.