合宙配合开发板提供的两款LCD,一款是0.96寸的IPS屏,分辨率160x80,一款是1.8寸的TFT,分辨率160x128,价格很实惠,用在一些需要小显示设备的地方很方便。但是合宙只提供了LuatOS下的支持,如果想在其它场合用就需要自己写驱动。Arduino下倒是有很多现成的库可以支持,但是直接用这些库,往往都会出现显示位置有偏移,色彩错误的问题。网上也看到对这些驱动进行修改的文章,但是很多修改都要去改驱动源码,如果再换个屏,可能又有兼容问题。我研究了一下,其实只需要改一下配置即可。下面以TFT_eSPI库为例说明一下修改方法,因为lvgl直接用这个库,所以这个驱动弄好了就可以直接用lvgl了,比较方便:
1,在Arduino的库管理里,搜索TFT_eSPI库并安装
2,打开TFT_eSPI库的目录,windows下,这个文件夹位于 \当前用户\文档\Arduino\libraries\TFT_eSPI,MAC下,这个库位于\用户\当前用户\Arduino\libraries\TFT_eSPI,打开User_Setups目录,找到Setup47_ST7735.h文件,复制一份,重命名,比如我用在合宙的S3开发板,用0.96的屏,就命名为Setup47_ST7735_S3_160X80.h,编辑文件内容
#define USER_SETUP_ID 47
#define ST7735_DRIVER // Configure all registers
//修改分辨率
#define TFT_WIDTH 80
#define TFT_HEIGHT 160
//#define ST7735_INITB
// #define ST7735_GREENTAB
// #define ST7735_GREENTAB2
// #define ST7735_GREENTAB3
// #define ST7735_GREENTAB128 // For 128 x 128 display
//#define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
// #define ST7735_REDTAB
//#define ST7735_BLACKTAB
#define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset,这里是关键,如果不修改,显示会有偏移
//#define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
//#define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
//#define TFT_INVERSION_ON
//#define TFT_INVERSION_OFF
// Generic ESP32 setup
//引脚配置,这里是根据ESP32S3的开发板定义的,其它开发板请根据实际情况修改
#define TFT_MISO -1 //未使用
#define TFT_MOSI 17
#define TFT_SCLK 18
#define TFT_CS 14
#define TFT_DC 15
#define TFT_RST 16 // Connect reset to ensure display initialises
#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
#define SPI_FREQUENCY 27000000
//#define SPI_FREQUENCY 40000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
如果是1.8寸160*128的屏,则使用如下内容
#define USER_SETUP_ID 47
#define ST7735_DRIVER // Configure all registers
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
// #define ST7735_INITB
// #define ST7735_GREENTAB
// #define ST7735_GREENTAB2
// #define ST7735_GREENTAB3
// #define ST7735_GREENTAB128 // For 128 x 128 display
// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)
// #define ST7735_REDTAB
//#define ST7735_BLACKTAB
// #define ST7735_REDTAB160x80 // For 160 x 80 display with 24 pixel offset
//这里是关键,如果不定义,颜色显示不对
#define TFT_RGB_ORDER TFT_RGB // Colour order Red-Green-Blue
//#define TFT_RGB_ORDER TFT_BGR // Colour order Blue-Green-Red
//#define TFT_INVERSION_ON
//#define TFT_INVERSION_OFF
// Generic ESP32 setup
#define TFT_MISO -1 //Not Connected
#define TFT_MOSI 17
#define TFT_SCLK 18
#define TFT_CS 14
#define TFT_DC 15
#define TFT_RST 16 // Connect reset to ensure display initialises
#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
#define SPI_FREQUENCY 27000000
//#define SPI_FREQUENCY 40000000
#define SPI_READ_FREQUENCY 20000000
#define SPI_TOUCH_FREQUENCY 2500000
// #define SUPPORT_TRANSACTIONS
然后找到User_Setup_Select.h文件,注释掉前面的#include <User_Setup.h> 一行,
新增一行
#include <User_Setups/Setup47_ST7735_S3_160X80.h>
Setup47_ST7735_S3_160X180.h就是刚才写的那个文件。
修改完成后,可以打开TFT_eSPI库带的JPG例程(需要根据例程注释的提示安装JPEGDedoder库)显示图片,看颜色是否正确