模板: ESP32-S3-Touch-LCD-3.5B-Aruidno-Demo

来自Waveshare Wiki
跳转至: 导航搜索

Arduino开发

本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。 Arduino-flow-04.png

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。
    ESP32-S3-AMOLED-1.91-Ar-software-01.png
  • 运行安装程序,全部默认安装即可。
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问Arduino-esp32环境搭建参考

安装 ESP32 开发板

  • ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”开发板的软件包
  • 根据板安装要求进行安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装
  • 安装教程,详见:Arduino 板管理教程
  • ESP32-S3-Touch-LCD-3.5B 所需开发板安装说明
板名称 板安装要求 版本号要求
esp32 by Espressif Systems “离线”安装/“在线”安装 3.2.0

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • ESP32-S3-Touch-LCD-3.5B 库文件存放于示例程序中,点击此处跳转:ESP32-S3-Touch-LCD-3.5B示例程序
  • 库安装教程,详见:Arduino 库管理教程
ESP32-S3-Touch-LCD-3.5B 库文件说明
库名称 说明 版本 库安装要求
lvgl LVGL图形化库 v8.4.0 或 v9.2.2 “在线”安装
GFX_Library_for_Arduino GFX图形化库 v1.6.0 “在线”安装
XPowersLib 电源管理库 v0.2.9 “在线”安装
SensorLib 传感器库 v0.3.1 “在线”安装
ESP32-audioI2S-master 音频处理库 v3.3.0 “在线”安装
TCA9554 扩展IO驱动库 v0.1.2 “在线”安装
OneButton 按键库 v2.6.1 “在线”安装
esp_lcd_touch_axs15231b 触摸驱动 --- “离线”安装
es8311 es8311驱动库 --- “离线”安装

运行第一个 Arduino 程序

如果你刚入门学习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

  • 若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

示例程序

Demo-flow-01.png

  • ESP32-S3-Touch-LCD-3.5B 示例程序
示例程序 基础例程说明 依赖库
01_audio_out 读取SD卡的音频文件,并播放 ESP32-audioI2S-master、es8311
02_axp2101_example 打印电源管理芯片的数据 XPowersLib
03_button_example BOOT按键单击、双击、长按等 OneButton
04_es8311_example 录音一段时间,并播放 es8311
05_pcf85063_example 打印RTC获取的数据 SensorLib
06_qmi8658_example 打印IMU的数据 SensorLib
07_sd_test 测试SD卡的读写 ---
08_gfx_helloworld 屏幕上显示HelloWorld GFX_Library_for_Arduino、TCA9554
09_lvgl_arduino_v8 lvgl v8版本示例程序 lvgl(v8.4.0)、GFX_Library_for_Arduino、TCA9554、esp_lcd_touch_axs15231b
10_lvgl_arduino_v9 lvgl v9版本示例程序 lvgl(v9.2.2)、GFX_Library_for_Arduino、TCA9554、esp_lcd_touch_axs15231b
11_camera_web_server 在网页上显示摄像头图像 XPowersLib
  • ESP32-S3-Touch-LCD-3.5B Arduino 工程参数设置

ESP32-S3-Touch-LCD-3.5-Demo-1.png

01_audio_out

【程序说明】


本示例演示ESP32-S3-Touch-LCD-3.5B读取SD卡的音频文件并使用喇叭播放,支持MP3、AAC、WAV等格式。

【准备工作】


  • 将SD卡插入电脑
  • 把需要播放的音乐文件1.mp3拷贝到SD卡
  • 将SD卡插入 ESP32-S3-Touch-LCD-3.5B

【代码分析】


  • 设置播放的音频文件
  audio.connecttoFS(SD_MMC, "1.mp3");

【运行效果】


  • 播放音频文件,屏幕无现象



02_axp2101_example

【程序说明】


本示例演示使用XPowers驱动AXP2101,并通过串口打印数据

【代码分析】


  • 初始化
  bool result = power.begin(Wire, AXP2101_SLAVE_ADDRESS, i2c_sda, i2c_scl);

  if (result == false) {
    Serial.println("power is not online...");
    while (1) delay(50);
  }

【运行效果】


  • 屏幕无现象
  • 打开串口监视器

ESP32-S3-Touch-LCD-3.5B-Demo-01.png



03_button_example

【程序说明】


本示例演示如何使用 OneButton 库驱动 BOOT 按键,并通过串口打印单击、双击和长按等事件。

【代码分析】


  • 绑定回调函数
  button1.attachClick(click1);
  button1.attachDoubleClick(doubleclick1);
  button1.attachLongPressStart(longPressStart1);
  button1.attachLongPressStop(longPressStop1);
  button1.attachDuringLongPress(longPress1);

【运行效果】


  • 屏幕无现象
  • 打开串口监视器

ESP32-S3-Touch-LCD-3.5B-Demo-11.png



04_es8311_example

【程序说明】


本示例演示使用ESP32-S3-Touch-LCD-3.5B驱动ES8311音频编解码器,实现音频录制及回放功能。

【代码分析】


  • 初始化
  Wire.begin(I2C_SDA, I2C_SCL);
  es8311_codec_init();
  setupI2S();
  • 音频录制5s,并播放录制的内容
  wav_buffer = i2s.recordWAV(5, &wav_size);
  delay(1000);
  Serial.println("I2S playWAV");
  i2s.playWAV(wav_buffer, wav_size);

【运行效果】


  • 屏幕无现象
  • 按下ESP32-S3-Touch-LCD-3.5B的RST按键进入音频录制状态,2s后播放录制的内容。



05_pcf85063_example

【程序说明】


本实例演示ESP32-S3-Touch-LCD-3.5B驱动PCF85063,设置时间、日期以及获取时间。

【代码分析】


  • 初始化
    if (!rtc.begin(Wire, PCF85063_SLAVE_ADDRESS, SENSOR_SDA, SENSOR_SCL)) {
        Serial.println("Failed to find PCF8563 - check your wiring!");
        while (1) {
            delay(1000);
        }
    }
  • 设置时间、日期
    rtc.setDateTime(year, month, day, hour, minute, second);
  • 获取时间、日期
    RTC_DateTime datetime = rtc.getDateTime();

【运行效果】


  • 屏幕无现象
  • 打开串口监视器

ESP32-S3-Touch-LCD-3.5B-Demo-02.png



06_qmi8658_example

【程序说明】


本实例演示ESP32-S3-Touch-LCD-3.5B驱动QMI8658,获取并打印Accel、Gyro和IMU的温度。

【代码分析】


  • 初始化
  if (!qmi.begin(Wire, QMI8658_L_SLAVE_ADDRESS, SENSOR_SDA, SENSOR_SCL)) {
    Serial.println("Failed to find QMI8658 - check your wiring!");
    while (1) {
      delay(1000);
    }
  }
  • 获取数据
  if (qmi.getDataReady()) {
    if (qmi.getAccelerometer(acc.x, acc.y, acc.z)) {
    }
    if (qmi.getGyroscope(gyr.x, gyr.y, gyr.z)) {
    }
  }

【运行效果】


  • 屏幕无现象
  • 打开串口监视器

ESP32-S3-Touch-LCD-3.5B-Demo-03.png



07_sd_test

【程序说明】


本示例演示使用 ESP32-S3-Touch-LCD-3.5B 测试SD卡的读写功能

【硬件连接】


  • 将板子接入电脑
  • 将Micro SD卡插入卡槽(SD卡需要格式化为FAT32)

【代码分析】


  • 初始化
  if(!SD_MMC.setPins(clk, cmd, d0)){
    Serial.println("Pin change failed!");
    return;
  }

  if (!SD_MMC.begin( "/sdcard", true)) {
    Serial.println("Card Mount Failed");
    return;
  }

【运行效果】


  • 将SD卡插入电脑,可以发现多了两个文件 test.txt foo.test。其中foo.txt的内容为Hello World!,test.txt的内容为空

ESP32-S3-Touch-LCD-3.5-Demo-8.png



08_gfx_helloworld

【程序说明】


本示例演示 ESP32-S3-Touch-LCD-3.5B 使用GFX_Library_for_Arduino库驱动屏幕并在屏幕上显示HelloWorld

【代码分析】


  • 配置屏幕接口以及屏幕的分辨率等
Arduino_DataBus *bus = new Arduino_ESP32QSPI(LCD_QSPI_CS, LCD_QSPI_CLK, LCD_QSPI_D0, LCD_QSPI_D1, LCD_QSPI_D2, LCD_QSPI_D3);

Arduino_GFX *g = new Arduino_AXS15231B(bus, -1 /* RST */, 0 /* rotation */, false, 320, 480);

Arduino_Canvas *gfx = new Arduino_Canvas(320, 480, g, 0, 0, ROTATION);

【运行效果】


ESP32-S3-Touch-LCD-3.5B-Demo-04.jpg



09_lvgl_example_v8

【程序说明】


本示例演示了使用 ESP32-S3-Touch-LCD-3.5B 运行lvgl( v8.4.0)示例程序。

【准备工作】


  • 需要安装 lvgl v8.4.0 版本,如已安装其他版本,请重新安装。

ESP32-S3-Touch-LCD-3.5B-Demo-08.png

【代码分析】


  • UI初始化
    lv_obj_t *label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello Arduino! (V" GFX_STR(LVGL_VERSION_MAJOR) "." GFX_STR(LVGL_VERSION_MINOR) "." GFX_STR(LVGL_VERSION_PATCH) ")");
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);

    lv_obj_t *sw = lv_switch_create(lv_scr_act());
    lv_obj_align(sw, LV_ALIGN_TOP_MID, 0, 50);

    sw = lv_switch_create(lv_scr_act());
    lv_obj_align(sw, LV_ALIGN_BOTTOM_MID, 0, -50);

【运行效果】


  • 可以进行触摸进行操作

ESP32-S3-Touch-LCD-3.5B-Demo-05.jpg



10_lvgl_example_v9

【程序说明】


本示例演示了使用 ESP32-S3-Touch-LCD-3.5B 运行lvgl( v9.2.2)示例程序。

【准备工作】


  • 需要安装 lvgl v9.2.2 版本,如已安装其他版本,请重新安装。

ESP32-S3-Touch-LCD-3.5B-Demo-10.png

【代码分析】


  • UI初始化
    lv_obj_t *label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello Arduino, I'm LVGL!(V" GFX_STR(LVGL_VERSION_MAJOR) "." GFX_STR(LVGL_VERSION_MINOR) "." GFX_STR(LVGL_VERSION_PATCH) ")");
    lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);

    lv_obj_t *sw = lv_switch_create(lv_scr_act());
    lv_obj_align(sw, LV_ALIGN_TOP_MID, 0, 50);

    sw = lv_switch_create(lv_scr_act());
    lv_obj_align(sw, LV_ALIGN_BOTTOM_MID, 0, -50);

【运行效果】


  • 可以进行触摸进行操作

ESP32-S3-Touch-LCD-3.5B-Demo-07.jpg



11_camera_web_server

【程序说明】


本示例演示了如何使用驱动摄像头。在连接 WiFi 后,程序会创建一个网页服务器,用户只需在浏览器中输入设备的 IP 地址即可访问。网页上可以显示摄像头的图像,并支持分辨率、镜像等设置操作

【准备工作】


  • 将板子接入电脑
  • 将OV5640摄像头插入板子上的24pin座子(带外壳版本不需要这个操作)
  • 设置Parttion为Custom

ESP32-S3-Touch-LCD-3.5B-Demo-26.png

【代码分析】


  • 定义摄像头相关的引脚
#define PWDN_GPIO_NUM -1
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 38
#define SIOD_GPIO_NUM 8
#define SIOC_GPIO_NUM 7

#define Y9_GPIO_NUM 21
#define Y8_GPIO_NUM 39
#define Y7_GPIO_NUM 40
#define Y6_GPIO_NUM 42
#define Y5_GPIO_NUM 46
#define Y4_GPIO_NUM 48
#define Y3_GPIO_NUM 47
#define Y2_GPIO_NUM 45
#define VSYNC_GPIO_NUM 17
#define HREF_GPIO_NUM 18
#define PCLK_GPIO_NUM 41

  • 要连接的wifi名称和密码
const char *ssid = "waveshare";
const char *password = "12345678";
  • 启动服务器,开始提供 HTTP 视频流服务
startCameraServer();

Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");

【运行效果】


  • 打开串口终端连接WiFi后可以看到IP地址

ESP32-S3-Touch-LCD-3.5B-Demo-24.png

  • 使用浏览器(开热点的设备)打开串口打印的IP地址
  • 点击Start Stream,可以看到摄像头的图像

ESP32-S3-Touch-LCD-3.5B-Demo-25.png