Arduino Nano 驱动 2.8″ TFT 显示 JPEG 图片与 RGB565 视频教程
项目概览
利用 Arduino Nano 配合 320×240 SPI TFT 屏幕(带触摸)与 Micro SD 卡,实现 JPEG 图片浏览与 RGB565 原始视频播放。核心库 YATFT(GitHub: YATFT/YATFT)封装了底层 SPI 时序与 JPEG 硬件解码,配合 XPT2046_Touchscreen 触摸库,提供播放/暂停/停止触控交互。
硬件清单
- Arduino Nano R3 ×1
- 2.8″ 320×240 SPI TFT 屏幕(ILI9341 驱动,含 XPT2046 触摸)×1
- Micro SD 卡(>1GB,FAT32)×1
- Nano 专用 TFT 扩展板(或杜邦线飞线)×1
SD 卡素材准备
图片
- 直接拷贝
.jpg文件到卡根目录,分辨率建议 ≤2560×1920,库内部会自动缩放至 320×240。 - 文件名建议纯 ASCII,避免中文乱码。
视频转码
需提前在 PC 用 ffmpeg 转为 RGB565 原始流:
ffmpeg -i input.mp4 -s 320x240 -pix_fmt rgb565 output.rgb
-s 320x240强制分辨率匹配屏幕-pix_fmt rgb565输出 16位 RGB565,每帧 320×240×2 = 150KB- 生成的
.rgb文件无容器头,播放时按固定帧率顺序读取即可
核心代码逻辑
完整代码见文末 PhotoAndVideoPlay.ino,关键流程:
- 初始化:
tft.begin(0x4391,-8)驱动屏幕,sdc.FSInit()挂载 SD 卡。 - 轮询文件:
FindFirst("*.*")/FindNext()遍历根目录。 - 识别类型:
GetFileType()判断 JPEG 或 RGB。 - 切换色彩模式:JPEG 需
tft.SetYUV(),RGB 需tft.SetRGB(),切换时会有 1 帧绿闪,属正常现象。 - 解码显示:
- JPEG:
sdc.JPEGReadFromSD(&jpeg_decode, 0, 0, 320, 240)硬件解码直推屏幕。 - RGB:
sdc.RGBReadFromSD(pFile, &ScanTouch)逐帧 DMA 传输,回调ScanTouch()处理触控。
- JPEG:
- 触控交互:视频播放时,屏幕下方三区域分别对应「停止/暂停/播放」,
ScanTouch()返回mode控制播放状态机。
关键函数片段
// 触控坐标映射(需根据实测 ADC 范围校准)
uint8_t ScanTouch() {
SPI.begin();
if (ts.touched()) {
TS_Point p = ts.getPoint();
delay(3);
SPI.end();
// ADC 原始值 → 屏幕坐标
if (p.x < 450) p.x = 450;
if (p.y < 500) p.y = 500;
uint16_t x = 320 - (p.x - 450) * 10 / 106;
uint16_t y = 240 - (p.y - 500) * 10 / 140;
if (x < 130 && y > 100 && y < 140) return 1; // 停止
if (x > 140 && x < 180 && y > 100 && y < 140) return 2; // 暂停
if (x > 190 && y > 100 && y < 140) return 0; // 播放
}
SPI.end();
return mode;
}
性能与局限
- 帧率:RGB565 视频约 12-15 FPS(受限于 SPI 4MHz 与 SD 卡读取速度),音频需外挂 VS1053 等解码板同步播放。
- 内存:Nano 仅 2KB SRAM,无法缓冲完整帧,采用「边读边传」流式处理。
- 兼容性:YATFT 库仅支持 ILI9341/ST7789 等少数驱动 IC,购买屏幕前确认驱动型号。
进阶优化建议
- 升级至 ESP32-S3(SPI 可达 80MHz,PSRAM 8MB),可流畅播放 30FPS RGB565 甚至 MJPEG 视频。
- 使用 LVGL + TFT_eSPI 替代 YATFT,获得更丰富的 UI 组件与双缓冲防撕裂。
- 将视频转为 MJPEG 并用硬件 JPEG 解码器(如 ESP32-S3 内置)解码,文件体积减少 80% 以上。
资源链接
制造工艺
- 树莓派配合 MCP3008 ADC 与 Zabbix 监控模拟传感器:分步指南
- Kuman 3.5″ TFT 显示屏在 RetroPie 上安装全步骤指南
- ILI9341 2.4 英寸 TFT 触摸屏扩展板位图动画专业指南
- 3D RGB Arduclock — 蓝牙控制全彩LED时钟带RTC与闹钟
- Arduino Due 驱动 3.2″ TFT 实现温度监测与实时时钟
- 全息光场3D显示:为AR带来清晰无畸变视觉
- 新型 HDMI-APIX3 转换器赋能汽车视频与 ADAS 测试
- DATA MODUL 推出 23.1 英寸超薄 TFT 显示器,支持智能 Wi-Fi 控制
- 以移动技术变革制造:数据、语音、视频与定位解决方案
- 法兰DN/PN标识全解析:公称直径与公称压力的国际标准对照
- K 2019展示前沿回收机械与可持续包装创新
- 注塑表面处理大全:SPI与VDI标准深度解析