Фотографии и RGB-видео на TFT SPI-дисплее
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Введение
Здравствуйте!
В сегодняшней статье я хотел бы рассказать о том, как можно просматривать картинки или фотографии (формат * .jpg), а также видео (формат RGB565) на экране TFT SPI-дисплея (320x240, 2,8 ").
Сначала небольшой демонстрационный ролик:
Аппаратное обеспечение
Необходимые компоненты:
- Arduino Nano R3,
- SPI TFT-дисплей (320x240) с сенсорным экраном,
- USB-карта> 1 ГБ,
- Экран TFT для Arduino Nano.
Собираем все детали в порядке, показанном на видео (или вы можете прочитать предыдущую статью:https://create.arduino.cc/projecthub/alf81010/tft-shield-for-arduino-nano-start-f4391e.
Программное обеспечение
Подготовка карты Micro SD.
Карта micro SD должна быть отформатирована в FAT32. Изображения можно записывать прямо на карту (без какой-либо обработки). Желательно, чтобы размер изображений был не более 2560x1920.
Для воспроизведения видео в формате rgb565 файлы необходимо подготовить заранее. Для конвертации видео используйте ffmpeg (http://ffmpeg.org). Скачайте и установите на свой компьютер. Затем используйте пример командной строки ffmpeg, которая отображает видео, совместимое с этой демонстрацией:
ffmpeg -i video.avi -s 320x240 -pix_fmt rgb565 video.rgb
Загрузите и установите библиотеку, необходимую для работы с экраном TFT для Arduino Nano:https://github.com/YATFT/YATFT.
Загрузите следующий скетч в Arduino Nano:
/ ****************************************** *********************************** ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И ДОКУМЕНТАЦИЯ ПРЕДОСТАВЛЯЮТСЯ «КАК ЕСТЬ» БЕЗ ГАРАНТИЙ * ВИДОМ, ЯВНЫМ ИЛИ ПОДРАЗУМЕВАЕМЫМ, ВКЛЮЧАЯ БЕЗ ОГРАНИЧЕНИЙ ЛЮБУЮ ГАРАНТИЮ * ТОВАРНОЙ ПРИГОДНОСТИ, НАИМЕНОВАНИЯ, НЕДОСТАТОЧНОСТИ НАРУШЕНИЙ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ * ЦЕЛИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОР ИЛИ ЕГО ЛИЦЕНЗИАРЫ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ИЛИ * ОБЯЗАНЫ ПО КОНТРАКТУ, НЕБРЕЖНОСТИ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ВКЛАДУ, * НАРУШЕНИЮ ГАРАНТИЙ ИЛИ ДРУГИМ ЮРИДИЧЕСКИМ ПРИВЕДЕННЫМ ТЕОРИЯМ, КАКИМ-ЛИБО ПРЯМЫМ ИЛИ КОСВЕННЫМ * УБЫТКАМ ИЛИ КОСВЕННЫМ УБЫТКАМИ , * КОСВЕННЫЙ, КАРАТЕЛЬНЫЙ ИЛИ КОСВЕННЫЙ УБЫТК, ПОТЕРЯ ПРИБЫЛИ ИЛИ УТЕРЯ ДАННЫХ, * СТОИМОСТЬ ЗАКУПКИ ТОВАРОВ, ТЕХНОЛОГИЙ, УСЛУГ ИЛИ ЛЮБЫХ * ПРЕТЕНЗИЙ ТРЕТЬИХ СТОРОН (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЛЮБОЙ ДРУГОЙ ЗАЩИТЫ ИЛИ ИЛИ ИХ ЗАЩИТЫ) . ************************************************ ***************************** / # include // Аппаратно-зависимая библиотека # include #include #include YATFT tft (0); SDC sdc; #define CS_PIN A0 // MOSI =11, MISO =12, SCK =13XPT2046_Touchscreen ts (CS_PIN); / * При использовании щита все строки управления и данных фиксированы, и при желании можно использовать более простое объявление:* / uint16_t frame =0; uint32_t total_time =0; bool f_first =true; uint8_ t mode =0; / ******************************************* ************************************************* *** / void setup (void) {Serial.begin (115200); // инициализируем последовательный порт Serial.println (F ("Пример воспроизведения фото и видео!")); tft.begin (0x4391, -8); // инициализируем отображение tft.SetColor (BLACK); tft.ClearDevice (); // Очистить экран ts.begin (); // Запускаем Touchscreen SPI.end (); Serial.print (F ("FS Init ...")); uint8_t state =sdc.FSInit (); если (состояние ==0) Serial.println (F ("неудача.")); иначе Serial.println (F ("успех.")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis () + 500;} цикл void (void) {if (total_time 100 &&y <140) {// Режим остановки =1; Serial.println (F ("режим =1")); } else if (x> 140 &&x <180 &&y> 100 &&y <140) {// Режим паузы =2; // Рисуем кнопки tft.SetColor (BRIGHTRED); tft.DrawFillCirc (GetMaxX () / 4, GetMaxY () / 2,50); tft.SetColor (ЯРКО-ЖЕЛТЫЙ); tft.DrawFillRect (GetMaxX () / 4-30, GetMaxY () / 2-30, GetMaxX () / 4 + 30, GetMaxY () / 2 + 30); tft.SetColor (ЯРКОСТЬ); tft.DrawFillCirc (GetMaxX () / 4 * 3, GetMaxY () / 2,50); tft.SetColor (ЯРКО-ЖЕЛТЫЙ); для (uint8_t я =0; я <60; я ++) {tft.DrawLine (210 + я, 90 + я / 2, 210 + я, 150-я / 2); } Serial.println (F ("mode =2")); } else if (x> 190 &&y> 100 &&y <140) {// Режим воспроизведения =0; Serial.println (F ("режим =0")); } режим возврата; } SPI.end (); режим возврата;}
Я постарался сделать небольшую статью и описать в ней основные моменты. Тем более что ничего сложного в этом проекте нет. Но если есть вопросы - задавайте, не сомневайтесь.;-) Постараюсь добавить статью.
Спасибо за внимание!
Продолжение следует.
Предыдущие статьи:
1) Уникальный TFT Shield для Arduino Uno - Start,
2) Уникальный экран TFT для Arduino Uno - OV7670 Cam Live View,
3) Уникальный экран TFT для Arduino Uno - Bluetooth-камера Arduino (ABC),
4) TFT Shield для Arduino Nano - Старт.
Обновление 01.04.2021:
И снова здравствуйте! Существует обновленная библиотека для серии экранов, которая в настоящее время состоит из двух экранов и двух коммутационных плат. Скетч составляется в зависимости от выбранной версии (от 1 до 4) и типа микроконтроллера (MegaAVR или ESP-32). Добавил фото, примеры. Более подробную информацию можно найти на https://github.com/Ekaburg/EkaTFT.
Код
- PhotoAndVideoPlay.ino
PhotoAndVideoPlay.ino C / C ++
/ ********************************************* ******************************** * ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ И ДОКУМЕНТАЦИЯ ПРЕДОСТАВЛЯЮТСЯ "КАК ЕСТЬ" БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ * ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ БЕЗ ОГРАНИЧЕНИЙ, ЛЮБУЮ ГАРАНТИЮ * ТОВАРНОЙ ЦЕННОСТИ, НАИМЕНОВАНИЯ, НЕДОСТАТОЧНОСТИ НАРУШЕНИЙ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ * ЦЕЛИ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОР ИЛИ ЕГО ЛИЦЕНЗИАРЫ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ИЛИ * ОБЯЗАНЫ ПО КОНТРАКТУ, НЕБРЕЖНОСТИ, СТРОГОЙ ОТВЕТСТВЕННОСТИ, ВКЛАДУ, * НАРУШЕНИЮ ГАРАНТИЙ ИЛИ ДРУГИМ ЮРИДИЧЕСКИМ ПРИВЕДЕННЫМ ТЕОРИЯМ, КАКИМ-ЛИБО ПРЯМЫМ ИЛИ КОСВЕННЫМ * УБЫТКАМ ИЛИ КОСВЕННЫМ УБЫТКАМИ , * КОСВЕННЫЙ, КАРАТЕЛЬНЫЙ ИЛИ КОСВЕННЫЙ УБЫТК, ПОТЕРЯ ПРИБЫЛИ ИЛИ УТЕРЯ ДАННЫХ, * СТОИМОСТЬ ЗАКУПКИ ТОВАРОВ, ТЕХНОЛОГИЙ, УСЛУГ ИЛИ ЛЮБЫХ * ПРЕТЕНЗИЙ ТРЕТЬИХ СТОРОН (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЛЮБОЙ ДРУГОЙ ЗАЩИТЫ ИЛИ ИЛИ ИХ ЗАЩИТЫ) . ************************************************ ***************************** / # include// Аппаратно-зависимая библиотека # include #include #include YATFT tft (0); SDC sdc; #define CS_PIN A0 // MOSI =11, MISO =12, SCK =13XPT2046_Touchscreen ts (CS_PIN); / * При использовании щита все строки управления и данных фиксированы, и при желании можно использовать более простое объявление:* / uint16_t frame =0; uint32_t total_time =0; bool f_first =true; uint8_t mode =0; / ****************************************** ************************************************* **** / void setup (void) {Serial.begin (115200); // инициализируем последовательный порт Serial.println (F ("Пример воспроизведения фото и видео!")); tft.begin (0x4391, -8); // инициализируем отображение tft.SetColor (BLACK); tft.ClearDevice (); // Очистить экран ts.begin (); // Запускаем Touchscreen SPI.end (); Serial.print (F ("FS Init ...")); uint8_t state =sdc.FSInit (); если (состояние ==0) Serial.println (F ("неудача.")); иначе Serial.println (F ("успех.")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis () + 500;} цикл void (void) {if (total_time 100 &&y <140) {// Режим остановки =1; Serial.println (F ("режим =1")); } else if (x> 140 &&x <180 &&y> 100 &&y <140) {// Режим паузы =2; // Рисуем кнопки tft.SetColor (BRIGHTRED); tft.DrawFillCirc (GetMaxX () / 4, GetMaxY () / 2,50); tft.SetColor (ЯРКО-ЖЕЛТЫЙ); tft.DrawFillRect (GetMaxX () / 4-30, GetMaxY () / 2-30, GetMaxX () / 4 + 30, GetMaxY () / 2 + 30); tft.SetColor (ЯРКОСТЬ); tft.DrawFillCirc (GetMaxX () / 4 * 3, GetMaxY () / 2,50); tft.SetColor (ЯРКО-ЖЕЛТЫЙ); для (uint8_t я =0; я <60; я ++) {tft.DrawLine (210 + я, 90 + я / 2, 210 + я, 150-я / 2); } Serial.println (F ("mode =2")); } else if (x> 190 &&y> 100 &&y <140) {// Режим воспроизведения =0; Serial.println (F ("режим =0")); } режим возврата; } SPI.end (); режим возврата;}
Схема
Библиотека TFT-экрана для Arduino Nano
https://github.com/YATFT/YATFTПроизводственный процесс
- Производственная мобильность:данные, голос, видео и местоположение
- Новый видео конвертер тестирует автомобильные информационно-развлекательные дисплеи APIX3
- МОДУЛЬ ДАННЫХ:23,1-дюймовый ультра-растянутый TFT-дисплей с интеллектуальным управлением
- Считывание аналоговых датчиков с помощью Raspberry Pi и Zabbix Supervisor
- Kuman TFT 3.5 RetroPie 2018
- Видео K 2019:инновации в переработке оборудования и материалов
- Что обозначают DN и PN на фланцах? (Видео)
- Практичный 3D-дисплей, созданный с помощью голографии и технологии светового поля
- Растровая анимация на сенсорном экране TFT ILI9341
- Отделка поверхности для литья под давлением:SPI и VDI