Дисплей st7789 st7735 вывод изображения подключение к esp8266

Дисплеи ST7735 и ST7789. Подключаем к ESP8266, выводим изображение без SD карты.

Недавно заказал с алиэкпресс интересный экран, достаточно маленького размера, всего 1.44 дюйма, но обладающий разрешением 240х240 пикселей на матрице IPS, и обладающий SPI контроллером ST7789, т.е. его можно подружить с библиотекой Adafruit. Появление таких качественных экранов по бросовой цене, могу объяснить только тем, что возможно их сделали огромную партию под какие-нибудь смарт-часы или похожие устройства.

К AVR подключать его не сильно хотелось, ведь его тактовая частота выводит изображения с сильной задержкой, и я решил протестировать его на ESP8266. Конечно особой информации в сети не нашлось, но вроде стандартная библиотека, судя по быстрому описанию на гитхабе, позволяла легко его подключить (хаха, не тут то было). Добавляем библиотеку в Arduino IDE

Открываем пример graphictest, который появится у нас после добавления библиотеки, и видим много ifdef, для разных чипов, и вариантов подключений. Я эти куски сразу почистил, до лаконичных выводов, которые мне нужны. Собственно, какую-то часть менять не нужно, так как она завязана на аппаратный SPI

#define TFT_CS         D2
#define TFT_RST        D3
#define TFT_DC         D4
//
// define not needed for all pins; reference for ESP32 physical pins connections to VSPI:
// SDA  GPIO23 aka VSPI MOSI
// SCLK GPIO18 aka SCK aka VSPI SCK
// D/C  GPIO21 aka A0 (also I2C SDA)
// RST  GPIO22 aka RESET (also I2C SCL)
// CS   GPIO5  aka chip select
// LED  3.3V
// VCC  5V
// GND - GND

Тут я всё понял, когда посмотрел на выводы дисплея, ведь зашитая на спех программа ничего не отобразила на дисплее. Причину нашёл быстро, ведь я никуда не подключил вывод CS. Стоп, а где он?

Смотрите также:  Управляем шаговым двигателем

Почему-то китайцы решили, что он не нужен (и да, можно выйти из ситуации программно, но стандартная библиотека использует его, а паяльника я боюсь меньше, чем программирования). Нашёл этот дисплей ещё раз на алиэкпресс, и о чудо, на самой матрице вывод обнаружился

К сожалению вывод CS был припаян к земле, и я решил, что его переходной контакт будет под экраном и аккуратно ножом сдёрнул его.

Но там его не оказалось, и остался вариант сложнее – полностью отпаять шлейф экрана, что было не просто, ведь его легко порвать. Кстати теперь сам дисплей можно использовать в своих устройствах без этой синей площадки. Распаять его достаточно легко на свою плату, изготовленную ЛУТом например, шаг выводов позволяет.

Контакт этот я срезал ножом, что он не контактировал с контактом GND, это делать нужно тоже аккуратно.

Теперь запаиваем обратно шлейф матрицы, и к выводу CS припаиваем уже свой провод, который можно подключить в ESP8266.

Итоговая схема подключения дисплея на ST7789 (и ST7735) получилась такая

Смотрите также:  hc-sr04

Ещё раз пройдёмся по коду из примера graphictest из библиотеки st7789 и st7735

Как я писал выше, я убрал все замены ifdef, и оставил выводы, которые точно буду использовать (выше в статье). ЗАтем закомментировал ненужный контроллер, и раскомментировал тот, что установлен в этом дисплее

// For 1.54" TFT with ST7789:
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

Также раскомментировал строку, с разрешением, которое мне нужно. Остальные удалил

  // OR use this initializer (uncomment) if using a 1.54" 240x240 TFT:
  tft.init(240, 240);           // Init ST7789 240x240

Вот теперь, при подключённом выводе CS демка сразу заработала. Значит нам доступны все функции библиотек adafruit_gfx. Скорость работы намного выше, чем у AVR.

Чтобы оценить качество экрана в полной мере, лучше вывести изображение, обычно это делается с micro-sd карты, но в самом экране её нет (хотя у adafruit вроде есть версии с флеш-слотом). Вспомнив, что у ESP8266 достаточно много собственной памяти для программ, решил попробовать записать изображение в память программы. Для этого можно воспользоваться ссылкой

Смотрите также:  Тестируем термовакуумный станок.

Загружаем картинку нужного разрешения, и конвертируем в *.с файл. Далее, я чищу header этого файла, переименовываю в *.h, кладу в папку с проектом, и подключаю командой

#import "*.h"

Файл очень большой, и когда он лежит в проекте занимает много места. Каждый пиксель описывается в 16 битной цветовой гамме, и это конечно избыточно, замедляет вывод изображения. В самом файле картинки нас интересует переменная памяти программ, я назвал её DogBitmap

const unsigned short DogBitmap[57600] PROGMEM={
код картинки
}

Теперь простой командой из библиотеки adafruit можно вывести её на экран

tft.drawRGBBitmap(0, 0, DogBitmap, 240, 240);

Где, первые два аргумента (0,0) – это стартовая позиция отрисовки, потом имя нашей переменной, и затем размеры изображения по ширине и высоте (240х240). Смотрим результат. Картинку я взял из известных стикеров Вконтакте.

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

6 комментариев к “Дисплеи ST7735 и ST7789. Подключаем к ESP8266, выводим изображение без SD карты.”

  1. Konstantin Lazarev

    Ничего паять не надо.

    // ST7735 TFT module connections
    #define TFT_DC D3 // TFT DC pin is connected
    #define TFT_RST D4 // TFT RST pin is connected
    #define TFT_CS -1 // TFT CS pin is NOT connected

    // initialize ST7789 TFT library with hardware SPI module
    // SCK (SCL) —> NodeMCU pin D5 (GPIO14)
    // MOSI(SDA) —> NodeMCU pin D7 (GPIO13)

    // initialize ST77XX TFT library
    Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

    void setup(){
    tft.init(240, 240, SPI_MODE2); // initialize a ST7789 chip, black tab
    }

  2. Вопрос – вы документацию на эти экраны нигде не видели? datasheet в смысле. хочется уверенности при разводке платы.

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

  3. Hei ! Thanks a lot, this help me a lot to do some surgery on my Display!

    I have these info in hand about the pinout but not sure about that CS pin yet because only have 1 board and no replacement if I open it later.

    So I am using the library with CS Pin disable for so long but I need that CS Pin enable because want to connect SD Card as well (so the image stored in SD Card), sharing SPI, so yes … Your info now can be use to make this display have CS Pin and I can share it with SD Card pin later !

    Will do some surgery after reaching home, thanks again for the effort, I like it!

    PS: I hope my comment get translated well since I reply it with translated page from chrome :)

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

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