ESP32-S3-Touch-AMOLED-1.8
| ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||
说明
产品简介
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
- 打开官网软件下载页面,选择对应的系统和系统位数下载
- 可以选择直接下载,也可以选择捐赠并下载
- 运行安装程序,全部默认安装即可
在线安装arduino-esp32
- 打开首选项
- 添加对应的板管理链接,点击该按键
- 在第一个空白处,添加下文
https://espressif.github.io/arduino-esp32/package_esp32_index.json
- 保存设置
- 打开板管理器并搜索输入ESP32,选择版本3.0.5或以上
- 等待下载,注:下载时间较长,请耐心等待
- arduino-esp32下载完成
运行库安装
使用LVGL库时需要修改对应屏幕的配置,建议直接使用示例例程中的lib库 将库文件夹复制到 C:\Users\xxxx\Documents\Arduino\libraries 目录下,xxxx 代表您电脑上用户名,注意甄别。在复制库时注意如果目录下存在其他库,请先清理或迁移,避免替换或库冲突
文件名 | 说明 | 版本 | 是否可直接下载 |
---|---|---|---|
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口
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!");
显示效果展示
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); } }
显示效果展示
GFX AsciiTable示例
本示例通过使用Arduino GFX库在ESP32上展示了如何在SH8601显示屏上显示一个基本的ASCII字符表格。代码的核心功能是初始化显示屏,并根据屏幕尺寸,在显示屏上按行列打印ASCII字符
显示效果展示
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 显示屏上显示当前时间,每秒检索时间并仅在时间发生变化时更新显示
显示效果展示
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);
显示效果展示
LVGL change background示例
本示例演示了一个LVGL背光明暗场景变化,通过定义简单的按钮组件实现背景颜色的变化
显示效果展示
LVGL PCF85063 simpleTime示例
本示例演示了在LVGL下使用PCF85063 RTC 模块在 SH8601 显示屏上显示当前时间,每秒检索时间并仅在时间发生变化时更新显示,对比时间刷新效果更佳
显示效果展示
LVGL QMI8658 ui示例
本示例演示了使用 LVGL 进行图形显示,与 QMI8658 IMU 通信以获取加速度计和陀螺仪数据
显示效果展示
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; }
显示效果展示
LVGL Widgets示例
本示例演示了LVGL Widgets示例,动态状态下帧率可达50~60帧,通过优化SH8601显示库可实现更佳流畅的帧率,实际可对比ESP-IDF环境下启用双缓存、双加速的场景
显示效果展示
LVGL SD Test示例
本示例演示了使用SDMMC驱动SD卡,并输出其内容到显示屏上
显示效果展示
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等报错、异常等情况,请重新清理目录文件夹、确保网络环境稳定无代理污染等并重新进行安装。所需时间较长,请耐心等待。
先决条件
- 如果您使用的是 Mac 或 Linux,请安装以下ESP-IDF 先决条件。如果您使用的是 Windows,请忽略此步骤。
安装VSCode
- 打开VSCode官网的下载页面,选择对应系统和系统位数进行下载
- 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
- 第一、二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验.
- 第三项开启后,选择打开方式时,可以直接选择VSCode
安装ESP-IDF插件
- 打开VSCode,点击插件管理器,并搜索ESP-IDF进行下载安装,如图:
- 安装好后左侧工具栏有Espressif的Logo就是插件,点击进入插件(会有一小段时间用于加载程序),选择“EXPRESS”进行快速安装,如图:
安装ESP-IDF开发环境
- 进入EXPRESS安装界面,确认好ESP-IDF 版本≥v5.3.1发布版本、ESP-IDF 目录和ESP-IDF 工具目录后,点击Install,耐心等待安装步骤完成,如图:
- 如果是国内用户,可以选择下载服务器为Espressif,安装过程比较缓慢,确保网络状态良好,可耐心等待安装完成,
- 安装过程展示:
- 安装完成标志:
ESP-IDF项目的基本结构介绍
├── 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
会根据索引导入每个所需要编译的内容。编译过程如:
- 组件的引用:Python开发环境中引入库只需要“import 库名或路径”即可,而ESP-IDF基于C语音基础,引入库是通过
VSCode 用户界面底部工具栏说明
当我们打开一个ESP-IDF工程时,底部会自动加载环境,对于ESP32-P4-Nano的开发,底部工具栏也是一个非常重要的,如图示:
- ESP-IDF开发环境版本管理器,当我们的工程需要区分开发环境版本时,可以通过安装不同版本的ESP-IDF来分别管理,当工程使用特定版本时,可以通过使用它来切换
- 设备烧录COM口,选择以将编译好的程序烧录进芯片上
- set-target 芯片型号选择,选择对应的芯片型号,如:ESP32-P4-Nano需要选择
esp32p4
为目标芯片 - menuconfig,点击修改sdkconfig配置文件内容
- fullclean 清理按钮,当工程编译报错或其他操作污染编译内容时,通过点击清理全部编译内容
- Build 构建工程,当一个工程满足构建时,通过此按钮进行编译
- flash烧录按钮,当一个工程Build构建通过时,选择对应开发板COM口,点击此按钮可以将编译好的固件烧录至芯片
- monitor开启烧录口监控,当一个工程Build——>Flash后,可通过点击此按钮查看烧录、调试口输出的log,以便观察应用程序是否正常工作
- Build Flash Monitor 一键按钮,用于连续执行Build——>Flash——>Monitor,常被称作小火苗
示例说明
axp2101示例
本示例演示了在使用ESP-IDF移植XPowersLib,通过移植后的XPowersLib驱动AXP2101获取电源相关数据。
效果展示
I2SCodec示例
本示例演示了使用I2S驱动 ES8311 Codec芯片采集或播放音频
自定义音频
用户可以通过下述步骤自定义音频播放片段(需要有一定编程基础)
- 下载 ‘ffmpeg’工具
- 使用‘ffprobe a.mp3’检查音频流
- 裁剪音频文件,仅有部分空间可用于音频存放,‘ffmpeg -i a_cut.mp3 -f s16ls -ar 16000 -ac -1 -acodec pcm_s16le a.pcm’
- 移动裁剪好的音频文件‘a.pcm’到main目录下
- 在main/CMakeList.txt下用a.pcm替换canon.pcm
- 在 i2s_es8311_example.c中替换掉_binary_canon_pcm_start、_binary_canon_pcm_end为_binary_a_pcm_start、_binary_a_pcm_end
- 编译烧录即可
lvgl_with_ram示例
本示例展示LVGLdemo,通过开启双缓存、开启DMA加速防撕裂等方式运行LVGL的demo,可流畅运行动态图文,帧率可达200~300帧
效果展示
pcf85063示例
本示例使用简单的方式驱动pcf85063进行时间存储读取功能
效果展示
qmi8658示例
本示例演示了在使用ESP-IDF移植SensorLib,通过移植后的SensorLib驱动qmi8658获取陀螺仪相关数据。
效果展示
sd_mmc示例
本示例演示了使用sdmmc方式初始化SD卡并读取、写入内容。
效果展示
资料
文档
数据手册
程序
- [示例程序]
软件
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.h 中 LV_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*来查看所有串口设备的配置信息。