----------------------------------------------------------------------------------------------------------------------
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验一)
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验二)玩具示波器
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验三)折腾 TFT_eSPI 库
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验四)直接显示网络图片
Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验五)温湿度
----------------------------------------------------------------------------------------------------------------------
折腾TFT_eSPI.h
很早知道 TFT_eSPI.h 库,在本系列实验之前中为什么一直用 Adafruit_ST7735.h 这个库呢?那是走了些弯路,毕竟ST7735S相对来说不是最广泛使用,进入我的视线也是 合宙 这款 1.8‘ TFT只卖9.9 包邮。到手后测试发现用 Adafruit_ST7735.h 这个库显示很正常,但是用 TFT_eSPI.h 屏幕显示错位,按说明改参数后无法修复。再加上看了很多网文说 TFT_eSPI.h 接线需要按硬件SPI连线,当时用ESP8266测试的确也是,我又喜欢直接插这种自定义引脚的方式,正好 Adafruit_ST7735.h 就是支持的,那么就先这么用吧。
今天无聊又翻出 ESP32 来测试 TFT_eSPI , 依然还是显示错位,依然还是改参数无效,正准备又放弃时,发现参数列表后面还有一个看起来可能的没试,一试果然OK了。原来下图这种事真的有可能发生。
TFT_eSPI 库首次使用,需要配置库安装目录里的 User_Setup.h (不同屏和开发板引脚配置不同。。。省略1万字)
把该文件改个名字做个备份,然后用下面内容替换里面所有文字。我只是配置测试通过后删除了注释和其他开发板的内容。只在 合宙1.8’ TFT 验证通过,其他的自己看着办。
#define USER_SETUP_INFO "User_Setup"
#define ST7735_DRIVER
#define TFT_RGB_ORDER TFT_RGB
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_REDTAB
// GND
// VCC
#define TFT_SCLK 2
#define TFT_MOSI 3
#define TFT_RST 10
#define TFT_DC 6
#define TFT_CS 7
#define SPI_FREQUENCY 40000000 // 不建议大于27M
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT // Comment out this will save ~20kbytes of FLASH
于是打开任意 TFT_eSPI 自带例程即可愉快的玩耍了。
ESP32 引脚略不同,看着引脚图, 确定 GND 3.3V 位置后 按上面配置修改其余5个引脚号即可。
比如我手里的 ESP32 这样改:
#define USER_SETUP_INFO "User_Setup"
#define ST7735_DRIVER
#define TFT_RGB_ORDER TFT_RGB
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
#define ST7735_REDTAB
#define SPI_FREQUENCY 40000000 // 不建议大于27M
// GND
// VCC
#define TFT_SCLK 15
#define TFT_MOSI 2
#define TFT_RST 4
#define TFT_DC 16
#define TFT_CS 17
#define LOAD_GLCD // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.
//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT
#define LOAD_GFXFF // FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts
#define SMOOTH_FONT // Comment out this will save ~20kbytes of FLASH
最后实测,引脚不变,单次清屏,用 TFT_eSPI.h 比 Adafruit_ST7735.h 竟然快50倍。一下子对合宙这块屏兴趣大增,以前因为太慢不敢想的图片视频类应用也排上了实验清单。
录了个视频,没必要长传优酷了,视频转Gif 意思意思。
-------------------------------------------------------------------------------------------------------------------------
折腾 LVGL
LVGL是基于 TFT_eSPI 的多平台GUI。
省略10万字。。。
折腾好一阵子,终于让 LVGL 跑起来,显示出一个蓝色按钮,蛮漂亮。
这里只开了个头,就不专文写了,因为这个可能要搁置了,暂时还没有用 arduino 玩大触摸屏的想法,而且SPI加触摸的大屏选择也不多。个人认为大触摸屏应用 android 或许要合适些。
注意,LVGL 需要触摸屏,本文前面写的引脚定义并不包含,单用 TFT_eSPI 没问题,跑 LVGL 需要增加下面一行到 User_Setup.h , 实测不加一定报错。引脚号任意,反正也没有可连接的。
#define TOUCH_CS 11