ESP32-S3-ETH 使用教程

产品介绍

产品简介

ESP32-S3-GEEK 是一款基于 ESP32-S3R8 设计的以太网开发板,具备出色的 Wi-Fi 和蓝牙无线连接功能,拥有更可靠且高效的有线以太网连接,且支持 PoE 供电 (仅 PoE 版本)。板载摄像头接口,兼容 OV2640、OV5640 等主流摄像头,方便进行图像和视频采集。开发板还预留了 Pico 兼容接口,支持部分树莓派 Pico 扩展板,并依托其丰富的生态和开源资源,用户可以快速灵活地进行二次开发,可广泛应用于物联网、图像采集、智能家居及人工智能项目。

产品特性

  • 基于 ESP32-S3R8 高性能芯片,配备 Xtensa 32 位 LX7 双核处理器,主频高达 240MHz
  • 集成 512KB SRAM 和 384KB ROM,内置 8MB PSRAM 和 16MB Flash
  • 支持 2.4GHz Wi-Fi 和 Bluetooth 5 (LE),内置天线,支持外接天线
  • 板载 W5500 以太网芯片,通过 SPI 接口扩展 10/100Mbps 网络连接
  • 支持外接 PoE 模块实现以太网供电功能 (符合 IEEE 802.3af 标准)
  • 板载摄像头接口,兼容 OV2640 和 OV5640 等主流摄像头,适用于图像和视频采集
  • 板载 USB Type-C 接口,支持供电、调试和固件下载,开发更便捷
  • 板载 Micro SD 卡槽,支持外接 SD 卡存储图片和文件
  • 板载 Pico 兼容接口,提供丰富的外设扩展,兼容性强

资源简介


1、ESP32-S3R8
双核处理器,高达 240MHz 的运行频率

2、W25Q128
16MB Flash,用于储存程序和数据

3、W5500
网口芯片

4、H1102NLT
网络变压器

5、JW5060
稳压芯片

6、USB Type-C 接口
可用于下载程序和供电

7、以太网接口
RJ45 10/100M 自适应网口

8、PoE 接口
可外接 PoE 模块

9、摄像头接口
可兼容 OV2640/OV5640 等摄像头

10、IPEX 1 代天线接口
预留接口,须改焊电阻使能

11、陶瓷天线
默认使能,可改焊设置为 IPEX 外接天线

12、Micro SD 卡槽
13、BOOT 按键
14、ACT 指示灯
15、LINK 指示灯
16、RESET 按键

接口介绍


产品尺寸


使用说明

器件准备

  • ESP32-S3-ETH x1
  • PoE Module (B) x1
  • OV2640摄像头 x1
  • 16GB SD卡 x1
  • USB线 type A公口 转 Type C公口 x1


在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

Arduino开发

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

环境搭建

下载和安装 Arduino IDE

  1. 点击访问Arduino官网,选择对应的系统和系统位数下载。
  2. 运行安装程序,全部默认安装即可。
更多 Arduino IDE 使用说明,请见:Arduino 官方说明文档

安装 Arduino-ESP32

  • ESP32相关主板在Arduino IDE使用,须先安装“Arduino-ESP32板”库。
  • 国内部分区域安装,可能会因网络因素无法“在线安装”,一般推荐“离线安装” 。
  • 打开首选项在 File->Preferences 下 Settings 界面的 Additional boards manager URLs 处填写下面链接后保存

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json




安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装
  • ①. 在侧边栏选择“LIBRARY MANAGER”(库管理);
    ②. 在搜索框中输入要安装的库名称,如“Adafruit NeoMatrix”;
    ③. 在方框处选择库版本,若无特殊要求,默认最新版即可,点击“INSTALL”(安装)。


  • ESP32-S3-ETH 库文件说明
库名称说明库安装要求
ESP32-BLE-KeyboardESP32蓝牙键盘库“在线”或“离线”安装
ETHClassESP32以太网库“在线”或“离线”安装

示例程序

  • ESP32-S3-ETH 示例程序
序号示例程序说明依赖库
1IO_Test基础例程:GPIO引脚高低电平控制-
2SD_Card基础例程:SD卡加载,读写操作-
3WiFi_AP基础例程:设置为AP热点,允许其他WiFi设备接入联网
4WiFi_STA基础例程:设置为STA模式,可接入WiFi路由网络进行联网,并可实时控制GPIO口的电平输出
5BLE_Keyboard基础例程:蓝牙键盘功能演示ESP32-BLE-Keyboard
6ETH_Web_CAM综合例程:通过以太网连接,实现网络摄像头功能ETHClass
  • Arduino 工程设置:




IO_Test

【程序说明】


  • 该程序演示了如何使用ESP32-S3-ETH模块的多个GPIO引脚作为输出控制端口。程序会按顺序将每个GPIO引脚依次设置为高电平(打开)和低电平(关闭),每次状态变化间隔300毫秒。通过这种方式,可以观察到GPIO引脚的依次开关操作。

【硬件连接】

  • 使用USB线把板子接入电脑


【代码分析】


1.GPIO 引脚设置:程序首先定义了 25 个 GPIO 引脚,并在 setup() 函数中将它们初始化为输出模式。所有引脚在开始时都被设置为低电平(关闭状态)。

#define NUM_GPIO 25

// Define GPIO pins
const int gpio_pin[NUM_GPIO] = {21, 17, 16, 18, 15, 3, 2, 1, 0, 44, 43, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48};

2. GPIO 控制循环

  • 在 loop() 函数中,程序会依次将每个 GPIO 引脚打开(设置为高电平),延时300毫秒,然后再关断引脚(设置为低电平)。
  • 这个过程会不断重复。

3. 打印输出:程序通过 USB 口输出每个 GPIO 引脚的状态信息,提示该引脚是处于高电平(开启)还是低电平(关闭)状态。

void loop() {
  // Turn on each GPIO one by one
  for (current_gpio = 0; current_gpio < NUM_GPIO; current_gpio++) {
      digitalWrite(gpio_pin[current_gpio], HIGH); // Set GPIO pin to HIGH (turn on)
      printf("GPIO %d set to HIGH.\n", gpio_pin[current_gpio]); // Print GPIO state
      delay(300); // Delay for 300ms
  }

  // Turn off each GPIO one by one
  for (current_gpio = 0; current_gpio < NUM_GPIO; current_gpio++) {
      digitalWrite(gpio_pin[current_gpio], LOW); // Set GPIO pin to LOW (turn off)
      printf("GPIO %d set to LOW.\n", gpio_pin[current_gpio]); // Print GPIO state
      delay(300); // Delay for 300ms
  }
想了解更多关于Arduino ESP32库关于GPIO相关的使用?可访问:Arduino ESP32 库 GPIO 使用

【运行效果】


程序烧录完成后,设备的运行效果如下:

  • ESP32-S3-ETH 将依次控制 25 个 GPIO 引脚。程序会在每个 GPIO 引脚上切换高电平(HIGH)和低电平(LOW)状态,并将状态变化通过 USB 输出至监视窗口。
    输出的低电平为 0V,高电平为当前板子的工作电压。由于 ESP32-S3 的工作电压为 3.3V,因此高电平为 3.3V。
  • 打开 Arduino IDE 的串口监视窗口,可以观察到各个 GPIO 引脚的状态切换,如下图所示:

    GPIO流水灯实验参考例图


使用场景:适用于学习和测试ESP32-S3的GPIO引脚控制。用户可以使用万用表检测各个 GPIO 引脚的电压高低,或者通过连接 LED 和电阻,进行简单的流水灯测试。

SD_Card

【程序说明】


  • 该程序演示了如何在ESP32-S3-ETH模块上操作SD卡,包括初始化SD卡创建和写入文件列出目录中的文件以及读取文件内容。程序将创建一个名为`waveshare.txt`的文件,写入"Hello world from Waveshare"这段文字,并列出SD卡根目录中的所有文件信息,最后读取`waveshare.txt`文件内容并打印到串口监视器上。

【硬件连接】


SD卡控制引脚说明
SPI接口ESP32-S3-ETH
CS (SS)GPIO4
DI (MOSI)GPIO6
DO (MISO)GPIO5
SCK (SCLK)GPIO7
  • 板子装上SD卡(推荐用16GB以下的闪迪SD卡),使用USB线把板子接入电脑


【代码分析】


1. setup()

  • 初始化串口通信和SD卡。
  • 通过 SPI.begin() 初始化ESP32的SPI总线,指定用于SD卡通信的引脚。
  • 调用 SD.begin() 尝试挂载SD卡,成功时输出卡的大小。
  • 调用三个核心功能:
    • writeFileToSD():创建并写入文件。
    • listFilesOnSD():扫描并打印SD卡根目录下的所有文件。
    • readFileFromSD():打开并读取 waveshare.txt 文件的内容。

2. writeFileToSD()

  • 主要功能是创建或打开 waveshare.txt 文件,并写入文本 "Hello world from Waveshare"
  • 在完成文件写入后,文件被关闭以确保写入操作正确完成。

3. listFilesOnSD()

  • 扫描SD卡根目录中的所有文件,并将文件名通过串口输出。
  • 使用 openNextFile() 函数依次打开目录中的每个文件并打印它们的名称,最后关闭根目录文件。

4. readFileFromSD(const char *filePath)

  • 打开并读取指定路径的文件,这里是 waveshare.txt
  • 如果文件存在,使用 file.read() 逐字节读取内容,并通过串口输出文件的内容,最后关闭文件。
想了解更多关于Arduino ESP32库关于SD卡相关的使用?可访问:Arduino ESP32 库 SD 使用

【运行效果】


程序烧录完成后,设备的运行效果如下:

  • 首先挂载SD卡,然后创建和写入文件,再扫描并列出SD卡的根目录文件,最后打开并读取一个特定文件的内容。

使用场景:适用于学习和演示如何在ESP32上进行文件的读写操作,或用于存储传感器数据、日志信息等需要持久化存储的数据记录应用。

WIFI_AP

【程序说明】


  • 该程序将ESP32-S3-ETH配置为WiFi接入点(AP模式),允许其他设备连接到该WiFi网络。连接设备的MAC地址分配的IP地址将会在串口监视器上打印出来。通过此程序可以了解如何使用ESP32作为接入点并动态监控连接到接入点的设备信息。

【硬件连接】


  • 使用 USB 线将板子连接到电脑。

【代码分析】


1. setup()

  • 初始化串口通信并配置 ESP32 为 WiFi 接入点(AP)。
  • 使用 WiFi.softAP() 设置 AP,指定网络名称(SSID)为"ESP32-S3-ETH",密码为"88888888"。
  • 使用 WiFi.onEvent() 注册 WiFi 事件处理程序,用于处理客户端连接和断开连接。
  • 在串口上打印确认信息,指示 AP 初始化成功。

2. formatMacAddress()

  • 将 MAC 地址从字节数组格式转换为可读的字符串格式(如 XX:XX:XX:XX:XX:XX)。
  • 用于在串口上显示连接设备的 MAC 地址。

3. WiFiEvent()

  • 处理 WiFi 事件,例如客户端连接和断开连接。
  • 当设备连接时:
    • 打印该设备的 MAC 地址。
    • 添加短暂延迟(500 毫秒)以确保 DHCP 有时间分配 IP 地址。
    • 调用 printDeviceIP() 获取并显示分配的 IP 地址。
  • 当设备断开连接时,打印断开连接信息。

4. printDeviceIP(const uint8_t* mac)

  • 根据 MAC 地址检索并打印已连接设备的 IP 地址。
  • 使用 ESP-IDF 函数 esp_wifi_ap_get_sta_list() 和 tcpip_adapter_get_sta_list() 获取连接设备列表。
  • 遍历设备列表,比较 MAC 地址以识别目标设备。
  • 如果 IP 地址有效(非 0.0.0.0),则打印 IP 地址。否则,表示 DHCP 尚未分配 IP 地址。

5. loop()

  • 包含一个小延迟以保持 CPU 空闲,防止不必要的负载。
  • 主循环中没有其他操作。
想了解更多关于 Arduino ESP32 库的 WiFi的功能?可访问:Arduino ESP32 库 WiFi 使用

【运行效果】


程序烧录完成后,设备的运行效果如下:

  1. ESP32-S3-ETH模块会启动一个WiFi接入点,网络名称为 "ESP32-S3-ETH"。
  2. 设备连接到该接入点后,其MAC地址和分配的IP地址会被打印到串口监视器上。
  3. 当设备断开连接时,也会在串口上输出断开消息。

使用场景:适用于物联网应用中的本地网络创建和设备管理。通过接入点模式将ESP32设为中心节点,并监控连接设备的IP和MAC信息。

WIFI_STA

【程序说明】


  • 该程序将ESP32-S3模块配置为WiFi工作站(STA模式)并搭建一个Web服务器,通过Web页面控制连接到GPIO18的LED。用户可以在网页上查看当前LED状态(LED ON 或 LED OFF)并切换LED的开关状态。每次LED状态变化时,状态信息会在网页和串口监视器上显示。

【硬件连接】



WIFI控制GPIO18输出高低电平
  • 使用 USB 线将板子连接到电脑。
有条件的同学,可以参考右图串上一个LED灯,实测查看GPIO18的高低电平状态,或者用万用表测量。


【代码分析】


1. setup()

  • 功能: 初始化系统设置,包括串口通信、GPIO配置、WiFi连接和Web服务器启动。
  • 主要步骤:
    • 初始化串口通信(用于调试输出)。
    • 设置GPIO18为输出,并确保LED初始状态为关闭。
    • 连接到WiFi网络并在串口监视器上打印IP地址。
    • 启动Web服务器,等待客户端连接。

2. loop()

  • 功能: 处理客户端连接和HTTP请求,根据请求内容切换LED状态,并生成HTML页面显示当前LED状态。
  • 主要步骤:
    • 检查是否有新客户端连接,读取HTTP请求内容。
    • 根据请求路径 "/H" 或 "/L" 来控制GPIO18的高低电平,切换LED状态。
    • 生成包含当前LED状态和切换链接的HTML页面,返回给客户端。
    • 关闭与客户端的连接,等待下一个连接请求。
想了解更多关于 Arduino ESP32 库的 WiFi的功能?可访问:Arduino ESP32 库 WiFi 使用

【运行效果】


程序烧录完成,设备的运行效果如下:

  1. 模块连接上网络后,监视窗口会打印出模块的IP地址

  2. 打开网页浏览器,输入对应的IP,可以实时控制GPIO18引脚的高低电平状态,且对应的串口监视窗口也会实时打印出H 或 L的返回状态值。

BLE_Keyboard

详见开源程序:ESP32-BLE-Keyboard

ETH_Web_CAM

【程序说明】


摄像头控制引脚说明
摄像头接口ESP32-S3-ETH GPIO
VSYNCGPIO1
HREFGPIO2
XCLKGPIO3
PCLKGPIO39
SIOD (SDA)GPIO48
SIOC (SCL)GPIO47
D7GPIO18
D6GPIO15
D5GPIO38
D4GPIO40
D3GPIO42
D2GPIO46
D1GPIO45
D0GPIO41
网口控制引脚说明
网口接口ESP32-S3-ETH GPIO
MISOGPIO12
MOSIGPIO11
SCLKGPIO13
CSGPIO14
RSTGPIO9
INTGPIO10

该程序通过ESP32-S3-ETH模块使用以太网连接,并结合摄像头模块实现图像采集和流式传输。程序将配置摄像头引脚并启动摄像头服务器,使用户可以通过以太网实时访问摄像头的拍摄内容。初始化过程中,程序会设置摄像头的各种参数,包括分辨率、像素格式等,并通过网络事件监控以太网连接的状态。

【硬件连接】


  • 参考下图连接好硬件,(如果不需要PoE供电,则无须接PoE模块)


【代码分析】
1. setup()

  • 功能: 配置串口调试并初始化以太网连接,设置摄像头控制引脚。
  • 通过条件编译,根据不同的ESP32配置方式启动以太网:
    • SPI方式: 在非ESP32设备上,使用 `ETH.beginSPI()` 启动以太网。
  • 等待以太网连接成功后,配置摄像头参数,并启动摄像头服务器以供外部访问。
  • 摄像头配置: 通过 `camera_config_t` 结构体配置摄像头的各种参数,包括:
    • 图像分辨率、格式(JPEG或RGB565)、XCLK频率、帧缓冲等。
    • 如果检测到PSRAM,将使用较高的JPEG质量和帧缓存设置,以提升图像质量。

2. startCameraServer()

  • 启动摄像头服务器,使用户可以通过网络访问摄像头的拍摄内容。

3. 事件处理函数 WiFiEvent(WiFiEvent_t event)

  • 功能: 用于监控以太网连接状态并在事件发生时输出调试信息。
    • 连接事件: 当以太网启动、连接或断开时,会输出状态信息。
    • 获得IP地址事件: 当成功获得IP地址时,打印设备的MAC地址、IPv4地址、全双工状态、链路速度和网关IP地址。

【运行效果】


  1. 启动后,ESP32-S3会初始化以太网并输出连接状态。
  2. 摄像头成功初始化后,服务器将开始提供实时图像传输服务,用户可以通过以太网连接到摄像头服务器,查看实时视频。
  3. 若连接断开或摄像头初始化失败,程序会在串口监视器上输出相关错误信息。


使用场景:适用于实现基于ESP32-S3的低成本网络摄像头应用、远程图像采集应用,或用于监控、图像识别和智能家居等物联网应用场景。

资料

原理图

示例程序

数据手册

ESP32-S3

其他器件

软件工具

Arduino

调试工具

其他资料链接

FAQ

问题:模块下载程序后,重新下载,有时会出现无法连接串口,或者烧录失败的情况?

可长按BOOT按键,同时按下RESET,然后松开RESET,再松开BOOT按键,此时模块可进入下载模式,可解决大部分无法下载的问题。


问题:如何切换为IPEX 1代外接天线?

如下图所示,默认焊接的是垂直0R的电阻,若要切换为外部天线,则须把该0R电阻改焊为水平的位置:


技术支持

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

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841