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

Дисплеи на базе SSD1351 часто продаются в виде модулей с SPI-подобным интерфейсом, диагональю 1.5″ и разрешением 128 x 128 пикселей. Распиновка модулей совместима с распиновкой аналогичных модулей на базе SSD1306. Цена устройства составляет около 12$, что сопоставимо с ценой дисплеев на базе SSD1306 с такой же диагональю. Еще я видел варианты дисплеев 1.27″ 128 x 96 и 0.95″ 96 x 64. Однако почему-то цена таких урезанных модулей выше, чем цена полноразмерного модуля. Поэтому я не думаю, что когда-нибудь стану использовать их в своих проектах. Купить экранчики можно на 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.

EnglishRussianUkrainian