arduino esp32 st7789 教程
时间: 2025-01-15 12:08:02 浏览: 89
### 使用Arduino和ESP32驱动ST7789显示屏
#### 库安装
为了使Arduino IDE能够支持ST7789显示屏的操作,需先下载并安装`TFT_eSPI`库以及用于解码JPEG图像的`JPEGDecoder`库。这可以通过进入Arduino IDE中的菜单栏选择项目->加载库->管理库来完成。
#### 设置配置文件
编辑`User_Setup.h`文件以适应特定硬件需求。对于采用ST7789作为显示器的情况,应定义如下参数:
- `#define ST7789_DRIVER`: 指定使用的LCD控制器型号为ST7789。
- 设定屏幕分辨率:`#define TFT_WIDTH 240` 和 `#define TFT_HEIGHT 240` 表明该实例中所用到的是分辨率为240×240像素的小型彩色液晶面板[^1]。
针对不同版本的开发板连接方式可能有所差异,在这里提供两种常见情况下的引脚分配方案供参考:
- **当使用带有D系列编号GPIO接口的传统NodeMCU设备时**:
```c++
#define TFT_CS D8 // 芯片选通信号控制端口设为D8
#define TFT_DC D3 // 数据/命令切换信号控制端口设为D3
#define TFT_RST D4 // 复位信号控制端口可选地连至NodeMCU自身的复位键上;此处指定为D4
#define TFT_BL D1 // 如果存在背光调节功能,则将其关联到D1 GPIO管脚上去
```
- **而如果是在ESP32-S3这类较新型号单片机平台上工作的话**:
```c++
#define TFT_MOSI 13 // MOSI数据线通常对应于第十三个通用输入输出针脚
#define TFT_SCLK 11 // SCLK串行时钟同步脉冲由第十一个IO负责传输
#define TFT_CS -1 // 对于此款微处理器而言,CS可以不被实际占用(-1表示自动处理),除非特别需要手动设定
#define TFT_DC 12 // DC区分指令还是数据信息的作用,通过十二号位置上的触点实现
#define TFT_RST 10 // 同样地,复位操作经由十号通道执行
#define TFT_BL 9 // 若有LED背景灯强度调整的需求,九号引脚可用于此目的
```
以上两组定义分别适用于不同的硬件平台,并且可以根据具体电路设计灵活调整各条线路的具体物理连接关系[^2]。
#### 初始化与显示逻辑编写
下面给出了一段简单的程序框架用来初始化屏幕并将一幅预存好的BMP格式图形渲染出来。这段代码片段展示了如何调用`tft.init()`来进行必要的启动准备工作,接着利用`tft.setSwapBytes(true)`确保字节顺序正确无误之后再填充整个画布颜色以便清除之前残留的内容最后借助`tft.pushImage(x,y,w,h,data)`函数把目标图案放置在指定坐标处[^3]。
```cpp
#include <TFT_eSPI.h>
// 假设已按照前述说明完成了相应的宏定义...
void setup() {
tft.init();
tft.setRotation(1); // 可选项:旋转方向设置
tft.setSwapBytes(true);
tft.fillScreen(TFT_BLACK);
}
void loop() {
static const uint16_t bmpWidth = 240;
static const uint16_t bmpHeight = 240;
extern uint16_t bmp1[]; // 图像数组声明
tft.pushImage(0, 0, bmpWidth, bmpHeight, bmp1);
delay(5000); // 显示一段时间后刷新或等待其他动作触发...
}
```
阅读全文
相关推荐


















