Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
元器件清单
| 元器件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| 1.17 英寸 TFT LCD 屏 (SPI 接口) | 1 | 分辨率 160×128 |
| Micro SD 卡 | 1 | 存放 BMP 图片 |
所需软件
- Arduino IDE (内置
SPI.h、SD.h、TFT.h库)
硬件接线
| TFT 引脚 | Arduino UNO 引脚 |
|---|---|
| VCC (5V) | 5V |
| GND | GND |
| MISO | 12 |
| SCK | 13 |
| MOSI | 11 |
| LCD CS | 10 |
| SD CS | 4 |
| D/C | 9 |
| RESET | 8 |
| BL (背光) | 5V (或 PWM 引脚调光) |
SD 卡图片要求
- 格式:.bmp (位图格式)
- 分辨率:不超过 160×128 像素 (屏幕物理分辨率)
- 文件名:必须命名为
arduino.bmp - 位置:SD 卡根目录
- 操作前:Arduino 必须断电 再插入 SD 卡
完整代码
// CreaTechWeb: Arduino TFT 显示 SD 卡 BMP 图片
// https://createchweb.com/displaying-an-image-on-a-tft-screen-with-arduino/
#include
#include
#include // Arduino 自带 TFT 库
// Uno 引脚定义
#define sd_cs 4
#define lcd_cs 10
#define dc 9
#define rst 8
// Leonardo 引脚定义 (如使用 Leonardo 请取消注释下面并注释上面)
// #define sd_cs 8
// #define lcd_cs 7
// #define dc 0
// #define rst 1
TFT TFTscreen = TFT(lcd_cs, dc, rst);
PImage logo; // 图片对象
void setup() {
// 初始化屏幕
TFTscreen.begin();
TFTscreen.background(255, 255, 255); // 白色背景
TFTscreen.stroke(0, 0, 255); // 蓝色文字
TFTscreen.println();
TFTscreen.println(F("Arduino TFT Bitmap Example"));
TFTscreen.stroke(0, 0, 0); // 黑色文字
TFTscreen.println(F("Open serial monitor"));
TFTscreen.println(F("to run the sketch"));
// 串口调试
Serial.begin(9600);
while (!Serial); // 等待串口连接 (仅原生 USB 设备需要)
// 清屏准备显示图片
TFTscreen.background(255, 255, 255);
// 初始化 SD 卡
Serial.print(F("Initializing SD card..."));
if (!SD.begin(sd_cs)) {
Serial.println(F("failed!"));
return;
}
Serial.println(F("OK!"));
// 重新初始化屏幕
TFTscreen.begin();
TFTscreen.background(255, 255, 255);
// 加载图片
logo = TFTscreen.loadImage("arduino.bmp");
if (!logo.isValid()) {
Serial.println(F("error while loading arduino.bmp"));
}
}
void loop() {
// 图片加载失败则不执行
if (!logo.isValid()) return;
Serial.println(F("drawing image"));
// 随机位置绘制 (确保不超出屏幕)
int x = random(TFTscreen.width() - logo.width());
int y = random(TFTscreen.height() - logo.height());
// 绘制图片
TFTscreen.image(logo, x, y);
delay(1500); // 1.5 秒切换一次位置
}
运行效果
上传代码后,打开串口监视器 (9600 波特率),屏幕会在随机位置显示 BMP 图片,每 1.5 秒换一个位置。若图片加载失败,串口会提示错误信息。
常见问题排查
- 屏幕全白/无显示:检查接线、对比度电位器(如有)、复位引脚
- SD 卡初始化失败:确认 SD 卡格式为 FAT16/FAT32、接线正确、CS 引脚定义匹配
- 图片加载失败:确认文件名为
arduino.bmp、分辨率≤160×128、24位色深、根目录存放 - 图片显示异常:尝试用画图工具另存为 24 位 BMP,避免压缩格式
扩展应用
- 制作电子相框:存多张图片循环播放
- 结合传感器显示实时数据图表
- 做迷你游戏机界面
- 作为仪表盘显示设备状态
制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- 自制 Arduino 伊斯兰祷告时间实时时钟
- Arduino 2.4″ TFT LCD 扩展板显示 SD 卡 BMP 图片教程
- 自制便携式视觉暂留显示器:Arduino UNO 与 ATtiny85
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- 用 Arduino Uno 和 1Sheeld 构建 4x4x4 LED 立方体 - 互动音乐可视化项目
- Arduino GPS与TFT触摸屏扩展板:实时定位显示项目
- 使用 Arduino Uno 和蓝牙实现遥控小车:分步指南
- 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
- Arduino Pro Micro 实现 HID UPS:将"哑"电源升级为 USB 智能后备电源
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟
- Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试