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 — 高性能)
#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
#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()