ESP32-S3-Touch-LCD-1.69教程

说明

产品简介

ESP32-S3-Touch-LCD-1.69是一款微雪(Waveshare)设计的低成本,高性能的微控制器开发板。在较小的板型下,板载了1.69英寸电容触摸LCD屏、锂电池充电芯片、六轴传感器(三轴加速度计与三轴陀螺仪)、RTC等外设,方便开发并嵌入应用到产品中。

产品特性

  • 搭载高性能 Xtensa® 32位LX7双核处理器,主频高达 240 MHz
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth® 5 (LE),板载天线
  • 内置 512KB 的 SRAM 和 384KB ROM,叠封 8MB PSRAM 和外接 16MB Flash
  • 板载 1.69 英寸电容触摸 LCD 屏,240×280 分辨率,262K 彩色,能清晰地显示彩色图片


硬件说明

  • 板载贴片天线,使用0R短接可选外部天线,如图中⑩
  • 板载 PCF85063 RTC时钟芯片、RTC电池接口,方便计时定时功能,如图中③、⑨
  • 板载 QMI8658C 六轴惯性测量单元(IMU),包含一个3轴陀螺仪和一个3轴加速度计,如图中④
  • 板载 ETA6098 高效锂电池充电芯片、M1.25 锂电池接口,方便接入锂电池充放电长期使用,如图中⑤、⑥
  • 板载蜂鸣器可做听觉外设使用,如图中⑧
  • 板载TYPE-C接口,连接ESP32-S3 USB,用于烧录程序和日志打印,如图中⑦
  • 板载BOOT、RST功能按钮,方便复位进入下载模式,如图中⑫、⑬
  • 板载功能电路按钮,可自定义为上电按钮,可识别单击、双击、长按动作,如图中⑪

引脚定义


产品尺寸


屏幕说明

LCD及其控制器

  • 该款LCD使用的内置控制器为 ST7789V2,是一款 240 × RGB × 320 像素的 LCD 控制器,而本 LCD 本身的像素为 240(H) × RGB × 280(V),因此LCD的内部RAM并未完全使用。
  • 该LCD支持12位,16位以及18位每像素的输入颜色格式,即RGB444,RGB565,RGB666三种颜色格式,本例程使用RGB565的颜色格式,这也是常用的RGB格式
  • LCD使用四线SPI通信接口,这样可以大大的节省GPIO口,同时通信时速度也会比较快
  • 本模组分辨率是240(H) × RGB × 280(V),但是因为四角是圆角的(尺寸见参数),因此部分输入图像会有部分不显示。

SPI通信协议



注:与传统的SPI协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏,该表格详见Datasheet Page 66。
RESX为复位,模块上电时拉低,通常情况下置1;
CSX为从机片选, 仅当CS为低电平时,芯片才会被使能。
D/CX为芯片的数据/命令控制引脚,当DC = 0时写命令,当DC = 1时写数据
SDA为传输的数据,即RGB数据;
SCL为SPI通信时钟。
对于SPI通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPHA的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当CPHA = 0,在第一个跳变沿进行数据采集;
CPOL的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。
从图中可以看出,当SCLK第一个下降沿时开始传输数据,一个时钟周期传输8bit数据,使用SPI0,按位传输,高位在前,低位在后。

触摸及其控制器

  • 本款触摸屏是由表面钢化玻璃+薄膜FILM材质组成,具有强度高,硬度强、透光率好,搭配的驱动芯片为CST816D自电容触控芯片,该芯片支持标准的 I2C 通讯协议标准,可实现 10Khz~400Khz 的可配通信速率。

I2C通信协议

  • 芯片的 7bit 设备地址为 0x15,即设备写地址为 0x2A,读地址为 0x2B。
  • 波形介绍
    • 写入单个字节(往 0x1F 寄存器写入 0x01)
    • 连续写入多个字节(往 0x1E、0x1F 分别写入 0x20、0x01)
    • 读取单个字节(从 0x21 读取单个字节)
    • 连续读取多个字节(从 0x21、0x22、0x23 读取 3 个字节)

示例例程

Arduino IDE

环境搭建

安装Arduino IDE

  1. 打开官网软件下载页面,选择对应的系统和系统位数下载
  2. 可以选择直接下载,也可以选择捐赠并下载

  3. 运行安装程序,全部默认安装即可

在线安装arduino-esp32

  1. 打开首选项   File -> Preferences..

  2. 添加对应的板管理链接,点击该按键

  3. 在第一个空白处,添加下文
    https://espressif.github.io/arduino-esp32/package_esp32_index.json

  4. 保存设置
  5. 打开板管理器并搜索输入ESP32,选择版本3.0.5或以上

  6. 等待下载,注:下载时间较长,请耐心等待
  7. arduino-esp32下载完成

运行库安装

使用LVGL库时需要修改对应屏幕的配置,建议直接使用示例例程中的lib库 将库文件夹复制到 C:\Users\xxxx\Documents\Arduino\libraries 目录下,xxxx 代表您电脑上用户名,注意甄别。在复制库时注意如果目录下存在其他库,请先清理或迁移,避免替换或库冲突



ESP32-S3-Touch-LCD-1.69 库文件说明
文件名说明版本是否可直接下载
Arduino_DriveBusCST816触摸芯片驱动库————
GFX_Library_for_ArduinoST7789的GFX图形化库v1.4.9可直接下载
lvglLVGL图形化库v8.4.0可直接下载,下载后需复制demos文件夹至src,建议使用现有库
Mylibrary开发板引脚宏定义————
SensorLibPCF85063、QMI8658传感器驱动库v0.2.1可直接下载
lv_conf.hLVGL配置文件————

开始使用

  1. 使用TYPT-C转TYPE-A线将开发板连接至电脑
  2. Arduino IDE开发板搜索waveshare esp32-s3-Touch-lcd-1.69,并指定COM口

Hello World示例

本示例演示了如何使用 Arduino GFX 库和 Arduino DriveBus 库控制 ST7789 显示屏,通过动态变化的文本展示了基本的图形库功能。该代码也可以用于测试显示屏的基础性能以及随机文本显示效果。

关键代码片段

1.显示初始化:

if (!gfx->begin()) {
  USBSerial.println("gfx->begin() failed!");
}

2.清屏并显示文本:

gfx->fillScreen(BLACK);
gfx->setCursor(10, 10);
gfx->setTextColor(RED);
gfx->println("Hello World!");

3.动图显示:

gfx->setCursor(random(gfx->width()), random(gfx->height()));
gfx->setTextColor(random(0xffff), random(0xffff));
gfx->setTextSize(random(6), random(6), random(2));
gfx->println("Hello World!");

显示效果展示



Drawing board示例

本示例演示了如何使用ESP32通过I2C接口控制CST816触摸控制器和TCA9554 GPIO扩展器,同时使用Arduino GFX库来驱动ST7789显示屏。

关键代码片段

1、显示屏初始化与亮度渐变动画:

gfx->begin();
gfx->fillScreen(WHITE);
for (int i = 0; i <= 255; i++) {
  gfx->Display_Brightness(i);
  gfx->setCursor(30, 150);
  gfx->setTextColor(BLUE);
  gfx->setTextSize(4);
  gfx->println("Loading board");
  delay(3);
}

显示效果展示


GFX AsciiTable示例

本示例通过使用Arduino GFX库在ESP32上展示了如何在ST7789显示屏上显示一个基本的ASCII字符表格。代码的核心功能是初始化显示屏,并根据屏幕尺寸,在显示屏上按行列打印ASCII字符

显示效果展示


GFX ESPWiFiAnalyzer示例

本示例演示了在ST7789显示器上绘制WiFi频段信号强度示例,实现WiFi分析器的功能。


显示效果展示


GFX Clock示例

本示例演示了一个简单的ST7789时钟示例,通过简单的标记指针和时间管理实现时钟示例

关键代码片段

1、时针、分针、秒针的绘制

void redraw_hands_cached_draw_and_erase() {
    gfx->startWrite();
    draw_and_erase_cached_line(center, center, nsx, nsy, SECOND_COLOR, cached_points, sHandLen + 1, false, false);
    draw_and_erase_cached_line(center, center, nhx, nhy, HOUR_COLOR, cached_points + ((sHandLen + 1) * 2), hHandLen + 1, true, false);
    draw_and_erase_cached_line(center, center, nmx, nmy, MINUTE_COLOR, cached_points + ((sHandLen + 1 + hHandLen + 1) * 2), mHandLen + 1, true, true);
    gfx->endWrite();
}

显示效果展示



GFX PCF85063 simpleTime示例

本示例演示了使用PCF85063 RTC 模块在 ST7789 显示屏上显示当前时间,每秒检索时间并仅在时间发生变化时更新显示

显示效果展示


LVGL Measuring voltage示例

板上预留分压测电压,使用GPIO1读取模拟量值并通过分压公式得出电池电压

显示效果展示


LVGL PCF85063 simpleTime示例

本示例演示了在LVGL下使用PCF85063 RTC 模块在 ST7789 显示屏上显示当前时间,每秒检索时间并仅在时间发生变化时更新显示,对比时间刷新效果更佳

显示效果展示


PWR_Key

此功能按钮是为解决外设按钮功能少而设计,工作原理如:

按下PWR之后可以使电池供电,此时系统启动,系统应定义GPIO35持续输出高电平来维持上电效果,此时松开PWR不会断电。PWR此时的功能即可以拉低GPIO36,系统检测GPIO36按下、连按和长按,可以自定义关机控制操作,如长按模式下系统设置GPIO35低电平断开电池供电,即可完成多功能按钮使用。

显示效果展示


LVGL QMI8658 ui示例

本示例演示了使用 LVGL 进行图形显示,与 QMI8658 IMU 通信以获取加速度计和陀螺仪数据


显示效果展示



LVGL Arduino示例

本示例演示了LVGL Widgets示例,动态状态下帧率可达20~30帧

显示效果展示


LVGL组件的使用 使用LVGL框架开发时可以依据lvgl官方文档提供的组件说明来调用组件 LVGL8.3 Documents

下面是Arduino IDE的LVGL实际组件调研案例


ESP-IDF

ESP-IDF 简介及环境搭建(VSCode)

ESP-IDF(Espressif IoT Development Framework)是乐鑫(Espressif)推出的开源物联网开发框架,专门用于其ESP32系列芯片的开发。ESP-IDF提供了构建物联网应用的必要工具和库,包括Wi-Fi、蓝牙、外设驱动、文件系统、网络协议栈、加密、安全和实时操作系统(FreeRTOS)等。

下面描述只适用于使用VSCode + ESP-IDF环境搭建

  • PS:
    • 如若希望使用Eclipse 编辑器来作为主力开发环境,请点击链接下载Espressif-IDE安装,并替换ESP-IDF版本≥v5.3.1
    • 若下述安装ESP-IDF过程中出现TSL Error、Network Error等报错、异常等情况,请重新清理目录文件夹、确保网络环境稳定无代理污染等并重新进行安装。所需时间较长,请耐心等待。

先决条件

  1. 如果您使用的是 Mac 或 Linux,请安装以下ESP-IDF 先决条件。如果您使用的是 Windows,请忽略此步骤。

安装VSCode

  1. 打开VSCode官网的下载页面,选择对应系统和系统位数进行下载

  2. 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项

    • 第一、二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
    • 第三项开启后,选择打开方式时,可以直接选择VSCode

安装ESP-IDF插件

  1. 打开VSCode,点击插件管理器,并搜索ESP-IDF进行下载安装
  2. 安装好后左侧工具栏有Espressif的Logo就是插件,点击进入插件(会有一小段时间用于加载程序),选择“EXPRESS”进行快速安装,

安装ESP-IDF开发环境

  1. 进入EXPRESS安装界面,确认好ESP-IDF 版本≥v5.3.1发布版本、ESP-IDF 目录和ESP-IDF 工具目录后,点击Install,耐心等待安装步骤完成
  2. 如果是国内用户,可以选择下载服务器为Espressif,安装过程比较缓慢,确保网络状态良好,可耐心等待安装完成,

ESP-IDF项目的基本结构介绍

  • 打开ESP-IDF插件,点击New project,选择ESP-IDF示例——>sample_project——>点击创建
  • 新建并在窗口中打开可以查看到VSCode的结构如
├── CMakeLists.txt
├── main
│   ├── CMakeLists.txt
│   └── main.c
└── README.md                  

ESP-IDF工程项目详解

  • 组件(Component):ESP-IDF中的组件是构建应用的基本模块,每个组件通常是相对独立的代码库或库,能实现特定的功能或服务,可以被应用程序或是其他组件重复使用,类似于Python开发中的库的定义。
    • 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语音基础,引入库是通过CMakeLists.txt进行配置和定义的。
    • CmakeLists.txt的作用:ESP-IDF编译时编译工具CMake会首先通过读取工程目录的顶层CMakeLists.txt的内容来读取构建规则,识别需要编译的内容。当在CMakeLists.txt中引入了需要的组件、程序后,编译工具CMake会根据索引导入每个所需要编译的内容。


VSCode 用户界面底部工具栏说明

当我们打开一个ESP-IDF工程时,底部会自动加载环境,对于ESP32-P4-Nano的开发,底部工具栏也是一个非常重要的,如图示: 

  1. menuconfig,点击修改sdkconfig配置文件内容
  2. fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
  3. 编译
  4. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
  5. flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
  6. monitor开启烧录口监控,当一个工程Build——>Flash后,可通过点击此按钮查看烧录、调试口输出的log,以便观察应用程序是否正常工作
  7. Build Flash Monitor 一键按钮,用于连续执行Build——>Flash——>Monitor,常被称作小火苗

示例说明

esp-idf-st7789示例

本示例通过SPI驱动st7789屏幕显示文字、图片、画图等功能


LVGL_Image示例

本示例展示LVGLdemo,使用LVGL显示图片数据

效果展示


pcf85063示例

本示例使用简单的方式驱动pcf85063进行时间存储读取功能

qmi8658示例

本示例演示了在使用ESP-IDF移植SensorLib,通过移植后的SensorLib驱动qmi8658获取陀螺仪相关数据。


ESP32-S3-Touch-LCD-1.69表盘系统

代码链接

ESP32-Watch

环境搭建

vscode 安装platformIO环境

打开工程

编译上传代码

修改platformio.ini

将默认显示修改为 lolin_s3_mini_1_69


烧录代码

接上开发板,选择对应的COM口编译上传

App下载

适用于安卓系统的App,Ios可从应用商店搜索Chronos Chronos


资料

原理图

工程图纸

示例程序

数据手册

ESP32-S3

其他器件

软件工具

Arduino

VScode

其他资料链接

FAQ

问题:一、板子太烫了,是什么原因?怎么解决?

1.当发现板子发烫时请先确保拉低GPIO33,将蜂鸣器引脚拉低,否则无源蜂鸣器就相当一个电阻一直耗电,导致LDO电流压力大发烫
2.如果您还使用了WiFi/蓝牙功能,发烫是不能避免的,ESP32-S3开启无线功能相关功耗会增大,导致发热
3.不建议开启PSRAM功能,如果开启后,在ESP-IDF和其他场景下可能不会正常拉低GPIO33或是影响显示,此时我们建议拆除蜂鸣器电阻断开其功能
4.在Arduino IDE环境下,开启PSRAM、使用外部Flash,拉低GPIO33时,还是会造成不小的热量,建议使用低功耗方案的玩法


问题:二、为何烧录失败?

1、当串口被占用时会烧录失败,将串口监视器关闭重新烧录
2、当ESP32程序崩溃时,烧录会失败,此时需要将开发模块完全断电,按住BOOT再上电进入强下载模式再进行烧录。烧录完不会自动退出下载模式,所以需要再次进行断电重启


问题:三、怎么查看自己使用的COM口?

Windows系统:
①通过设备管理器查看: 按下Windows + R键打开“运行”对话框; 输入devmgmt.msc并按回车键打开设备管理器; 展开“端口(COM和LPT)”部分,这里会列出所有的COM端口及其当前状态。
②使用命令提示符查看: 打开命令提示符(CMD); 输入mode命令,这将显示所有COM端口的状态信息。
③查看硬件连接: 如果你已经连接了外部设备到COM口,通常设备会占用一个端口号,可以通过查看连接的硬件来确定使用的是哪个端口。
Linux系统:
①使用dmesg命令查看: 打开终端。
②使用ls命令查看: 输入ls /dev/ttyS*或ls /dev/ttyUSB*来列出所有的串口设备。
③使用setserial命令查看: 输入setserial -g /dev/ttyS*来查看所有串口设备的配置信息。


问题:四、我该怎么移植提供的lib库?或者怎么自己开发LCD屏幕?如何驱动?

本产品所使用的LCD屏幕显示芯片为ST7789V2,触摸芯片为CST816T(仅带触摸版本),我们提供的lib中有两芯片的驱动,显示驱动可以参考GFX使能,触摸驱动请参阅Arduino_LVGL示例例程


技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841