ESP32系列之LVGL(一):ESP32S3+ST7789点屏

系列文章目录



前言

第一次使用lvgl做ui,屏幕类的外设之前也鲜有使用,所以也讲不出个一二三四的原理来,只是站在前辈们的肩膀上摸索一下。本系列文章基于ESP32系列ESP-IDF框架下对lcd屏和lvgl的使用,仅用于笔者使用过程记录和参考,如果在使用过程中遇到了一些问题也会提出来希望各路大神不吝赐教。


一、LCD硬件

本人手中有一块ESP32S3-WROOM的开发板(8MBflash+2MBpsram)以及240*320大小、16 bit 色深的TFT屏幕两块。LCD屏幕使用的控制器都是ST7789,但接口略有不同,一块为SPI接口,一块为8080接口,下面为lcd的引脚描述:

SPI:

SPI LCD 引脚连接
LCDESP32S3
GNDGND
VCC3v3
SCL13(PCLK)
SDA12(MOSI)
RST11(不使用填-1)
DC10
CS9
BL46

8080:

这里讲一下8080接口接线:

1,2为背光灯控制,1为背光灯阴极,直接接地,2为阳极,接esp32s3的io;电源只需接4脚3.3v;7、8、9、10分别接入esp32s3对应io,11脚RD最好接3.3v拉高(看其它帖子说RD浮空会导致花屏);同时笔者由于初次接线时没有注意到12-19引脚对应的是D7-D0导致数据线12对应到了D0,因此这一点也需格外注意。

二、点屏代码

由于是初次点屏,因此先从IDF里的example/peripherals/lcd示例走起,spi接口先跑tjpgd示例,8080接口跑i80_controller示例。如果idf里没有这个示例,可以先升级一下IDF版本,当然也可以直接跑lvgl示例。

以下仅展示例程中的代码修改部分:

spi接口:

1.修改对应引脚io和屏幕大小:

#define EXAMPLE_LCD_BK_LIGHT_ON_LEVEL  1
#define EXAMPLE_LCD_BK_LIGHT_OFF_LEVEL !EXAMPLE_LCD_BK_LIGHT_ON_LEVEL
// #define EXAMPLE_PIN_NUM_DATA0          23  /*!< for 1-line SPI, this also refereed as MOSI */
// #define EXAMPLE_PIN_NUM_PCLK           19
// #define EXAMPLE_PIN_NUM_CS             22
// #define EXAMPLE_PIN_NUM_DC             21
// #define EXAMPLE_PIN_NUM_RST            18
// #define EXAMPLE_PIN_NUM_BK_LIGHT       5
#define EXAMPLE_PIN_NUM_PCLK           13       //SCL
#define EXAMPLE_PIN_NUM_DATA0          12  /*!< for 1-line SPI, this also refereed as MOSI */   //SDA
#define EXAMPLE_PIN_NUM_RST            11
#define EXAMPLE_PIN_NUM_DC             10
#define EXAMPLE_PIN_NUM_CS             9
#define EXAMPLE_PIN_NUM_BK_LIGHT       46

2,设置芯片类型及menuconfig参数配置:开启psram支持,速率为80M 

3.编译和烧录查看运行效果:

屏幕不亮的话修改背光电平。

8080接口:

1.修改对应引脚io和屏幕大小:

#define EXAMPLE_LCD_BK_LIGHT_ON_LEVEL  1

#define EXAMPLE_LCD_BK_LIGHT_OFF_LEVEL !EXAMPLE_LCD_BK_LIGHT_ON_LEVEL

#define EXAMPLE_PIN_NUM_DATA0          36       //19

#define EXAMPLE_PIN_NUM_DATA1          16

#define EXAMPLE_PIN_NUM_DATA2          37

#define EXAMPLE_PIN_NUM_DATA3          15

#define EXAMPLE_PIN_NUM_DATA4          38

#define EXAMPLE_PIN_NUM_DATA5          7

#define EXAMPLE_PIN_NUM_DATA6          39     //13

#define EXAMPLE_PIN_NUM_DATA7          6   //12



#define EXAMPLE_PIN_NUM_CS             42       //7

#define EXAMPLE_PIN_NUM_RST            4       //8

#define EXAMPLE_PIN_NUM_DC             41  //RS(9)

#define EXAMPLE_PIN_NUM_PCLK           5   //WR(10)



#define EXAMPLE_PIN_NUM_BK_LIGHT       20



// The pixel number in horizontal and vertical

#define EXAMPLE_LCD_H_RES              240

#define EXAMPLE_LCD_V_RES              320

2,设置芯片类型及menuconfig参数配置:开启psram支持,速率为80M

idf.py set-target esp32s3

idf.py menuconfig

3.编译和烧录查看运行效果:

有花屏且图标颜色不对。

4.问题解决

关于颜色不对的问题我一开始参照其它帖子在lvgl里设置颜色交换,但未解决问题。

后来查找代码,在esp_lcd_panel_dev_config_t 配置中将LCD_RGB_ENDIAN_RGB换成LCD_RGB_ENDIAN_BGR,图标从蓝色变成了黄色,但还是不对。最终在查找花屏原因的时候看到了这两行代码:

 // Set inversion, x/y coordinate order, x/y mirror according to your LCD module spec

 // the gap is LCD panel specific, even panels with the same driver IC, can have different gap value

    esp_lcd_panel_invert_color(panel_handle, true);

    esp_lcd_panel_set_gap(panel_handle, 0, 20);

发现这是进行颜色交换和设置屏幕间隙的API,将颜色交换改为false,间隙改为0,demo终于正常

演示。

esp_lcd_panel_invert_color(panel_handle, false);
esp_lcd_panel_set_gap(panel_handle, 0, 0);

显示效果(红色横杠为屏幕硬件上有条纹):

 

三、其它问题

1.之前使用另一款不带psram的esp32开发板通过8080驱动屏幕时屏幕一直处于花屏状态。因此暂不清除该现象是否与硬件有关。


总结

对lcd驱动的spi接口和8080接口只能说各有各的好处,目前笔者对此暂时理解不深,也就不多妄言,下次有机会再深入探讨。

要在ESP32S3上驱动ST7789 LCD显示屏,你可以按照以下步骤进行操作: 1. 首先,你需要连接ESP32S3ST7789显示屏。根据引用中的链接和引用中提到的驱动名称,你可以找到具体的引脚连接图和驱动程序。 2. 确保你的ESP32S3开发板上已经安装了适当的开发环境,例如Arduino IDE。根据引用中提到的信息,你可以使用Arduino IDE来进行测试。 3. 下载并安装ST7789驱动库。你可以在Arduino IDE的库管理器中搜索"ST7789",然后选择适合你的库进行安装。 4. 在你的Arduino IDE中打开一个新的项目,并导入ST7789库。你可以在库管理器中搜索并选择安装的库。 5. 在你的代码中包含ST7789库的头文件,并初始化SPI连接和ST7789对象。根据库的文档和示例,你可以设置显示屏的分辨率、引脚连接和其他必要的参数。 6. 编写代码以显示你想要在屏幕上显示的内容。ST7789库应该提供了一些函数来方便你在屏幕上绘制图形、显示文本等操作。 7. 上传代码到ESP32S3开发板并运行。确保你的开发板与计算机正确连接,并选择正确的开发板和端口。根据库的示例和文档,你应该能够看到你的代码在ST7789显示屏上正常运行。 请注意,以上步骤仅提供了一个基本的指导,具体的驱动过程可能因为硬件和软件环境的差异而有所不同。确保阅读并遵循ST7789库的文档和示例,以便获得更详细的指导和支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用ESP32驱动ST7789,效果很好的IPS显示屏](https://blog.csdn.net/u012388993/article/details/120605961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ESP32-S3 lvgl-v8-st7789](https://download.csdn.net/download/weixin_53411486/87164695)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值