St7735s подключение к arduino

Автор: Сергей — Опубликовано 29.09.2017 — Обновлено 27.09.2019

В этой статье я расскажу, как подключить 1,8-дюймовые TFT-дисплеи к плате Arduino. Я также покажу, как отображать текст, рисовать различные фигуры и выводить изображения.

Технические параметры

► Напряжение питания: 3,3 В — 5 В
Диагональ: 1,8 дюйма
Разрешение: 128×160 пикселей
► Цвет: 65K цветов в формате RGB
► Интерфейс: SPI
Размеры: 35 мм x 57 мм x 7 мм

Общие сведения

Цветной TFT дисплей с диагональю 1,8 дюйма и расширением 128 х 160 пикселей, контроллер ST7735R для обработки, который может отображать до 18-битного цвета (262144 оттенков), работает этот контроллер (дисплей) с напряжением 3,3В и для работы с платами arduino предусмотрен стабилизатор напряжения 3,3В, но если вы хотите работать с 3,3В просто отключите перемычку (опыт показывает, что модуль может работать с 5В логикой). Модуль также оснащен держателем SD-карты для хранения и загрузки изображений на TFT-дисплей. Подключение осуществляется на разъеме ISP (4-проводной), все выходы выведены на боковую группу контактов, на другой стороне платы выведены выходы SD-карты.

Группа контактов 1
► LED — управление подсветкой, напряжение макс. 3,3 V
► SCK — линия синхронизации
► SDA — линия данных (последовательные данные)
► A0
► СБРОС
► CS — выбор устройства
► GND — «-» питания
► VCC — «+» питания

Группа контактов 2
► SD_CS — выбор устройства
► SD_MOSI — прием данных
► SD_MISO — передача данных
► SD_SCK — линия синхронизации

Подключение TFT дисплея к Arduino

Необходимые детали:
► Цветной TFT дисплей 1,8, 128×160, SPI x 1 шт.
Arduino UNO R3 (DCCduino, CH340G) x 1 шт.
► DuPont 10x, 2,54 мм, 20 см, F-F (женский-женский) x 1 шт.

Соединение:
В данном примере мы используем TFT-дисплей и плату Arduino UNO R3, а передача данных осуществляется через интерфейс SPI. Поскольку контроллер дисплея ST7735R работает при напряжении 3,3 В (включая логику), необходимо добавить пять резисторов 1 кОм в цепь SPI и один резистор 150 Ом для защиты светодиодов подсветки. Но все включается без резисторов, и контроллер не сгорает. Просто следуйте приведенной ниже схеме и подключите цепь.

Схема подключения TFT-дисплея

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

Автор: Сергей — Опубликовано 29.09.2017 — Обновлено 27.09.2019

В этой статье я расскажу, как подключить 1,8-дюймовые TFT-дисплеи к плате Arduino. Я также покажу, как отображать текст, рисовать различные фигуры и выводить изображения.

Технические параметры

► Напряжение питания: 3,3 В — 5 В
Диагональ: 1,8 дюйма
Разрешение: 128×160 пикселей
► Цвет: 65K цветов в формате RGB
► Интерфейс: SPI
Размеры: 35 мм x 57 мм x 7 мм

Общие сведения

Цветной TFT дисплей с диагональю 1,8 дюйма и расширением 128 х 160 пикселей, контроллер ST7735R для обработки, который может отображать до 18-битного цвета (262144 оттенков), работает этот контроллер (дисплей) с напряжением 3,3В и для работы с платами arduino предусмотрен стабилизатор напряжения 3,3В, но если вы хотите работать с 3,3В просто отключите перемычку (опыт показывает, что модуль может работать с 5В логикой). Модуль также оснащен держателем SD-карты для хранения и загрузки изображений на TFT-дисплей. Подключение осуществляется на разъеме ISP (4-проводной), все выходы выведены на боковую группу контактов, на другой стороне платы выведены выходы SD-карты.

Группа контактов 1
► LED — управление подсветкой, напряжение макс. 3,3 V
► SCK — линия синхронизации
► SDA — линия данных (последовательные данные)
► A0
► СБРОС
► CS — выбор устройства
► GND — «-» питания
► VCC — «+» питания

Группа контактов 2
► SD_CS — выбор устройства
► SD_MOSI — прием данных
► SD_MISO — передача данных
► SD_SCK — линия синхронизации

Подключение TFT дисплея к Arduino

Необходимые детали:
► Цветной TFT дисплей 1,8, 128×160, SPI x 1 шт.
Arduino UNO R3 (DCCduino, CH340G) x 1 шт.
► DuPont 10x, 2,54 мм, 20 см, F-F (женский-женский) x 1 шт.

Соединение:
В данном примере мы используем TFT-дисплей и плату Arduino UNO R3, а передача данных осуществляется через интерфейс SPI. Поскольку контроллер дисплея ST7735R работает при напряжении 3,3 В (включая логику), необходимо добавить пять резисторов 1 кОм в цепь SPI и один резистор 150 Ом для защиты светодиодов подсветки. Но все включается без резисторов, и контроллер не сгорает. Просто следуйте приведенной ниже схеме и подключите цепь.

Схема подключения TFT-дисплея

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

Осваиваем работу с цветными TFT-дисплеями на базе ST7735

Если зайти на eBay и поискать «ST7735″, то можно найти довольно много дисплейных модулей на базе этого драйвера. Обычно существует два типа модулей: с TFT-дисплеем 1,44″ и разрешением 128 x 128 пикселей и с дисплеем 1,8» и разрешением 128 x 160 пикселей. Последние в большинстве случаев (но не во всех) также имеют слот для карт памяти SD. Дисплеи отображают 65536 цветов с палитрой R5G6B5. Эти модули интересны тем, что, хотя они немного дороже популярных 0,96-дюймовых OLED-дисплеев на базе SSD1306, они предлагают значительно более высокое разрешение и диагональ, и даже следующие характеристики.

В 30 000 раз больше цветов.

Забавный факт! Также есть Arduino shield Duinopeak с 1,8-дюймовым дисплеем, джойстиком и слотом для SD-карты, и Raspberry Pi hat WaveShare с 1,44-дюймовым дисплеем, джойстиком и тремя кнопками. Более короткие 0,96-дюймовые модули с разрешением 80 x 160 также доступны на AliExpress.

Модули питаются от 3,3 или 5 В, имеют подсветку (которая питается только от 3,3 В, поэтому ее легко случайно сжечь!) и используют протокол, похожий на SPI. Те, кто хочет увидеть конкретные единицы и нули протокола, могут использовать Sigrok и соответствующий .sr файл из архива sigrok-dumps. Я также написал простой декодер протокола ST7735 для Sigrok, но на момент написания этих строк исправление еще не было маппировано на магистраль (UPDATE: как оказалось, оно уже было маппировано, см. раз и два).

В PulseView протокол выглядит примерно так:

Команды и данные передаются с помощью выводов SCLK и MOSI, а порядок битов — msb-первый, как в обычном SPI. Здесь байт B1 — код команды FRMCTR1, а байты 01, 2C и 2D — аргументы этой команды. Вы можете отличить аргументы от команды по выводу DC (данные или команда), который имеет низкое напряжение для команд и высокое напряжение для данных. Вы также можете заметить, что CS (выбор микросхемы) может быть безопасно переключен в середине передачи кадра. Как и в традиционном SPI, выбор микросхемы происходит при низком напряжении CS. Наконец, вывод RES позволяет сбросить состояние контроллера, подключив к нему низкое напряжение.

Для получения приведенного выше изображения я использовал Arduino Uno и библиотеку ST7735 от Adafruit. В версиях этой библиотеки старше 1.0.8 также реализована поддержка ST7789 с иерархией классов, которая охватывает все, начиная от макросов и т.п. Это сделало код библиотеки гораздо более сложным для понимания. Интересно, что ST7789 — не очень распространенный драйвер. Он похож на ST7735, но доступен только в виде модуля в магазине Adafruit по относительно высокой цене. Модуль имеет разрешение 240 x 240 и диаметр 1,54 дюйма. Я бы не стал использовать этот модуль в своих проектах из-за его малого диаметра, высокой цены и привязки к одному производителю. А для исследования работы на ST7735 я использовал библиотеку tag 1.0.8.

Было решено использовать библиотеку Adafruit в STM32. Конечно, существовали библиотеки, готовые для STM32. Но, во-первых, использовать готовый код скучно :), во-вторых, это не приводит к нормальному пониманию работы устройства. В-третьих, библиотеки, которые мне удалось найти, были написаны хардкорными эмбеддерами, которые привыкли все делать напрямую с помощью регистров и двоичных передач. Поскольку я не являюсь хардкорным бородатым иммерсионистом, я предпочитаю библиотеки без преждевременных оптимизаций, основанные на HAL, которые легче поддерживать и расширять.

Интерфейс библиотеки выглядел следующим образом:

void init ( ) <
ST7735_Init ( ) ;
>

void loop ( ) <
// Предел проверки
ST7735_FillScreen ( ST7735_BLACK ) ;

for ( int x = 0 ; x ST7735_W > ; x ++ ) < < <
ST7735_DrawPixel ( x , 0 , ST7735_RED ) ;
ST7735_DrawPixel ( x , ST7735_HEIGHT — 1 , ST7735_RED ) ;
>

for ( int y = 0 ; y ST7735_HEIGHT ; y ++ ) <
ST7735_DrawPixel ( 0 , y , ST7735_RED ) ;
ST7735_DrawPixel ( ST7735_W >- 1 , y , ST7735_RED ) ;
>

// Проверка шрифтов
ST7735_FillScreen ( ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 0 , «Font_7x10» ) , Font_7x10 ,
ST7735_RED , ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 3 * 10 , «Font_11x18» ) , Font_11x18 ,
ST7735_GREEN , ST7735_BLACK ) ;
ST7735_WriteString ( 0 , 3 * 10 + 3 * 18 , «Font_16x26» ) , Fontti_16x26 ,
ST7735_BLUE , ST7735_BLACK ) ;
HAL_Delay ( 2000 ) ;

// проверка перевода цвета
ST7735_InvertColors ( true ) ;
HAL_Delay ( 2000 ) ;
ST7735_InvertColors ( false ) ;
HAL_Delay ( 2000 ) ;

// Показать тестовое изображение
ST7735_DrawImage ( 0 , 0 ; ST7735_W >, ST7735_HEIGHT ,
( uint16_t * ) test_img_128x128 ) ;
HAL_Delay ( 15000 ) ;
>

Пример вывода текста на 1,44-дюймовый экран:

Интересно отметить, что если в случае с SSD1306 все изображение можно было легко сохранить в памяти и каждый раз передавать на экран, то в случае с ST7735 это не так просто. Цвет 16-битный, а не монохромный, и разрешение в 2-2,5 раза выше. Для хранения изображения в памяти микроконтроллера требуется 32 КБ для дисплея 128×128 и 40 КБ для дисплея 128×160. Между тем, STM32F103C8T6, используемый в Blue Pill, имеет всего 20 КБ оперативной памяти. Конечно, микроконтроллер STM32F41111RET6, используемый в Nucleo-F41111RE, уже имеет 128 КБ оперативной памяти. Однако я хотел бы, чтобы библиотека работала на любом микроконтроллере, и желательно без хакинга, например, использования 4-битной палитры, уменьшения разрешения или использования индексированных цветов. В отличие от библиотеки SSD1306, библиотека ST7735 отправляет все данные на экран немедленно и ничего не хранит в памяти.

На первый взгляд, это все, о чем я хотел поговорить сегодня. Для тех, кто хочет прочитать полную версию кода в этом посте, вы можете найти ее на GitHub. Код работает на экранах с разрешением 80 x 160, 128 x 128 и 128 x 160 пикселей, нужно только немного отредактировать файл st7735.h в соответствии с его комментариями. Полную информацию о ST7735 см. в техническом бюллетене [PDF].

Использовали ли вы когда-нибудь такие модули, и если да, то для каких проектов?

Оцените статью
Добавить комментарий