TFT SPI 显示器上的照片和 RGB 视频
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
简介
你好!
在今天的文章中,我想谈谈如何在TFT SPI显示器(320x240,2.8英寸)的屏幕上查看图片或照片(*.jpg格式)以及视频(RGB565格式)。
首先,一个小演示视频:
硬件
需要的组件:
- Arduino Nano R3,
- 带触摸屏的 SPI TFT 显示屏 (320x240),
- uSD 卡>1GB,
- Arduino Nano 的 TFT 扩展板。
按照视频中显示的顺序放置所有部件(或者您可以阅读上一篇文章: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
下载并安装使用 Arduino Nano TFT 扩展板所需的库: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 模式 =0;/************************************************ ****************************************************** ***/void setup(void){ Serial.begin(115200); // 初始化串口 Serial.println(F("Photo And Video Play example!")); tft.begin(0x4391,-8); // 初始化显示 tft.SetColor(BLACK); tft.ClearDevice(); // 清屏 ts.begin(); // 初始化触摸屏 SPI.end(); Serial.print(F("FS 初始化...")); uint8_t 状态 =sdc.FSInit(); if (state ==0) Serial.println(F("unsuccess.")); else Serial.println(F("success.")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis() + 500;}void loop(void){ if (total_time 100 &&y<140) { // 停止模式 =1; Serial.println(F("mode =1")); } else if (x>140 &&x<180 &&y>100 &&y<140) { // 暂停模式 =2; // 绘制按钮 tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4,GetMaxY()/2,50); tft.SetColor(BRIGHTYELLOW); tft.DrawFillRect(GetMaxX()/4-30,GetMaxY()/2-30,GetMaxX()/4+30,GetMaxY()/2+30); tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4*3,GetMaxY()/2,50); tft.SetColor(BRIGHTYELLOW); for(uint8_t i=0; i<60; i++) { tft.DrawLine(210+i, 90+i/2, 210+i, 150-i/2); Serial.println(F("mode =2")); } else if (x>190 &&y>100 &&y<140) { // 播放模式 =0; Serial.println(F("mode =0")); } 返回模式; SPI.end();返回模式;}
我试着写一篇短文并描述其中的要点。而且,这个项目没有什么困难。但是,如果您有任何问题,请不要犹豫。;-) 我会尝试添加一篇文章。
感谢关注!
待续。
以前的文章:
1) Arduino Uno 的独特 TFT 扩展板 - 开始,
2) Arduino Uno 独特的 TFT 扩展板 - OV7670 Cam Live View,
3) Arduino Uno 的独特 TFT 扩展板 - Arduino 蓝牙相机 (ABC),
4) Arduino Nano TFT Shield - 开始。
2021 年 4 月 1 日更新:
再一次问好!有一系列屏幕的更新库,目前由两个屏蔽和两个分线板组成。根据所选版本(从 1 到 4)和微控制器类型(MegaAVR 或 ESP-32)编译草图。添加了照片,示例。更多信息可以在 https://github.com/Ekaburg/EkaTFT 中找到。
代码
- PhotoAndVideoPlay.ino
PhotoAndVideoPlay.inoC/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 模式 =0;/*********************************************** ****************************************************** ****/void setup(void){ Serial.begin(115200); // 初始化串口 Serial.println(F("Photo And Video Play example!")); tft.begin(0x4391,-8); // 初始化显示 tft.SetColor(BLACK); tft.ClearDevice(); // 清屏 ts.begin(); // 初始化触摸屏 SPI.end(); Serial.print(F("FS 初始化...")); uint8_t 状态 =sdc.FSInit(); if (state ==0) Serial.println(F("unsuccess.")); else Serial.println(F("success.")); sdc.currentFileType =DEMO_FILE_TYPE_RGB; total_time =millis() + 500;}void loop(void){ if (total_time 100 &&y<140) { // 停止模式 =1; Serial.println(F("mode =1")); } else if (x>140 &&x<180 &&y>100 &&y<140) { // 暂停模式 =2; // 绘制按钮 tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4,GetMaxY()/2,50); tft.SetColor(BRIGHTYELLOW); tft.DrawFillRect(GetMaxX()/4-30,GetMaxY()/2-30,GetMaxX()/4+30,GetMaxY()/2+30); tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()/4*3,GetMaxY()/2,50); tft.SetColor(BRIGHTYELLOW); for(uint8_t i=0; i<60; i++) { tft.DrawLine(210+i, 90+i/2, 210+i, 150-i/2); Serial.println(F("mode =2")); } else if (x>190 &&y>100 &&y<140) { // 播放模式 =0; Serial.println(F("mode =0")); } 返回模式; SPI.end();返回模式;}
示意图
Arduino Nano 的库 TFT 扩展板
https://github.com/YATFT/YATFT制造工艺