1.8寸TFT ST7735 多平台代码例程

知识库
知识库文档
/firmware/显示屏/1.8寸 TFT ST7735/1.8寸TFT ST7735 多平台代码例程.md

文档

1.8寸TFT ST7735 多平台代码例程


Arduino (Adafruit ST7735)

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>

#define TFT_CS   10
#define TFT_DC   9
#define TFT_RST  8

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  tft.initR(INITR_BLACKTAB);  // 1.8寸黑标签
  tft.setRotation(1);
  tft.fillScreen(ST7735_BLACK);
  tft.setTextColor(ST7735_WHITE);
  tft.setTextSize(1);
  tft.setCursor(0, 0);
  tft.println("ST7735 1.8 TFT");
  tft.drawRect(0, 0, 128, 160, ST7735_RED);
}

void loop() {
  tft.fillRect(10, 50, 108, 60, random(0xFFFF));
  tft.setCursor(10, 75);
  tft.setTextColor(ST7735_WHITE);
  tft.print("Color: 0x");
  tft.println(random(0xFFFF), HEX);
  delay(1000);
}

ESP32 (TFT_eSPI — 高性能)

// 需先配置 TFT_eSPI/User_Setup.h
// #define ST7735_DRIVER
// #define TFT_WIDTH 128 #define TFT_HEIGHT 160
// #define TFT_CS 5, TFT_DC 4, TFT_RST -1, TFT_MOSI 23, TFT_SCLK 18

#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();

void setup() {
  tft.init();
  tft.setRotation(0);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_GREEN, TFT_BLACK);
  tft.drawString("ESP32 TFT_eSPI", 5, 5, 2);
  
  // 绘制渐变条
  for(int i=0; i<128; i++) {
    tft.drawFastVLine(i, 40, 40, tft.color565(i*2, 255-i*2, 128));
  }
}

void loop() {
  tft.fillCircle(64, 120, 20, random(0xFFFF));
  delay(500);
}

STM32 HAL + LVGL

// STM32 SPI DMA + LVGL 集成
#include "lvgl.h"
#include "st7735.h"

static lv_disp_drv_t disp_drv;
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf[128 * 10]; // 10行缓冲

void st7735_flush(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_p) {
    uint16_t w = area->x2 - area->x1 + 1;
    uint16_t h = area->y2 - area->y1 + 1;
    st7735_set_window(area->x1, area->y1, area->x2, area->y2);
    st7735_write_data((uint8_t*)color_p, w * h * 2);
    lv_disp_flush_ready(drv);
}

void display_init(void) {
    st7735_hw_init(); // SPI初始化 + 背光
    lv_init();
    lv_disp_draw_buf_init(&draw_buf, buf, NULL, 128 * 10);
    lv_disp_drv_init(&disp_drv);
    disp_drv.hor_res = 128;
    disp_drv.ver_res = 160;
    disp_drv.flush_cb = st7735_flush;
    disp_drv.draw_buf = &draw_buf;
    lv_disp_drv_register(&disp_drv);
}

MicroPython (ESP32)

from machine import Pin, SPI
import st7735  # micropython-st7735
import time

spi = SPI(1, baudrate=20000000, sck=Pin(18), mosi=Pin(23))
tft = st7735.ST7735(spi, dc=Pin(4), cs=Pin(5), rst=Pin(2), 
                     width=128, height=160, rotation=0)

tft.fill(st7735.BLACK)
tft.text("MicroPython", 5, 5, st7735.WHITE)
tft.text("ST7735 TFT", 5, 15, st7735.GREEN)

# 绘制彩虹色条
colors = [st7735.RED, st7735.ORANGE, st7735.YELLOW, 
          st7735.GREEN, st7735.CYAN, st7735.BLUE, st7735.MAGENTA]
for i, c in enumerate(colors):
    tft.fill_rect(i * 18, 50, 18, 30, c)

tft.show()

信息

路径
/firmware/显示屏/1.8寸 TFT ST7735/1.8寸TFT ST7735 多平台代码例程.md
更新时间
2026/5/26