news 2026/3/14 18:30:52

使用Arduino配置ST7735 SPI通信入门必看

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Arduino配置ST7735 SPI通信入门必看

Arduino驱动ST7735实战指南:从接线到图形显示的完整路径

你有没有试过在Arduino项目里加一块彩色小屏,结果却遭遇白屏、花屏、倒置?别急——这几乎是每个初学者都会踩的坑。今天我们就来彻底解决这个问题。

本文不堆术语,不抄手册,只讲你真正需要知道的东西:如何用最简单的方式点亮一块常见的1.8英寸TFT屏(基于ST7735控制器),并让它稳定工作。全程基于Arduino平台,配合Adafruit库实现,适合所有刚入门嵌入式图形显示的朋友。


为什么选ST7735?

市面上能买到的小尺寸TFT屏五花八门,但为什么很多人推荐ST7735

因为它够“小”也够“省”。
它专为128×160分辨率设计,常见于1.8英寸模块,非常适合塞进你的智能手表原型、迷你数据记录仪或者学生实验板上。

更重要的是:
-引脚少:SPI四线制(SCLK、MOSI、CS、DC) + RST即可;
-自带显存:无需外挂RAM,芯片内部有GRAM缓存图像;
-生态成熟:Adafruit提供了几乎开箱即用的驱动库;
-价格低:十几块钱就能拿下带背光的完整模块。

相比之下,像ILI9341这类支持更大屏幕的芯片虽然功能更强,但对资源要求高,初始化复杂,不适合快速验证想法。

所以如果你是做教育项目、DIY小工具或想练手GUI编程,ST7735是个极佳起点


硬件怎么接?一图看清所有连接

先上最关心的部分:到底怎么把这块屏接到Arduino Uno/Nano上?

ST7735引脚推荐连接说明
VCC5V(模块内置稳压)注意有些模块只能接3.3V!
GNDGND必接
SCL / SCLK数字13 或SCKSPI时钟线
SDA / MOSI数字11 或MOSI主出从入数据线
RES / RST数字9复位脚,可自定义
DC / A0数字8命令/数据切换脚
CS数字10片选脚(通常固定)
BLK / LED3.3V 或 PWM口背光控制,接PWM可调亮度

重点提示:大多数模块标的是“SDA”、“SCL”,但这不是I²C!这是厂商为了方便记忆乱标的,实际对应的是MOSI和SCLK

Arduino Uno上的硬件SPI接口是固定的:
- SCK → 13
- MOSI → 11
- MISO → 12(不用)
- SS (CS) → 10(可用作片选)

只要把这些线一一连好,你就完成了80%的工作。


软件准备:两个库搞定一切

打开Arduino IDE,安装以下两个库:

  1. Adafruit GFX Library
    → 提供基础绘图能力:画线、矩形、文字、颜色等。

  2. Adafruit ST7735 and ST7789 Library
    → 专门驱动ST7735/ST7789系列屏幕。

可以通过库管理器搜索安装,也可以手动下载导入。

然后写入这段代码试试看:

#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 10 #define TFT_DC 8 #define TFT_RST 9 // 创建对象(使用硬件SPI) Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); void setup() { tft.initR(INITR_BLACKTAB); // 根据屏幕类型选择初始化模式 tft.setRotation(1); // 旋转方向,试试0~3看看哪个正 tft.fillScreen(ST77XX_BLACK); // 清屏 tft.setCursor(0, 0); tft.setTextColor(ST77XX_WHITE); tft.setTextSize(2); tft.println("Hello!"); } void loop() { }

烧录进去,如果一切正常,你会看到屏幕上出现白色大字:“Hello!”。


初始化为何总失败?关键在这三个细节

很多人的屏幕点不亮,并不是接错了线,而是栽在了这三个地方:

1.initR()参数选错了

最常见的错误就是用了错误的初始化模板。

ST7735有不同的版本,主要区别在于出厂时烧录的初始化参数不同。Adafruit库为此提供了几个预设宏:

  • INITR_BLACKTAB:黑底板,背面标签是黑色的(最常见)
  • INITR_GREENTAB:绿底板,早期版本
  • INITR_REDTAB:红底板,某些克隆模块

如果你用了黑板却调用INITR_GREENTAB,很可能导致白屏或雪花屏。

📌建议做法:都试一遍!把initR()改成不同参数跑一次,看哪个能正常显示。

2. SPI速度太快

默认情况下,Adafruit库会以8MHz运行SPI。但对于质量一般的杜邦线或长导线来说,这个速度太高了,容易出错。

可以在构造函数后手动降频:

tft.setSPISpeed(4000000); // 设为4MHz

或者修改库源码中的默认值,确保通信稳定。

3. 供电不足

别小看这块小屏,背光一亮起来电流可能超过100mA。如果你用USB供电的Nano,加上传感器一堆外设,电压一跌,屏幕就罢工。

✅ 解决方案:
- 使用外部电源给VCC单独供电;
- 或者将BLK脚通过三极管/P-MOSFET由外部电源控制;
- 实在不行,先把BLK直接接3.3V测试。


屏幕方向不对?坐标系旋转全解析

你会发现调用setRotation(0)3后,显示内容会顺时针旋转90度。

这是因为在底层,ST7735允许我们重新映射GRAM的扫描方向。比如你想让屏幕竖着放还是横着放,就靠这个设置。

参数显示方向实际宽高
0默认128x160
1顺时针转90°160x128
2180°翻转128x160
3逆时针90°160x128

举个例子:你想做一个横向仪表盘,那就用setRotation(1),此时宽度变成160像素,更适合布局。

同时记得用tft.width()tft.height()动态获取当前有效尺寸,不要硬编码128和160!


颜色怎么表示?RGB565才是真标准

你可能会看到这样的代码:

tft.drawPixel(x, y, tft.color565(255, 0, 0)); // 红色

这里的关键是color565(r, g, b)函数。它把8位RGB转换成16位RGB565格式

什么意思?

  • R占5位 → 0~31
  • G占6位 → 0~63(人眼更敏感,多一位)
  • B占5位 → 0~31

所以真正的红色是(31, 0, 0),但在API中你仍然传入0~255范围的值,库会自动缩放。

常见颜色可以直接用宏:
-ST77XX_RED
-ST77XX_GREEN
-ST77XX_BLUE
-ST77XX_WHITE
-ST77XX_BLACK

但自定义渐变、HSV动画时,一定要用color565()才能获得精确控制。


刷屏太慢?学会局部刷新技巧

全屏重绘一次要多久?按128×160×2字节 ≈ 40KB数据量算,在8MHz SPI下大约需要50ms以上。也就是说,帧率很难超过20fps。

怎么办?别每次都刷全屏!

👉 正确做法:
- 只更新变化区域;
- 比如一个数字计数器,只擦除旧数字位置再重绘;
- 使用fillRect()先填黑,再写新文本;
- 对动态图标使用双缓冲思想(虽然内存有限,但可分块处理)。

示例:只刷新中间一个小区域

// 清除旧值区域 tft.fillRect(50, 60, 80, 20, ST77XX_BLACK); // 写入新值 tft.setCursor(50, 60); tft.print(millis() / 1000);

这样比fillScreen()快得多。


背光可以调吗?当然!PWM轻松搞定

多数模块都有一个叫BLKLED的引脚,其实就是背光的阳极控制端。

怎么调节亮度?

把它接到Arduino的一个PWM引脚(比如D3、D5、D6),然后这样控制:

analogWrite(BLK_PIN, brightness); // brightness: 0~255

注意:
- BLK通常是高电平有效,所以接PWM时要用N-MOSFET或NPN三极管驱动;
- 或者直接买带背光控制电路的模块;
- 如果模块已集成限流电阻,可尝试直接接PWM(但小心电流过大)。

夜间自动调暗?完全可以结合光敏电阻实现!


进阶玩法:不只是“打印文字”

一旦你能稳定驱动这块屏,接下来就可以玩些有意思的了:

✅ 实时波形图

读取ADC数据,用drawLine()连续绘制,模拟示波器效果。

✅ 图标菜单系统

用二维数组存储图标位图,配合按键实现上下选择菜单。

✅ 加载SD卡图片

配合microSD插槽,加载.bmp文件显示静态图像(Adafruit库支持BMP解码)。

✅ 触摸屏扩展

虽然原生ST7735不带触摸,但市面上很多模块集成了XPT2046电阻屏控制器,可通过SPI读取触控坐标。

这些都不是遥不可及的功能,只要你掌握了基础通信机制。


最后提醒:那些没人告诉你但很重要的事

  1. 别用面包板太久
    杜邦线接触不良是最大杀手。调试阶段可以用,定型后务必焊接或使用排针加固。

  2. 检查模块是否真的ST7735
    有些廉价模块其实是SSD1351或其他兼容芯片,冒充ST7735。如果死活不通,可能是芯片型号不符。

  3. 关注GRAM地址窗口设置
    所有绘图操作本质都是向GRAM写数据。CASET(列地址)和RASET(行地址)决定了你在哪块区域写。库已经封装好了,但了解原理有助于排查偏移问题。

  4. 内存紧张别贪大字体
    Arduino Uno只有2KB SRAM。加载大字体(如Font 4+)可能导致程序崩溃。优先使用精简字体或自定义小字号。

  5. 善用逻辑分析仪
    如果通信异常,拿个几块钱的CH554开发板当逻辑分析仪,抓一下SCLK和MOSI波形,立刻看出是否有数据发出。


结语:点亮第一屏的意义

当你第一次看到那句“Hello ST7735!”出现在彩色小屏上时,那种成就感是难以言喻的。这不仅是技术的突破,更是创造力的释放起点。

从这一刻起,你不再只是控制LED闪烁的初学者,而是开始构建真正的人机交互界面。

而这一切,只需要一块十几元的屏幕、几根导线、一个开源库,以及一点点耐心。

如果你正在尝试接入ST7735却卡住了,不妨回头看看:
- 引脚接对了吗?
- 初始化参数匹配吗?
- 供电稳定吗?

往往答案就在其中。

如果你觉得这篇文章帮到了你,欢迎点赞分享;如果有具体问题,也欢迎在评论区留言,我们一起解决每一个“白屏”的夜晚。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 8:31:54

PCSX2模拟器性能优化:3步打造极致游戏体验

PCSX2模拟器性能优化&#xff1a;3步打造极致游戏体验 【免费下载链接】pcsx2 PCSX2 - The Playstation 2 Emulator 项目地址: https://gitcode.com/GitHub_Trending/pc/pcsx2 还在为PS2模拟器运行卡顿而烦恼&#xff1f;想要在电脑上流畅运行经典游戏却屡屡碰壁&#x…

作者头像 李华
网站建设 2026/3/13 15:55:38

AutoGLM-Phone-9B开发案例:零售业的智能货架管理系统

AutoGLM-Phone-9B开发案例&#xff1a;零售业的智能货架管理系统 随着人工智能在边缘计算和移动端设备上的广泛应用&#xff0c;多模态大语言模型&#xff08;MLLM&#xff09;正逐步从云端走向终端。AutoGLM-Phone-9B 作为一款专为移动场景设计的轻量化多模态模型&#xff0c…

作者头像 李华
网站建设 2026/3/13 17:57:35

T2芯片Ubuntu安装完整教程:从问题诊断到实战部署

T2芯片Ubuntu安装完整教程&#xff1a;从问题诊断到实战部署 【免费下载链接】T2-Ubuntu Ubuntu for T2 Macs 项目地址: https://gitcode.com/gh_mirrors/t2/T2-Ubuntu 如果你正在为Apple T2芯片Mac安装Linux系统而苦恼&#xff0c;这篇文章将带你彻底解决这个技术难题。…

作者头像 李华
网站建设 2026/3/14 1:24:06

HTML5 地理定位

HTML5 地理定位 引言 随着互联网技术的不断发展,地理信息在Web应用中的重要性日益凸显。HTML5提供的地理定位功能,使得Web应用能够更加便捷地获取用户的位置信息,从而实现更加个性化的服务和更加丰富的用户体验。本文将详细介绍HTML5地理定位的相关知识,包括其原理、实现…

作者头像 李华
网站建设 2026/3/13 13:01:26

FlashAI多模态版:重新定义本地AI部署的智能革命

FlashAI多模态版&#xff1a;重新定义本地AI部署的智能革命 【免费下载链接】flashai_vision 项目地址: https://ai.gitcode.com/FlashAI/vision 在数据安全日益成为企业核心关切的当下&#xff0c;传统云端AI服务面临着隐私泄露和成本高昂的双重挑战。FlashAI多模态整…

作者头像 李华
网站建设 2026/3/13 12:19:30

掌握Proteus元器件库大全的图解说明与应用技巧

掌握Proteus元器件库的实战指南&#xff1a;从查找、建模到软硬协同仿真在电子系统设计中&#xff0c;有一个“隐形门槛”常常被初学者忽视&#xff0c;却让无数工程师在项目初期踩坑——如何快速、准确地找到能真正“动起来”的仿真元件&#xff1f;不是所有原理图工具都能做到…

作者头像 李华