ESP32-S3-Touch-new

来自Waveshare Wiki
跳转至: 导航搜索
ESP32-S3-Touch-LCD-4.3
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
主控 ESP32-S3N8R8
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 Type C USB

说明

产品简介

ESP32-S3-Touch-LCD-4.3 是一款微雪 (Waveshare) 设计的低成本,高性能的微控制器开发板。其支持 2.4GHz WiFi 和 BLE 5,集成大容量 Flash 和 PSRAM,板载 4.3 英寸电容触摸LCD屏,可流畅运行 LVGL 等 GUI 界面程序;结合多种外设接口(如:CAN、I2C、RS485和Sensor等接口),快速开发 ESP32-S3 的 HMI 等应用。多种功能与接口满足在物联网 (IoT)、移动设备、智能家居等应用场景的功耗需求。

产品特性

  • 搭载高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
  • 内置 512KB SRAM 和 384KB ROM,叠封 8MB Flash 和 8MB PSRAM
  • 板载 4.3 英寸电容触摸屏,800 × 480 分辨率,65K 彩色
  • 支持 I2C 接口控制电容触摸,5 点触控,支持中断
  • 板载 CAN、RS485、I2C 接口和 Micro SD 卡座等,集成全速 USB 串口
  • 支持灵活时钟,模块电源单独设置等精准控制,实现多场景低功耗模式

硬件说明

接口说明

Esp32-s3-touch-lcd-4.3-002.jpg

  • UART 接口 :使用 CH343P 芯片用于 USB 转 UART 连接 ESP32-S3 的 UART_TXD(GPIO43),UART_RXD(GPIO44) ,用于固件烧录和日志打印
  • USB 接口:GPIO19(DP) GPIO20(DN) 默认作为 ESP32-S3 的 USB 引脚 ,接口可以使用 UVC 等协议摄像头,UVC驱动请查阅连接
  • Sensor 接口:此接口连接 GPIO6 作 ADC 使用,可以接入 Sensor套件等器件
  • CAN 接口:CAN 接口引脚和 USB 接口引脚复用,使用 FSUSB42UMX 芯片切换,默认使用 USB 接口(FSUSB42UMX的USB_SEL引脚为LOW时)
  • I2C 接口:ESP32-S3 提供多路硬件 I2C ,目前使用 GPIO8(SDA),GPIO9(SCL) 引脚做 I2C 总线挂载 IO 扩展芯片、触摸接口,I2C接口
  • RS485 接口:开发板板载 RS485 接口电路,可直接接入 RS485 设备进行通信,RS485电路收发模式自动切换
  • PH2.0 电池接口:开发板使用高效充放电管理芯片 CS8501 ,可将单节锂电池升压到 5V ,目前充电电流为 580mA,用户可更换 R45 电阻更改充电电流,详情请查阅原理图

引脚连接

ESP32-S3-WROOM-x LCD USB SD UART CAN Sensor
GPIO0 G3
GPIO1 R3
GPIO2 R4
GPIO3 VSYNC
GPIO4 TP_IRQ
GPIO5 DE
GPIO6 AD
GPIO7 PCLK
GPIO8 TP_SDA
GPIO9 TP_SCL
GPIO10 B7
GPIO11 MOSI
GPIO12 SCK
GPIO13 MISO
GPIO14 B3
GPIO15 RS485_TX
GPIO16 RS485_RX
GPIO17 B6
GPIO18 B5
GPIO19 USB_DN CANRX
GPIO20 USB_DP CANTX
GPIO21 G7
GPIO38 B4
GPIO39 G2
GPIO40 R7
GPIO41 R6
GPIO42 R5
GPIO43 UART_TXD
GPIO44 UART_RXD
GPIO45 G4
GPIO46 HSYNC
GPIO47 G6
GPIO48 G5
CH422G - - - - - -
EXIO1 TP_RST
EXIO2 DISP
EXIO3 LCD_RST
EXIO4 SD_CS
EXIO5 USB_SEL(LOW) USB_SEL(HIGH)

硬件连接

  • 开发板板载自动下载电路,UART 丝印处 Type C 端口用于程序下载和日志打印,下载程序后,按 RESET 按键运行程序
  • 使用时注意 PCB 天线区域,避免其它金属,塑料件贴合 PCB 天线
  • 开发板使用 PH2.0 座子引出 ADC ,CAN,I2C,RS485 外设引脚,使用 PH2.0 转 2.54mm 杜邦公头配件连接传感器件
  • 4.3inch 屏幕占用绝大多数 GPIO,开发板使用 CH422G 芯片扩展 IO,用于复位,关闭打开背光等
  • CAN 和 RS485 外设默认使用跳冒连接 120 欧姆电阻,可选 NC 取消终端电阻连接
  • SD 卡使用 SPI 通信,注意 SD_CS 引脚需要由 CH422G 的 EXIO4 驱动

开发工具介绍

Arduino-IDE-logo.jpg

Arduino IDE

Arduino IDE是一款便捷灵活、方便上手的开源电子原型平台。不需要太多基础,简单学习后,你也可以快速地进行开发。同时,Arduino 拥有庞大的全球用户社区,提供了海量的开源代码、项目示例和教程,还有丰富的库资源,封装了复杂功能,让开发者能快速实现各种功能。

ESP-IDF-logo.jpg

ESP-IDF

ESP-IDF,全称Espressif IDE,是乐鑫科技为 ESP系列芯片推出的专业开发框架。它使用C语言开发,包括编译器、调试器、烧录工具等,可在命令行下或使用集成开发环境(如 Visual Studio Code 配合 Espressif IDF 插件)进行开发,插件提供代码导航、项目管理、调试等功能。


这两种开发方式各有其优势,开发者可以根据自身需求和技能水平进行选择。Arduino 适合初学者和非专业人士,因其简单易学、上手快。而对于有专业背景或对性能要求较高的开发者,ESP-IDF 是更好的选择,它提供了更高级的开发工具和更强的控制能力,适用于复杂项目的开发。

Arduino 开发

Arduino 环境搭建

要使用 Arduino 调试 ESP32,需安装三个部分:Arduino IDE、ESP32 开发板管理器及示例程序相关依赖库。由于 Arduino IDE 会定期更新开发板包和依赖库,这些更新可能引入不兼容的更改,导致部分示例程序依赖的库文件版本不兼容。为减少开发过程中可能出现的编译错误等问题,建议用户直接使用我们的离线安装包。

工具 说明 版本 下载地址
Arduino IDE 内置了编译器、上传工具和监控工具,可以一键编译并烧录到目标设备 v1.8以上 Arduino IDE
ESP32 开发板管理器
(esp32_package_3.0.2_arduino)
开发板管理器允许你从Arduino官方和第三方提供的库中选择并安装所需的开发板包。例如,安装ESP32开发板包后,IDE就可以编译和上传程序到ESP32板子上。 v3.0.2 esp32_package_3.0.2_arduino
依赖库文件 ESP32 微控制器的特定显示面板控制库、I/O 扩展库和 LVGL图形化库 LVGL库版本是v8.4.0 ESP32-S3-Touch-LCD-4.3 示例程序下 Arduino/libraries

Arduino IDE 安装

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。Arduino IDE的版本需要≥1.8,安装的路径不能出现中文,否则编译时会出现错误。
    ESP32-S3-AMOLED-1.91-Ar-software-01.png
  • 运行安装程序,全部默认安装即可。
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问Arduino-esp32环境搭建参考

ESP32 开发板管理器安装

  1. 安装前关闭 Arduino IDE,下载esp32_package_3.0.2_arduino离线包 后双击安装,设置好 Arduino 器件包目录:
    ESP32-S3-Pico-Ar-18.jpg
    C:\Users\{用户名}\AppData\Local\Arduino15\packages\
    • 以用户名为 waveshare 为例
    C:\Users\waveshare\AppData\Local\Arduino15\packages\
  2. 在开发板管理器里面搜索ESP32,如果出现“esp32 by Espressif Systems 3.0.2”已安装,则离线包安装成功
    Esp32-arduino.png
  3. 如果您能自行解决不兼容问题或能够科学上网,也可以按照在线教程进行安装。ESP32 开发板管理在线安装教程
若此路径下已有esp32的文件夹,建议将其另存并删除此路径下的原esp32文件夹,以便正常使用离线包新生成的esp32文件夹

依赖库安装

  1. 首先打开 File->preferences->Sketchbook location下查看项目文件夹路径。
    Esp32-arduino-libraries.png
  2. 将相关的依赖库文件复制到 C:\Users\xxxx\Documents\Arduino\libraries 目录下,xxxx 代表您电脑上用户名
  3. 将解压文件放在对应用户的arduino器件包目录
    C:\Users\{用户名}\AppData\Local\Arduino15\packages\
    以用户名为waveshare为例
    C:\Users\waveshare\AppData\Local\Arduino15\packages\
  4. ESP32-S3-AMOLED-1.91-Ar-lib-04.png
    ESP32-S3-AMOLED-1.91-Ar-lib-05.png

  5. 如果您能自行解决不兼容问题或能够科学上网,也可以按照在线教程进行安装。Arduino 依赖库在线安装教程

Arduino 程序下载

准备工作

开发板板载有自动下载电路,两个接口均支持程序上传。其中,带有 UART 标识的 USB-C 接口为 USB 转 UART,可用于 Arduino 串口调试和程序输出打印。

  • ① USB Bridge 是一种通用的接口转换工具,用于将 USB 转换为其他类型的接口,适用于各种设备间的通信和调试。
  • ② USB JTAG 是一种专用的调试和编程工具,专门用于集成电路的调试和编程,提供硬件级别的测试和诊断功能。
    Esp32-device-All.png

USB 设备

  1. 使用 USB 上传程序时,如遇无法识别端口的问题,请按住 boot 按键后连接电脑,再松开 boot 按键,使开发板进入烧录模式。
  2. 此时在设备管理器中应能看到 USB 设备。
    Esp32-device-USB.png

UART 设备

    Esp32-device-UART.png

上传第一个程序

如果你刚入门学习ESP32和Arduino,还不知道如何创建、编译、烧录和运行Arduino ESP32程序,那么请展开看看,希望可以帮助到你!

新建工程

  • 运行Arduino IDE,选择 File -> New Sketch
    ESP32-S3-AMOLED-1.91-Ar-study-01.png
  • 输入代码:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello, World!");
  delay(2000);
}
  • 保存代码工程,选择 File -> Save As...;在弹出的菜单选择保存工程路径,并输入工程名,如 Hello_World,点击保存

ESP32-S3-AMOLED-1.91-Ar-study-02.png

编译和烧录程序

  • 选择对应的开发板,以ESP32S3主板为例:

①. 点击选择下拉框选项“Select Other Board and Port”;
②. 搜索需要的开发板型号“esp32s3 dev module”并选择;
③. 选择COM口
④. 保存选择。
ESP32-S3-AMOLED-1.91-Ar-study-03.png

  • 部分开发板在指定版本号支持直接选择型号,以“waveshare esp32-s3-lcd-1.69”为例

ESP32-S3-AMOLED-1.91-Ar-study-07.png

  • 若ESP32S3主板只有USB口,须打开(Enable)USB CDC,如下图所示:

ESP32-S3-AMOLED-1.91-Ar-study-04.png

  • 编译并上传程序:

①. 编译程序;②. 编译并下载程序;③. 下载成功。
ESP32-S3-AMOLED-1.91-Ar-study-05.png

  • 打开串口监视窗口,程序每隔2秒会打印“Hello World!”,运行情况如下所示:

ESP32-S3-AMOLED-1.91-Ar-study-06.png

上传设置

  • 在Arduino中,开发板和端口的设置是确保代码可以正确编译、上传并在开发板上运行的重要步骤。开发板设置定义了目标硬件的编译选项、工具链和烧录方式,而端口设置确保IDE能与开发板通信并上传代码。使用屏幕时,Arduino IDE要配置如下参数:
    开发板选择ESP32S3 DEV Module
    Flash Size 设置成 8MB(64Mb)
    PSRAM 设置成 OPI PSRAM
  • 具体设置如图所示:
    Esp32-arduino-upload-setting.png

Arduino示例程序

外设与接口

注意:在使用Arduino例程前,请先检查Arduino IDE环境与下载设置是否正确配置,具体操作可查看Arduino环境搭建

UART_Test

UART_Test 示例用于测试 UART 接口。该接口连接 GPIO43(TXD)和 GPIO44(RXD),用作 UART0。

  1. 烧录代码后,将 USB to Type-C 线接入标有“UART”的 Type-C 接口。
  2. 打开 Arduino 右上角的串口监视器,并向 ESP32-S3-Touch-LCD-4.3 发送消息。
  3. ESP32-S3-Touch-LCD-4.3 会将接收到的消息返回给串口,注意需要选择正确的COM口和波特率。
    Esp32-arduino-uart.png
  4. 重点函数解析:
    readString() 函数可用于从设备接收到数据中读取数据信息。读取到的信息将以字符串格式返回。

Sensor_AD

  1. Sensor_AD 示例用于测试 Sensor AD 座子的使用。该接口连接 GPIO6,用作 ADC,可接入 Sensor套件等外接设备。
  2. 烧录代码后,使用 "HY2.0 2P 转杜邦公头 3P 10cm" 线将 Sensor AD 座子连接传感器。
  3. 打开串口调试助手,可观察 AD 引脚读取的相关数据:ADC analog value 表示读取的 ADC 模拟值,ADC millivolts value 表示模拟值转化的毫伏数值。
  4. 测试步骤:
    • 将AD引脚与GND引脚短接,读取的值如下图所示:
    Esp32-arduino-adc0.png
    • 将AD引脚与3V3引脚短接,读取的值如下图所示:
    Esp32-arduino-adc1.png

I2C_Test

  • I2C_Test 示例用于测试 I2C 座子的使用。该接口通过 GPIO8 (SDA) 和 GPIO9 (SCL) 实现 I2C 通讯。
  1. 库文件准备。使用该例程驱动 BME680 环境传感器。编译前需通过 Library Manager 安装 “BME68x Sensor Library”。
    Esp32-arduino-iic.png
  2. 硬件连接。烧录代码后,使用 HY2.0 2P 转杜邦公头 4P 10cm 的连接线,最后将 I2C 座子与 BME680 环境传感器 连接。
  3. 数据检测。连接完成后,通过串口调试助手观察以下检测数据。
    ① 温度(单位:℃)
    ② 大气压(单位:Pa)
    ③ 相对湿度(单位:%RH)
    ④ 气体阻值(单位:ohms)
    ⑤ 设备状态
    Esp32-arduino-iic-bme68.png

RS485_Test

RS485_Test 示例,用于测试RS-485 座子的使用,此接口连接GPIO15(TXD)、GPIO16(RXD) 作 RS485通讯 使用

  • 烧录代码后,该例程需要使用到USB转RS485转换器,RS-485 座子连接“HY2.0 2P 转杜邦公头 2P 10cm”,再连接USB转RS485转换器,USB转RS485转换器连接电脑
  • 打开串口调试助手,发送RS485消息给ESP32-S3-Touch-LCD-4.3,ESP32-S3-Touch-LCD-4.3会把收到的消息返回给串口调试助手,注意需要选择正确的COM口和波特率,发送消息前勾选“加回车换行/AddCrLf”

ESP32-S3-Touch-LCD-4.3-106.png

SD_Test

SD_Test 示例,用于测试SD卡座的使用,需先插入SD卡,烧录代码后对SD卡进行读写操作

  • 烧录代码后,ESP32-S3-Touch-LCD-4.3会识别SD卡的类型和大小,再对进行文件的增删改查

Esp32-s3-touch-lcd-4.3-arduino 09.png

TWAItransmit

TWAItransmit 示例,用于测试CAN卡座的使用,此接口连接GPIO20(TXD)、GPIO19(RXD) 作 CAN通讯 使用

  • 烧录代码后,使用 “HY2.0 2P 转杜邦公头 2P 红黑 10cm” 线缆对应连接 ESP32-S3-Touch-LCD-4.3 和 USB-CAN-A 的 CAN H 和 CAN L引脚
  • 打开串口调试助手,可以看到Esp32-s3-touch-lcd-4.3已经开始发送CAN消息

ESP32-S3-Touch-LCD-4.3-110.png

  • USB-CAN-A 连接电脑,打开USB-CAN-A_TOOL_2.0 上位机,选择对应COM口, 按下图所示 2000000 端口波特率,CAN波特率 50.000Kbps,即可看到Esp32-s3-touch-lcd-4.3发送的CAN消息

ESP32-S3-Touch-LCD-4.3-109.png

TWAIreceive

TWAIreceive 示例,用于测试CAN卡座的使用,此接口连接GPIO20(TXD)、GPIO19(RXD) 作 CAN通讯 使用

  • 烧录代码后,使用 “HY2.0 2P 转杜邦公头 2P 红黑 10cm” 线缆对应连接 ESP32-S3-Touch-LCD-4.3 和 USB-CAN-A 的 CAN H 和 CAN L引脚
  • USB-CAN-A 连接电脑,打开USB-CAN-A_TOOL_2.0 上位机,选择对应COM口, 按下图所示 2000000 端口波特率,CAN波特率 500.000Kbps,即可发送CAN消息至Esp32-s3-touch-lcd-4.3

ESP32-S3-Touch-LCD-4.3-111.png

  • 打开串口调试助手,可以看到Esp32-s3-touch-lcd-4.3已经开始接收CAN消息(若接收报错,可多进行几次复位与软件重新开启设备,耐心等待)

ESP32-S3-Touch-LCD-4.3-112.png

LVGL UI

LVGL(Light and Versatile Graphics Library) 是一个轻量级、可移植的图形界面库,专为嵌入式系统设计,主要用于创建丰富的图形用户界面(GUI)。通过LVGL,用户可以轻松创建图形界面,并将硬件控制与界面交互结合起来,实现更加灵活的UI和硬件控制。

  1. 核心特点:
    • 轻量级:适合资源受限的设备(低内存、低性能MCU)。
    • 模块化:包含按钮、滑块、图表等丰富的UI控件。
    • 事件驱动:通过捕获用户输入(如触摸屏、鼠标)触发控件的回调函数。
    • 跨平台:支持多种硬件和操作系统,可通过驱动适配显示屏和输入设备。
    • 多功能:支持动画、主题、字体、矢量图形和多种分辨率。
  2. 工作流程:
    • 绘制界面:用户通过API创建和布局控件(如按钮、开关)。
    • 输入事件:捕获触摸或鼠标输入,触发对应的控件事件。
    • 事件回调:通过回调函数处理用户操作(如开关LED)。
    • 任务调度:lv_task_handler() 定期刷新界面,确保显示和交互同步

lvgl_Porting

lvgl_Porting 示例,用于测试RGB触摸屏幕的使用

  • 烧录代码后,可进行一系列触屏操作,是可供用户LVGL移植的例程(若烧录代码后,屏幕无反应,可查看是否有在Arduino IDE -> Tools正确配置:选择对应 Flash(8MB) 和使能 PSRAM(8MB OPI))

DrawColorBar

DrawColorBar 示例,用于测试RGB屏幕的使用

  • 烧录代码后,可观察屏幕显示蓝色、绿色、红色的色带(若烧录代码后,屏幕无反应,可查看是否有在Arduino IDE -> Tools正确配置:选择对应 Flash(8MB) 和使能 PSRAM(8MB OPI))

VS Code 配置 ESP-IDF 开发

ESP-IDF环境搭建

其它说明

  • 目前在 ESP-IDF v5.3 下使用单核跑 LVGL benchamark 示例的平均帧率上限为 26, 对应接口帧率为 41 (PCLK 21 MHz),编译前需要通过menuconfig 对ESP32 跟 LVGL进行配置:
CONFIG_FREERTOS_HZ=1000
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_120M=y [需要与 PSRAM 保持一致]
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_IDF_EXPERIMENTAL_FEATURES=y and CONFIG_SPIRAM_SPEED_120M=y [需要与 FLASH 保持一致]
CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y
CONFIG_SPIRAM_RODATA=y
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y
#以下 LVGL 配置项对帧率提升有帮助 (LVGL v8.3):
#define LV_MEM_CUSTOM 1 or CONFIG_LV_MEM_CUSTOM=y
#define LV_MEMCPY_MEMSET_STD 1 or CONFIG_LV_MEMCPY_MEMSET_STD=y
#define LV_ATTRIBUTE_FAST_MEM IRAM_ATTR or CONFIG_LV_ATTRIBUTE_FAST_MEM=y
  • 详细 LCD 及 LVGL 性能说明,请参考文档
  • PH2.0 锂电池座子只支持单节 3.7V 锂电池,勿使用多组电池包同时接入充放电,建议单节容量在 2000mAH 以下

安装VSCode

  1. 打开VSCode官网的下载页面,选择对应系统和系统位数进行下载
    Esp32-vscod-01.jpg
  2. 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
    Esp32-vscod-02.jpg
    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode

安装Python环境

  1. 首先,前往Python官网下载Python 3.11。你也可以在Microsoft Store商店下载,这样无需手动配置环境变量。
  2. 也可以点击我们下载好的:python 3.11.9
  3. 勾选"Add python.exe to PATH",将Python加入系统的环境变量。
    Python3.11-install-1.png
  4. 选择自己想要的安装路径,点击"Customize installation",其他配置参考下图:
    Python3.11-install-2.png
    Python3.11-install-3.png
  5. 安装完成后,检查一下安装是否成功:win+r ->输入cmd -> python --version,出现下图的信息,则安装成功 ESP32-IDF-2.png

安装Espressif IDF插件

  • 注:当前插件最新版本为V1.7.1,为体验一致,用户可以选择与我们一样的版本,考虑到网络问题无法下载esp-idf,我们提供了离线包。
    版本 描述 下载
    esp-idf esp-idf V5.3离线包 百度网盘链接
  1. 在一个非中文路径下新建一个名为esp的文件夹,将下载好的v5.3-dev.exe放入该文件夹内。双击运行该文件,然后点击Extract以开始解压。
    ESP32-S3-Touch-LCD-7-14.jpg
  2. 解压完成后,创建一个存放编译工具的文件夹在解压后的文件夹中,名为Espressif
    ESP32-S3-Touch-LCD-7-15.jpg
  3. 打开VSCode,使用快捷键Shift+Ctrl+X,进入插件管理器
    Esp32-vscod-03.jpg
  4. 在搜索栏中,输入Espressif IDF,选择对应的插件点击 install即可
    Esp32-vscod-04.jpg
  5. 使用快捷键F1,输入
    esp-idf: configure esp-idf extension

    Esp32-vscod-05.jpg
  6. 选择express(此教程针对第一次安装的用户,故只讲述初次的通用安装教程)Esp32-vscod-06.jpg
  7. 打开后显示该界面
    Esp32-vscod-07.jpg
  8. 我们按照下图进行设置,配置完成后,点击 install 进行下载:
    ESP32-S3-Touch-LCD-7-16.jpg
  9. 进入下载页面,其会自动安装对应工具与环境,稍等片刻即可,安装完成后,会进入以下界面,说明安装完成:
    ESP-IDF-SUCCESS.png
    • 注意:如果之前有安装过ESP-IDF,或者失败过的,请务必彻底删除文件或者创建全新的无中文路径

创建例程

  • 我们将以使用官方例程为例来进行演示。
  1. 使用快捷键F1,输入
    esp-idf:show examples projects

    Esp32-vscod-14.jpg
  2. 选择你当前的IDF版本
    ESP32-S3-Touch-LCD-7-20.jpg
  3. 以Hello world例程为例
    Esp32-vscod-16.jpg
  4. ①选择对应例程
    ②其readme会说明该例程适用于什么芯片(下文有介绍例程怎么使用与文件结构,这里略)
    ③点击创建例程
  5. 选择放置例程的路径,要求无例程同名文件夹
    Esp32-vscod-17.jpg

设置COM口

  1. 此处显示使用对应的COM口,点击可以修改对应COM口
    Esp32-vscod-18.jpg
  2. 我们的USB串行设备为COM5,所以我们选择COM5,请根据自己USB串行设备对应COM口进行选择
    Esp32-vscod-19.jpg
  3. 选择使用的工程或者例程
    Esp32-vscod-20.jpg

修改驱动对象

  1. 此处显示的是使用的驱动对象,点击可以修改对应驱动对象
    Esp32-vscod-21.jpg
  2. 选择使用的工程或者例程
    Esp32-vscod-20.jpg
  3. 点击后需要稍等片刻
    Esp32-vscod-22.jpg
  4. 选择我们需要驱动的对象,也就是我们的主芯片为ESP32S3
    Esp32-vscod-23.jpg
  5. 选择openocd的路径,这里选择USB JTAG
    ESP-IDF-target.png
    • USB Bridge 是一种通用的接口转换工具,用于将 USB 转换为其他类型的接口,适用于各种设备间的通信和调试。
    • USB JTAG 是一种专用的调试和编程工具,专门用于集成电路的调试和编程,提供硬件级别的测试和诊断功能。

状态栏简介

①SDK 配置编辑器,ESP-IDF很多功能与配置可以在其内修改
②全部清理,清空所有编译文件,
③编译
④当前下载方式,默认为UART
⑤烧录当前固件,请在编译后进行
⑥打开串口监视器,用于查看串口信息
⑦编译,烧录,打开串口监视器 一体按键(调试时最常用)
Esp32-vscod-25.jpg

编译、烧录、串口监视

  1. 点击我们之前介绍的 编译,烧录,打开串口监视器按键
    Esp32-vscod-29.jpg
  2. 编译可能需要较长时间才能完成,尤其是在第一次编译时。
    Esp32-vscod-26.jpg
    • 在此过程中,ESP-IDF可能会占用大量CPU资源,因此可能会导致系统卡顿。
  3. 因为我们使用的是USB芯片,并且板载自动下载电路,无需手动操作即可自动下载
    Esp32-vscod-27.jpg
  4. 下载成功后,自动进入串口监视器,可以看到芯片输出对应的信息并提示10S后重启
    Esp32-vscod-28.jpg

ESP-IDF示例程序

注意:在使用ESP-IDF例程前,请先检查ESP-IDF环境与下载设置是否正确配置,具体操作可查看ESP-IDF环境配置

快速使用

我们想要测试屏幕基本功能,需要完成以下步骤:

  1. 首先下载示例程序并解压。(注意:不要存放中文路径下
  2. 进入ESP32-S3-Touch-LCD-4.3_Code\ESP-IDF-5.3.0lvgl_Porting路径下,右键空白处通过vscode打开。
  3. 按照搭建环境《设置COM口》部分的步骤设置端口、开发板类型等。
  4. 下载成功后,效果如下(实际运行效果没有鼠标箭头,直接触摸即可):
    LVGL-EXAMPLE.gif

程序目录

为了方便后续开发,我们首先要了解目录结构

├── bin ---------------------------------- lvgl适配ESP32的固件
├── commponents -------------------------- 触摸屏GT911的驱动.LVGL库文件和LVGL示例程序等
├── main --------------------------------- 程序的主函数部分
├── sdkconfig ---------------------------- sdk相关设置,需要去SDK配置编译器中设置(状态栏部分)
└── build -------------------------------- 编译后生成的文件,清除编译就会删除此文件夹

主程序简介

如果我们想进行二次开发,只需修改 rgb_lcd_example_main.c 程序,屏幕的初始化部分已经完成。

1.引脚设置

设置触摸芯片的接口和RGB565接口。

#define I2C_MASTER_SCL_IO           9       /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO           8       /*!< GPIO number used for I2C master data  */
#define EXAMPLE_PIN_NUM_HSYNC          46
#define EXAMPLE_PIN_NUM_VSYNC          3
#define EXAMPLE_PIN_NUM_DE             5
#define EXAMPLE_PIN_NUM_PCLK           7
#define EXAMPLE_PIN_NUM_DATA0          14 // B3
#define EXAMPLE_PIN_NUM_DATA1          38 // B4
#define EXAMPLE_PIN_NUM_DATA2          18 // B5
#define EXAMPLE_PIN_NUM_DATA3          17 // B6
#define EXAMPLE_PIN_NUM_DATA4          10 // B7
#define EXAMPLE_PIN_NUM_DATA5          39 // G2
#define EXAMPLE_PIN_NUM_DATA6          0 // G3
#define EXAMPLE_PIN_NUM_DATA7          45 // G4
#define EXAMPLE_PIN_NUM_DATA8          48 // G5
#define EXAMPLE_PIN_NUM_DATA9          47 // G6
#define EXAMPLE_PIN_NUM_DATA10         21 // G7
#define EXAMPLE_PIN_NUM_DATA11         1  // R3
#define EXAMPLE_PIN_NUM_DATA12         2  // R4
#define EXAMPLE_PIN_NUM_DATA13         42 // R5
#define EXAMPLE_PIN_NUM_DATA14         41 // R6
#define EXAMPLE_PIN_NUM_DATA15         40 // R7

2.分辨率设置

设置分斌率为800(水平)X480(垂直)

#define EXAMPLE_LCD_H_RES              800
#define EXAMPLE_LCD_V_RES              480

3. LVGL 的任务调度

在 ESP-IDF 框架中,FreeRTOS 是作为基础操作系统运行的。ESP-IDF 使用 FreeRTOS 来管理任务调度、内存管理、同步和通信等操作。当使用 LVGL 时,需要确保 LVGL 的任务调度与 FreeRTOS 一致。

example_lvgl_lock(int timeout_ms)      //用于增加 LVGL 的时间滴答计数器
example_lvgl_lock(int timeout_ms)      //用于获取一个递归互斥量(mutex),以确保在调用 LVGL 的 API 时的线程安全
example_lvgl_unlock(void)              //管理线程安全的 API 调用
example_lvgl_port_task(void *arg)      //定期处理 LVGL 的定时任务

4. 初始化LCD设备

初始化LCD设备主要定义在app_main函数中。

 ESP_LOGI(TAG, "Install RGB LCD panel driver");
    esp_lcd_panel_handle_t panel_handle = NULL;
    esp_lcd_rgb_panel_config_t panel_config = {
        .data_width = 16,                       // RGB 接口的数据线位数16-bit RGB565
        .psram_trans_align = 64,                // 默认64即可
        .num_fbs = EXAMPLE_LCD_NUM_FB,          //RGB 接口的帧缓存数量,默认设为 `1`,大于 `1` 时用于实现多缓冲防撕裂
#if CONFIG_EXAMPLE_USE_BOUNCE_BUFFER            //用于提升 RGB 接口的数据传输带宽,通常设为 `10 * EXAMPLE_LCD_H_RES`
        .bounce_buffer_size_px = 10 * EXAMPLE_LCD_H_RES,
#endif
        .clk_src = LCD_CLK_SRC_DEFAULT,
        .disp_gpio_num = EXAMPLE_PIN_NUM_DISP_EN, //连接 LCD DISP 信号的引脚编号,设置为 -1 表示不使用
        .pclk_gpio_num = EXAMPLE_PIN_NUM_PCLK,    //连接 LCD PCLK 信号的引脚编号
        .vsync_gpio_num = EXAMPLE_PIN_NUM_VSYNC,  //连接 LCD VSYNC 信号的引脚编号
        .hsync_gpio_num = EXAMPLE_PIN_NUM_HSYNC,  //连接 LCD HSYNC 信号的引脚编号
        .de_gpio_num = EXAMPLE_PIN_NUM_DE,
        .data_gpio_nums = {
            EXAMPLE_PIN_NUM_DATA0,
            EXAMPLE_PIN_NUM_DATA1,
            EXAMPLE_PIN_NUM_DATA2,
            EXAMPLE_PIN_NUM_DATA3,
            EXAMPLE_PIN_NUM_DATA4,
            EXAMPLE_PIN_NUM_DATA5,
            EXAMPLE_PIN_NUM_DATA6,
            EXAMPLE_PIN_NUM_DATA7,
            EXAMPLE_PIN_NUM_DATA8,
            EXAMPLE_PIN_NUM_DATA9,
            EXAMPLE_PIN_NUM_DATA10,
            EXAMPLE_PIN_NUM_DATA11,
            EXAMPLE_PIN_NUM_DATA12,
            EXAMPLE_PIN_NUM_DATA13,
            EXAMPLE_PIN_NUM_DATA14,
            EXAMPLE_PIN_NUM_DATA15,
        },
        .timings = {
            .pclk_hz = EXAMPLE_LCD_PIXEL_CLOCK_HZ,
            .h_res = EXAMPLE_LCD_H_RES,
            .v_res = EXAMPLE_LCD_V_RES,
            // The following parameters should refer to LCD spec
            .hsync_back_porch = 8,
            .hsync_front_porch = 8,
            .hsync_pulse_width = 4,
            .vsync_back_porch = 16,
            .vsync_front_porch = 16,
            .vsync_pulse_width = 4,
            .flags.pclk_active_neg = true,
        },
        .flags.fb_in_psram = true, // allocate frame buffer in PSRAM
    };
    /* 初始化LCD设备 */
    ESP_ERROR_CHECK(esp_lcd_new_rgb_panel(&panel_config, &panel_handle));

    ESP_LOGI(TAG, "Register event callbacks");
    esp_lcd_rgb_panel_event_callbacks_t cbs = {
        .on_vsync = example_on_vsync_event,
    };
    ESP_ERROR_CHECK(esp_lcd_rgb_panel_register_event_callbacks(panel_handle, &cbs, &disp_drv));

    ESP_LOGI(TAG, "Initialize RGB LCD panel");
    ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));

#if EXAMPLE_PIN_NUM_BK_LIGHT >= 0
    ESP_LOGI(TAG, "Turn on LCD backlight");
    gpio_set_level(EXAMPLE_PIN_NUM_BK_LIGHT, EXAMPLE_LCD_BK_LIGHT_ON_LEVEL);
#endif
...
...

5. 二次开发

通过分析主程序,我们可以发现,在开发LVGL程序时,只需在下方添加自己的功能函数即可。

 if (example_lvgl_lock(-1)) {
        // example_lvgl_demo_ui(disp);
        lv_demo_widgets();
        // lv_demo_benchmark();
        // lv_demo_music();
        // lv_demo_stress();
        // Release the mutex
        example_lvgl_unlock();
    }

6. 创建自己LVGL示例程序

  • 进入conponents/lvgl_lvgl/examples/get_started目录。
    output/
    ├── examples
    │   ├── get_started
    │        ├── lv_example_get_started_1.c --------------------- 创建带有标签并响应点击事件的按钮C程序
    │        ├── lv_example_get_started_1.py -------------------- 创建带有标签并响应点击事件的按钮Python程序
    │        ├── lv_example_get_started_2.c --------------------- 从头开始设计按钮样式C程序
    │        ├── lv_example_get_started_2.py -------------------- 从头开始设计按钮样式Python程序
    │        ├── lv_example_get_started_3.c --------------------- 创建滑块,并在标签上显示其值
    │        └── lv_example_get_started_3.py -------------------- 创建滑块,并在标签上显示其值
    │        └── lv_example_get_started.h ----------------------- 头文件
    └── layouts
    └── ...
  • 右键get_started目录,New File新建文件并命名为lv_example_get_started_hello.c
  • 程序内容如下:
    #include "../lv_examples.h"
    #include "lv_conf.h"
    #if LV_BUILD_EXAMPLES && LV_USE_LABEL
    
    /**
     * Basic example to create a "Hello world" label
     */
    void lv_example_get_started_hello(void)
    {
        /*Change the active screen's background color*/
        lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x003a57), LV_PART_MAIN);
        /*Create a white label, set its text and align it to the center*/
        lv_obj_t * label = lv_label_create(lv_scr_act());
        lv_label_set_text(label, "Hello world");
        // lv_label_set_text(label, LV_SYMBOL_POWER);
        lv_obj_set_style_text_color(lv_scr_act(), lv_color_hex(0xffffff), LV_PART_MAIN);
        lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
    }
    
    #endif
  • 在头文件里面也要定义lv_example_get_started_hello()函数。
    void lv_example_get_started_1(void);
    void lv_example_get_started_2(void);
    void lv_example_get_started_3(void);
    void lv_example_get_started_hello(void);
  • 将创建的函数填入主程序中:
        if (example_lvgl_lock(-1)) {
            // example_lvgl_demo_ui(disp);
            //lv_demo_widgets();
            // lv_demo_benchmark();
            // lv_demo_music();
            // lv_demo_stress();
            // Release the mutex
            void lv_example_get_started_hello();
            example_lvgl_unlock();
        }
  • 下载程序,实现现象:
    LVGL-HELLO.png

7. 更多的LVGL示例程序

串口测试

UART_Test 示例,用于测试UART 接口的使用,此接口连接GPIO43(TXD)、GPIO44(RXD) 作 UART0 使用

  • 烧录代码后,USB to Type C线接入“UART”Type C接口,打开串口调试助手,送消息给ESP32-S3-Touch-LCD-7,ESP32-S3-Touch-LCD-7会把收到的消息返回给串口调试助手,注意需要选择正确的COM口和波特率,发送消息前勾选“加回车换行/AddCrLf”

ESP32-S3-Touch-LCD-4.3-106.png

Sensor_AD

Sensor_AD 示例,用于测试Sensor AD 座子的使用,此接口连接 GPIO6 作 ADC 使用,可以接入 Sensor套件等器件

  • 烧录代码后,Sensor AD座子连接“HY2.0 2P 转杜邦公头 3P 10cm”,可打开串口调试助手观察AD引脚读取的数据,ADC analog value为读取的ADC模拟值,ADC millivolts value为ADC转化的毫伏值
  • 将AD引脚与GND引脚短接,读取的值如下图所示:

ESP32-S3-Touch-LCD-7-09.jpg

  • 将AD引脚与3V3引脚短接,读取的值如下图所示:

ESP32-S3-Touch-LCD-7-10.jpg

I2C_Test

I2C_Test 示例,用于测试I2C 座子的使用,扫描各种I2C设备的地址

  • 烧录代码后,连接 I2C设备(本文使用BME680 Environmental Sensor) 和 ESP32-S3-Touch-LCD-7 对应引脚,打开串口调试助手 选择 115200 波特率打开选择对应 COM 口通信(可先将ESP-IDF的COM口关闭,否则会占用COM口导致无法打开串口)

ESP32-S3-Touch-LCD-4.3-104.png

  • 按下 ESP32-S3-Touch-LCD-7 的 Reset 按键,SSCOM 会打印信息,按如下图所示输入 i2cdetect ,则会打印 77,I2C 座子测试通过

ESP32-S3-Touch-LCD-4.3-105.png

RS485_Test

RS485_Test 示例,用于测试RS 485座子的使用

  • 烧录代码后,对应连接 USB TO RS485 和 ESP32-S3-Touch-LCD-7 的 A 和 B 引脚,USB TO RS485 连接电脑后打开 串口调试助手 选择对应 COM 口通信
  • 按如下图所示选择 115200 波特率,发送任意字符则会回环显示,RS485座子测试通过

ESP32-S3-Touch-LCD-4.3-106.png

TWAItransmit

TWAItransmit 示例,用于测试CAN卡座的使用,此接口连接GPIO20(TXD)、GPIO19(RXD) 作 CAN通讯 使用

  • 烧录代码后,使用 “HY2.0 2P 转杜邦公头 2P 红黑 10cm” 线缆对应连接 ESP32-S3-Touch-LCD-7 和 USB-CAN-A 的 CAN H 和 CAN L引脚
  • 打开串口调试助手,可以看到Esp32-s3-touch-lcd-7已经开始发送CAN消息

ESP32-S3-Touch-LCD-7-11.jpg

  • USB-CAN-A 连接电脑,打开USB-CAN-A_TOOL_2.0 上位机,选择对应COM口, 按下图所示 2000000 端口波特率,CAN波特率 50.000Kbps,即可看到Esp32-s3-touch-lcd-7发送的CAN消息

ESP32-S3-Touch-LCD-7-12.jpg

TWAIreceive

TWAIreceive 示例,用于测试CAN卡座的使用,此接口连接GPIO20(TXD)、GPIO19(RXD) 作 CAN通讯 使用

  • 烧录代码后,使用 “HY2.0 2P 转杜邦公头 2P 红黑 10cm” 线缆对应连接 ESP32-S3-Touch-LCD-7 和 USB-CAN-A 的 CAN H 和 CAN L引脚
  • USB-CAN-A 连接电脑,打开USB-CAN-A_TOOL_2.0 上位机,选择对应COM口, 按下图所示 2000000 端口波特率,CAN波特率 500.000Kbps,即可发送CAN消息至Esp32-s3-touch-lcd-7

ESP32-S3-Touch-LCD-4.3-111.png

  • 打开串口调试助手,可以看到Esp32-s3-touch-lcd-7已经开始接收CAN消息(若接收报错,可多进行几次复位与软件重新开启设备,耐心等待)

ESP32-S3-Touch-LCD-7-13.jpg



FAQ

①重新启动UCANV2.0.exe中COM口,多按几次ESP32-S3-Touch-LCD-4.3复位键
②将串口调试助手上的“DTR”、“RTS”的勾选去掉


若烧录代码后,屏幕无反应,可查看是否有在Arduino IDE -> Tools正确配置:选择对应 Flash(8MB) 和使能 PSRAM(8MB OPI))



安装库的路径出现中文导致检索不到库文件


可以参考以下步骤:


技术支持


联系人:黄工
QQ:2850151199
EMAIL:2850151199@qq.com
电话:0755-83040712
微信:扫下方二维码添加
Service20-Weichat.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证