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 2、W25Q128 3、W5500 4、H1102NLT 5、JW5060 6、USB Type-C 接口 7、以太网接口 |
8、PoE 接口 9、摄像头接口 10、IPEX 1 代天线接口 11、陶瓷天线 12、Micro SD 卡槽 |
接口介绍
产品尺寸
使用说明
器件准备
- ESP32-S3-ETH x1
- PoE Module (B) x1
- OV2640摄像头 x1
- 16GB SD卡 x1
- USB线 type A公口 转 Type C公口 x1
Arduino开发
本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。
环境搭建
下载和安装 Arduino IDE
- 点击访问Arduino官网,选择对应的系统和系统位数下载。
- 运行安装程序,全部默认安装即可。
安装 ESP32 开发板
- ESP32相关主板在Arduino IDE使用,须先安装“ESP32 开发板”软件包。
- 国内部分区域安装,可能会因网络因素无法“在线安装”,一般推荐“离线安装” 。
- 安装“ESP32 开发板”软件包教程,详见:Arduino 板管理教程
板名称 | 板安装要求 | 版本号要求 |
---|---|---|
ESP32-S3-ETH | “离线”安装/“在线”安装 | 2.0.12 以下 |
安装库
- 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。
对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。 - 库安装教程,详见:Arduino 库管理教程
库名称 | 说明 | 库安装要求 |
---|---|---|
Adafruit_NeoPixel | NeoPixel灯条控制库 | “在线”或“离线”安装 |
ESP32-BLE-Keyboard | ESP32蓝牙键盘库 | “在线”或“离线”安装 |
ETHClass | ESP32以太网库 | “离线”安装 |
运行第一个 Arduino 程序
新建工程
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); }
示例程序
序号 | 示例程序 | 说明 | 依赖库 |
---|---|---|---|
1 | IO_Test | 基础例程:GPIO引脚高低电平控制 | - |
2 | RGB_LED | 基础例程:GPIO引脚控制WS2812彩灯 | Adafruit NeoPixel |
3 | SD_Card | 基础例程:SD卡加载,读写操作 | - |
4 | WiFi_AP | 基础例程:设置为AP热点,允许其他WiFi设备接入联网 | |
5 | WiFi_STA | 基础例程:设置为STA模式,可接入WiFi路由网络进行联网,并可实时控制GPIO口的电平输出 | |
6 | BLE_Keyboard | 基础例程:蓝牙键盘功能演示 | ESP32-BLE-Keyboard |
7 | ETH_Web_CAM | 综合例程:通过以太网连接,实现网络摄像头功能 | ETHClass |
- Arduino 工程设置:
IO_Test
【程序说明】
- 该程序演示了如何使用ESP32-S3-ETH模块的多个GPIO引脚作为输出控制端口。程序会按顺序将每个GPIO引脚依次设置为高电平(打开)和低电平(关闭),每次状态变化间隔300毫秒。通过这种方式,可以观察到GPIO引脚的依次开关操作。
【代码分析】
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 }
【运行效果】
程序烧录完成后,设备的运行效果如下:
- ESP32-S3-ETH 将依次控制 25 个 GPIO 引脚。程序会在每个 GPIO 引脚上切换高电平(HIGH)和低电平(LOW)状态,并将状态变化通过 USB 输出至监视窗口。
输出的低电平为 0V,高电平为当前板子的工作电压。由于 ESP32-S3 的工作电压为 3.3V,因此高电平为 3.3V。 - 打开 Arduino IDE 的串口监视窗口,可以观察到各个 GPIO 引脚的状态切换,如下图所示:
RGB_LED
【程序说明】
该程序使用GPIO21引脚控制一颗 WS2812 RGB LED,展示多种灯光效果,包括单色填充(Color Wipe)、彩虹渐变(Rainbow)和剧院追逐效果(Theater Chase)。
【硬件连接】
使用USB线把板子接入电脑
【代码分析】
1.GPIO 引脚设置:程序首先定义了 RGB LED控制引脚为 GPIO 引脚,并在 **`setup` 函数**中,
- 初始化 NeoPixel RGB LED:
- 使用 `strip.begin()` 开启 LED 控制功能。
- 设置 LED 亮度为 50%,通过 `strip.setBrightness(50)` 实现。
- 调用 `strip.show()` 将 LED 初始化为熄灭状态。
- 设置额外指示灯(LED1)的输出模式,并通过 `digitalWrite(LED1, HIGH)` 点亮指示灯
#define PIN 21 // Pin connected to WS2812 RGB LED #define LED1 -1 // GPIO for an additional LED (optional) Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); void setup() { #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif strip.begin(); strip.setBrightness(50); strip.show(); pinMode(LED1, OUTPUT); digitalWrite(LED1, HIGH); // Turn on the additional LED }
SD_Card
【程序说明】
- 该程序演示了如何在ESP32-S3-ETH模块上操作SD卡,包括初始化SD卡、创建和写入文件、列出目录中的文件以及读取文件内容。程序将创建一个名为`waveshare.txt`的文件,写入"Hello world from Waveshare"这段文字,并列出SD卡根目录中的所有文件信息,最后读取`waveshare.txt`文件内容并打印到串口监视器上。
【硬件连接】
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()
逐字节读取内容,并通过串口输出文件的内容,最后关闭文件。
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 空闲,防止不必要的负载。
- 主循环中没有其他操作。
WIFI_STA
【程序说明】
- 该程序将ESP32-S3模块配置为WiFi工作站(STA模式)并搭建一个Web服务器,通过Web页面控制连接到GPIO18的LED。用户可以在网页上查看当前LED状态(LED ON 或 LED OFF)并切换LED的开关状态。每次LED状态变化时,状态信息会在网页和串口监视器上显示。
【代码分析】
1. setup()
- 功能: 初始化系统设置,包括串口通信、GPIO配置、WiFi连接和Web服务器启动。
- 主要步骤:
- 初始化串口通信(用于调试输出)。
- 设置GPIO18为输出,并确保LED初始状态为关闭。
- 连接到WiFi网络并在串口监视器上打印IP地址。
- 启动Web服务器,等待客户端连接。
2. loop()
- 功能: 处理客户端连接和HTTP请求,根据请求内容切换LED状态,并生成HTML页面显示当前LED状态。
- 主要步骤:
- 检查是否有新客户端连接,读取HTTP请求内容。
- 根据请求路径 "/H" 或 "/L" 来控制GPIO18的高低电平,切换LED状态。
- 生成包含当前LED状态和切换链接的HTML页面,返回给客户端。
- 关闭与客户端的连接,等待下一个连接请求。
BLE_Keyboard
ETH_Web_CAM
【程序说明】
摄像头接口 | ESP32-S3-ETH GPIO |
---|---|
VSYNC | GPIO1 |
HREF | GPIO2 |
XCLK | GPIO3 |
PCLK | GPIO39 |
SIOD (SDA) | GPIO48 |
SIOC (SCL) | GPIO47 |
D7 | GPIO18 |
D6 | GPIO15 |
D5 | GPIO38 |
D4 | GPIO40 |
D3 | GPIO42 |
D2 | GPIO46 |
D1 | GPIO45 |
D0 | GPIO41 |
网口接口 | ESP32-S3-ETH GPIO |
---|---|
MISO | GPIO12 |
MOSI | GPIO11 |
SCLK | GPIO13 |
CS | GPIO14 |
RST | GPIO9 |
INT | GPIO10 |
该程序通过ESP32-S3-ETH模块使用以太网连接,并结合摄像头模块实现图像采集和流式传输。程序将配置摄像头引脚并启动摄像头服务器,使用户可以通过以太网实时访问摄像头的拍摄内容。初始化过程中,程序会设置摄像头的各种参数,包括分辨率、像素格式等,并通过网络事件监控以太网连接的状态。
【代码分析】
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地址。
【运行效果】
- 启动后,ESP32-S3会初始化以太网并输出连接状态。
- 摄像头成功初始化后,服务器将开始提供实时图像传输服务,用户可以通过以太网连接到摄像头服务器,查看实时视频。
- 若连接断开或摄像头初始化失败,程序会在串口监视器上输出相关错误信息。