ESP32-S3-Touch-AMOLED-1.8

来自Waveshare Wiki
跳转至: 导航搜索
{{{name2}}}
{{{name3}}}
功能简介
特性 无特性,不解释
显示尺寸 1.8英寸
分辨率 368 × 448
' 无特性,不解释
' 无特性,不解释
接口 USB UART GPIO

说明

产品简介

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

产品特性

  • 搭载高性能 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.8 英寸电容触摸 AMOLED 屏,368×448 分辨率,16.7M 彩色,能清晰地显示彩色图片


硬件说明

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

引脚定义

产品尺寸

屏幕说明

触摸及其控制器

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


示例例程

Arduino IDE

环境搭建

安装Arduino IDE

  1. 打开官网软件下载页面,选择对应的系统和系统位数下载
    ESP32-S3-Pico-Ar-01.jpg
  2. 可以选择直接下载,也可以选择捐赠并下载
    ESP32-S3-Pico-Ar-02.jpg
  3. 运行安装程序,全部默认安装即可

在线安装arduino-esp32

  1. 打开首选项
    ESP32-S3-Pico-Ar-03.jpg
  2. 添加对应的板管理链接,点击该按键
    ESP32-S3-Pico-Ar-04.jpg
  3. 在第一个空白处,添加下文
    https://espressif.github.io/arduino-esp32/package_esp32_index.json

  4. 保存设置
  5. 打开板管理器并搜索输入ESP32,选择版本3.0.5或以上
    ESP32-S3-Touch-AMOLED-1.8 241014 01.png
  6. 等待下载,注:下载时间较长,请耐心等待
    ESP32-S3-Pico-Ar-07.jpg
  7. arduino-esp32下载完成
    ESP32-S3-Pico-Ar-08.jpg

运行库安装

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

ESP32-S3-Touch-AMOLED-1.8 241016 01.png

ESP32-S3-Touch-AMOLED-1.8 库文件说明
文件名 说明 版本 是否可直接下载
Arduino_DriveBus FT3168触摸芯片驱动库 —— ——
GFX_Library_for_Arduino 适配SH8601的GFX图形化库 v1.4.9 不可直接下载
ESP32_IO_Expander TCA9554拓展芯片驱动库 v0.0.3 可直接下载
lvgl LVGL图形化库 v8.4.0 可直接下载,下载后需复制demos文件夹至src,建议使用现有库
SensorLib PCF85063、QMI8658传感器驱动库 v0.2.1 可直接下载
XPowersLib AXP2101电源管理芯片驱动库 v0.2.6 可直接下载
ui_a 自定义ui库 —— ——
ui_b 自定义ui库 —— ——
Mylibrary 开发板引脚宏定义 —— ——
lv_conf.h LVGL配置文件 —— ——

开始使用

Arduino IDE开发板搜索esp32s3 dev module,并指定COM口

ESP32-S3-Touch-AMOLED-1.8 241015 02.png

Hello World示例

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

关键代码片段

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!");

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 23.png ESP32-S3-Touch-AMOLED-1.8 241015 24.png

Drawing board示例

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

关键代码片段

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);
}

2、触摸中断处理和坐标读取

void Arduino_IIC_Touch_Interrupt(void) {
  FT3168->IIC_Interrupt_Flag = true;
}

int32_t touchX = FT3168->IIC_Read_Device_Value(FT3168->Arduino_IIC_Touch::Value_Information::TOUCH_COORDINATE_X);
int32_t touchY = FT3168->IIC_Read_Device_Value(FT3168->Arduino_IIC_Touch::Value_Information::TOUCH_COORDINATE_Y); 

if (FT3168->IIC_Interrupt_Flag == true) {
  FT3168->IIC_Interrupt_Flag = false;
  USBSerial.printf("Touch X:%d Y:%d\n", touchX, touchY);
  if (touchX > 20 && touchY > 20) {
    gfx->fillCircle(touchX, touchY, 5, BLUE);
  }
}

显示效果展示


ESP32-S3-Touch-AMOLED-1.8 241015 21.png

GFX AsciiTable示例

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

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 22.png

GFX FT3168 Image示例

本示例通过 ESP32-S3 上的 QSPI 驱动的 SH8601 显示屏实现触摸屏显示界面。集成了一个用于检测触摸输入的 I2C 触摸控制器 (FT3168),以及一个用于管理额外输出引脚的 I2C GPIO 扩展器 (TCA9554)。该代码设置显示屏、触摸控制器和扩展器,并在触摸屏幕时循环显示多个图像。

关键代码片段

1、图像显示:

if (fingers_number > 0) {
  switch (Image_Flag) {
    case 0: gfx->draw16bitRGBBitmap(0, 0, (uint16_t *)gImage_1, LCD_WIDTH, LCD_HEIGHT); break;
    case 1: gfx->draw16bitRGBBitmap(0, 0, (uint16_t *)gImage_2, LCD_WIDTH, LCD_HEIGHT); break;
    case 2: gfx->draw16bitRGBBitmap(0, 0, (uint16_t *)gImage_3, LCD_WIDTH, LCD_HEIGHT); break;
    case 3: gfx->draw16bitRGBBitmap(0, 0, (uint16_t *)gImage_4, LCD_WIDTH, LCD_HEIGHT); break;
    case 4: gfx->draw16bitRGBBitmap(0, 0, (uint16_t *)gImage_5, LCD_WIDTH, LCD_HEIGHT); break;
  }
  Image_Flag++;
  if (Image_Flag > 4) {
    Image_Flag = 0;
  }
}

显示效果展示

GFX PCF85063 simpleTime示例

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

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 20.png

GFX ESPWiFiAnalyzer示例

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


显示效果展示

GFX Clock示例

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

关键代码片段

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();
}

显示效果展示

LVGL Animation示例

本示例演示了一个简单的LVGL滑块示例,可以通过改变滑块的数值改变屏幕背光亮度

关键代码片段

1、实时修改背光亮度

int32_t slider_value = lv_slider_get_value(ui_Slider1);
int32_t brightness = map(slider_value, 0, 100, 5, 255);
gfx->Display_Brightness(brightness);

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 19.png

LVGL change background示例

本示例演示了一个LVGL背光明暗场景变化,通过定义简单的按钮组件实现背景颜色的变化

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 17.png ESP32-S3-Touch-AMOLED-1.8 241015 18.png

LVGL PCF85063 simpleTime示例

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

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 16.png

LVGL QMI8658 ui示例

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


显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 15.png

LVGL AXP2101 ADC Data示例

本示例演示了LVGL下使用XPowers库进行电源管理,并且提供PWR自定义按钮控制亮屏、熄屏动作

关键代码片段

1、亮屏熄屏实现函数

void toggleBacklight() {
  USBSerial.println(backlight_on);
  if (backlight_on) {
    for (int i = 255; i >= 0; i--) {
      gfx->Display_Brightness(i);
      delay(3);
    }
  } else {
    for (int i = 0; i <= 255; i++) {
      gfx->Display_Brightness(i);
      delay(3);
    }
  }
  backlight_on = !backlight_on;
}

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 14.png

LVGL Widgets示例

本示例演示了LVGL Widgets示例,动态状态下帧率可达50~60帧,通过优化SH8601显示库可实现更佳流畅的帧率,实际可对比ESP-IDF环境下启用双缓存、双加速的场景

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 12.png ESP32-S3-Touch-AMOLED-1.8 241015 13.png

LVGL SD Test示例

本示例演示了使用SDMMC驱动SD卡,并输出其内容到显示屏上

显示效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 11.png

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

安装ESP-IDF插件

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

安装ESP-IDF开发环境

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

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

  • 打开ESP-IDF插件,点击New project,选择ESP-IDF示例——>sample_project——>点击创建
    ESP32-P4 VSCode ESP-IDF GettingStart 240905 01.png
  • 新建并在窗口中打开可以查看到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会根据索引导入每个所需要编译的内容。编译过程如:

ESP32-P4 VSCode ESP-IDF GettingStart 240906 02.png

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

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

  1. ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
  2. 设备烧录COM口,选择以将编译好的程序烧录进芯片上
  3. set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-Nano需要选择esp32p4为目标芯片
  4. menuconfig,点击修改sdkconfig配置文件内容
  5. fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
  6. Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
  7. flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
  8. monitor开启烧录口监控,当一个工程Build——>Flash后,可通过点击此按钮查看烧录、调试口输出的log,以便观察应用程序是否正常工作
  9. Build Flash Monitor 一键按钮,用于连续执行Build——>Flash——>Monitor,常被称作小火苗

示例说明

axp2101示例

本示例演示了在使用ESP-IDF移植XPowersLib,通过移植后的XPowersLib驱动AXP2101获取电源相关数据。

效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 07.png

I2SCodec示例

本示例演示了使用I2S驱动 ES8311 Codec芯片采集或播放音频

自定义音频

用户可以通过下述步骤自定义音频播放片段(需要有一定编程基础)

  1. 下载 ‘ffmpeg’工具
  2. 使用‘ffprobe a.mp3’检查音频流
  3. 裁剪音频文件,仅有部分空间可用于音频存放,‘ffmpeg -i a_cut.mp3 -f s16ls -ar 16000 -ac -1 -acodec pcm_s16le a.pcm’
  4. 移动裁剪好的音频文件‘a.pcm’到main目录下
  5. 在main/CMakeList.txt下用a.pcm替换canon.pcm
  6. i2s_es8311_example.c中替换掉_binary_canon_pcm_start_binary_canon_pcm_end_binary_a_pcm_start_binary_a_pcm_end
  7. 编译烧录即可

lvgl_with_ram示例

本示例展示LVGLdemo,通过开启双缓存、开启DMA加速防撕裂等方式运行LVGL的demo,可流畅运行动态图文,帧率可达200~300帧

效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 03.png ESP32-S3-Touch-AMOLED-1.8 241015 04.png ESP32-S3-Touch-AMOLED-1.8 241015 05.png ESP32-S3-Touch-AMOLED-1.8 241015 06.png

pcf85063示例

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

效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 08.png

qmi8658示例

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

效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 09.png

sd_mmc示例

本示例演示了使用sdmmc方式初始化SD卡并读取、写入内容。

效果展示

ESP32-S3-Touch-AMOLED-1.8 241015 10.png

资料

文档

数据手册

程序

  • [示例程序]

软件


FAQ

建议电池使用规格为 3.85*24*28 400mAh,常规满亮屏状态下约能使用1小时,仅关闭屏幕背光情况下可运行3~4小时,全低功耗场景下可运行约6小时。


提供的GFX Arduino LVGL使用的上层驱动是Arduino TFT库,此场景下使用DMA加速处理图像读写能力有限。在ESP-IDF提供的LVGL示例是开启双缓存防撕裂等优化操作优化,所以效果更佳。
在Arduino IDE开发环境下,我们还提供原生的esp_lcd_panel驱动方式,对比Arduino TFT场景下屏幕刷新有明显提升,但效果不如ESP-IDF的示例。
使用时,请将Arduino IDE libraries下的lvgl_conf.hLV_COLOR_16_SWAP改为 1
Arduino_ESP_LCD_LVGL


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


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*来查看所有串口设备的配置信息。


本产品定位于开发板,并不是成品产品。关于产品生态属于是ESP32核心,生态很成熟,开发环境也很友好,我们不协助修改代码,请各位创客、极客自行发挥DIY能力,如有疑问可以询问工程师为您解答。
如您觉得我们的产品不错,希望批量定制硬件、定制外壳、定制软件等,欢迎联系商务销售
ESP32-S3-Touch-LCD-1.69-240708-02.png


技术支持

联系人:尹工
EMAIL:iot@waveshare.cloud
QQ:3004698827
微信:扫下方二维码添加
尹晓春.png

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