ESP32+GC9A01屏幕学习笔记(基于littleVGL界面)

您所在的位置:网站首页 miso什么品牌 ESP32+GC9A01屏幕学习笔记(基于littleVGL界面)

ESP32+GC9A01屏幕学习笔记(基于littleVGL界面)

2023-12-08 23:53| 来源: 网络整理| 查看: 265

0前言

    STM32价格居高不下,最近转战ESP32,448KB flash,520KB ram,内部主频最高支持240MHZ,48管脚,带蓝牙和Wifi,日常搞事情足够了,资料网站https://www.espressif.com/zh-hans/products/socs

1 硬件环境搭建

    使用的模块包括:    (1)LOLIN D32 Lite模块,某宝买的ESP32模块;    (2)GC9A01中景园买的SPI圆形屏幕;    (3)SD卡模块,使用的是大卡直连的,既可以使用大卡,也能使用转换器接小卡;    (4)MPU6050加速度模块。

硬件总览

 实验板线路连接如上图,引脚连接见下表:

1.1 屏幕

屏幕SPI引脚

1.2 SD卡

SD卡SPI引脚

1.3 MPU6050

6050IIC引脚

2 软件环境搭建

    开发环境使用Arduino IDE 2.0,其与VScode框架相同,用起来十分顺手,唯一不足就是改不了每次上传要先编译的老规矩。2.1 ESP32开发板安装   IDE不自带ESP32库,需手动安装。File-> Preferences,打开设置面板,在Additional boards manager URLs栏加入https://dl.espressif.com/dl/package_esp32_index.json。

开发板网址设置

 然后打开开发板管理器(Boards Manager)如下图,搜索栏输入“ESP32”,点击INSTALL安装。

esp32开发板安装

2.2 TFT_eSPI库安装    该库用于驱动屏幕。打开库管理器(Library Manager)搜索栏输入“TFT_eSPI”,INSTALL安装。

TFT_eSPI库安装

2.3 LVGL库安装    搜索栏输入“lv_arduino”,INSTALL安装。

lv_arduino库安装

2.4 MPU6050库安装    搜索“MPU6050”选择Electronic Cats版本安装即可。

MPU6050库安装

3 移植与设置    TFT_eSPI和lv_arduino库都需要设置后才能正常使用,主要工作是告诉单片机屏幕的分辨率和使用到了哪些引脚。屏幕和SD卡各用一个SPI接口,6050用一个IIC接口,需要各自设置。3.1 GC9A01屏幕设置    首先设置屏幕驱动,主要内容为设置接口引脚、字体和刷新率。打开C:\Users\用户\Documents\Arduino\libraries\TFT_eSPI文件夹,找到User_Setup.h复制一份备份,然后将其内容全部删除,粘贴以下内容:

    打开C:\Users\用户\Documents\Arduino\libraries\TFT_eSPI\TFT_Drivers\GC9A01_Defines.h,将第四行和第六行的分辨率都改为240:

    打开C:\Users\用户\Documents\Arduino\libraries\lv_arduino\lv_conf.h,将23、24行的分辨率改为240。lv_conf.h为lvgl的设置文件,有大量UI相关设置。

3.2 SD卡设置    本开发板的ESP32芯片(ESP32-D0WD)有两路SPI:HSPI和VSPI(注:ESP32的SPI不止两路,但接外设一般用这两路)接口见下表。前面屏幕已经使用了HSPI,SD卡我们使用VSPI。

HSPI和VSPI引脚

    打开C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI\src\SPI.cpp,将最后一行改为

即可完成配置。    以下为SPI设置的分析,不感兴趣的可跳过。

C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI\src\SPI.cpp内代码如下:

    可见“SPIClass”的构造函数“SPIClass(uint8_t spi_bus)”传入了一个参数“spi_bus”给“_spi_num”,然后在“begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss)”函数中判断“_spi_num ”是否为“VSPI”如果是,引脚选择(SCK 、MISO、MOSI 、SS  ),如果不是,选择(14、12、13、15),所以设置SPIClass SPI(VSPI);就是将系统默认SPI设置为VSPI。    但是有两个疑问:1、(SCK 、MISO、MOSI 、SS  )在哪设置?2、SD卡凭啥使用系统默认设置的引脚?1、(SCK 、MISO、MOSI 、SS  )在哪设置?    C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\variants\LOLIn32-lite\pins_arduino.h 26-29行设置了这样些引脚。

2、SD卡凭啥使用系统默认设置的引脚?    C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI\src\SPI.h倒数第二行为:

其声明了外部变量“SPI”。

C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SD\src\SD.h SD头文件部分代码如下:

可见外部变量“SPI”被传入SDbegin函数中,从而把引脚和SD卡绑定。

3.3 MPU6050设置    MPU6050使用IIC接口,由C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\variants\LOLIn32-lite\pins_arduino.h的20和21行可知,模块默认的IIC接口为19和23,但是这两个接口已经被SPI使用,为了不造成干扰,需要修改。

   打开C:\Users\用户\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\Wire\src\Wire.cpp,找到72行begin函数,将sdaPin 和sclPin 分别修改为26和25即可。

4 示例代码

    按前面的步骤正确设置后就可以开始写自己的程序了,在file-> example中可以找到相应的示例:

示例

4.1 SD卡图片显示示例

    该示例位置如下图,使用到了JPEGDecoder库,因此要先安装该库,安装方法见前文。

SD卡图片显示示例

    void loop() 函数内的代码可控制图片播放,将其修改如下。把图片做成240*240像素大小,放置于SD卡根目录,并命名为1.jpg、2.jpg、3.jpg、4.jpg、5.jpg,程序烧录进esp32即可在屏幕上播放图片。

成功显示图片

    使用PS等软件处理图片时有几个注意点:1.图片大小应为240*240像素;2.必须保存为JPG格式;3.格式选择“基线(标准)”。示例图片:

1.jpg2.jpg

3.jpg4.jpg5.jpg

4.2 LVGL示例

    lvgl示例位置如图。

    将示例的代码稍作修改,新增一个my_test_lvgl()函数,该函数的效果是画一个按钮。lvgl开发较为复杂,建议看相关教程。我最近在看这个正点原子手把手教你学littleVGL【轻量级开源GUI】虽然是基于stm32的但除移植方法不同外代码是一样的。

    其他功能有空再补充。

参考:如何制作一个赛博朋克风格的 百大UP奖杯

          ESP32驱动GC9A01圆形屏幕播放bad Apple

          正点原子手把手教你学littleVGL

图片来源:1.jpg、2.jpg、3.jpg、4.jpg、5.jpg



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3