ESP32-S3-CAM前置知识
- 存储
- 存储类型
- FLASH分区介绍
- 各种类型存储的代码使用示例
- 1. ROM(Read-Only Memory)
- 2. SRAM(Static Random-Access Memory)
- 3. RTC SRAM(Real-Time Clock Static RAM)
- 4. Flash(Flash Memory)
- (1)存储常量(编译时写入Flash)
- (2)通过SPIFFS存储文件(内置Flash分区)
- (3)外部Flash(TF卡)存储文件
- 5. PSRAM(Pseudo Static RAM)
- 引脚类型
- 先明确核心功能缩写的通用含义
- 可用引脚
- N8R8的ARDUINO配置
- 官方注意事项
- 帧缓冲区配置说明
- 相关配置选项
- 为什么选择ESP32-S3-CAM
- ESP32-CAM 与 ESP32-S3-CAM 对比分析
- 1. 核心硬件对比
- 2. 功能与适用场景
- 3. 开发环境与兼容性
- 4. 选型建议
- 5. 扩展资源
- esp32-s3-cam-n16r8的详细介绍
- 开发环境与兼容性
- 性能评测
- 常见问题与解决方案
- 参考
存储
存储类型
| 类型 | 英文全称 | 易失性 | 速度 | 容量(ESP32-S3) | 主要用途 | 详细描述 |
|---|---|---|---|---|---|---|
| ROM | Read-Only Memory | 否(非易失性) | 快 | 384 KB | 系统固件 | 芯片出厂时固化的只读存储器,用户无法修改。主要存储ESP32-S3的底层启动程序(Bootloader)、硬件外设(WiFi、蓝牙、GPIO等)的驱动程序,以及基础算法库(如加密、校验逻辑)。是芯片上电后首次运行的“基础系统”,确保硬件能正常初始化并加载用户程序。 |
| SRAM | Static Random-Access Memory | 是(易失性) | 最快 | 512 KB | 程序运行内存 | 高速临时存储器,CPU可直接访问(纳秒级延迟)。用于存放程序运行时的实时数据:包括全局变量、局部变量、函数调用栈(如函数返回地址)、高频更新的缓冲区(如传感器每秒多次采集的温湿度数据、串口接收的临时字节流)。是程序“实时运算的工作台”,速度直接影响代码执行效率。 |
| RTC SRAM | Real-Time Clock Static RAM | 是(但低功耗模式下由RTC电源域供电,数据可保持) | 中 | 16 KB | 低功耗模式数据保持 | 独立于普通SRAM的低功耗存储器,仅在深度睡眠时由RTC模块供电(功耗低至μA级)。用于保存低功耗状态下的关键数据:如睡眠前的系统时间、任务进度标记、唤醒触发源(定时器/外部中断)等。例如:小车深度睡眠前存储当前位置坐标,唤醒后无需重新定位,直接从RTC SRAM读取。 |
| Flash | Flash Memory | 否(非易失性) | 慢 | 16 MB | 程序存储、常量数据 | 可擦写的非易失存储器,通过SPI接口访问。主要用于:存储用户编译后的程序二进制文件;划分文件系统(如SPIFFS/FATFS)存放持久化数据(配置文件、日志、图像、音频等);预留分区用于OTA远程升级。例如:ESP32-S3-CAM拍摄的照片保存到Flash,断电后不丢失;小车的WiFi配置参数写入Flash,重启后自动加载连接。 |
| PSRAM | Pseudo Static Random-Access Memory | 是(易失性) | 中 | 8 MB(外部扩展) | 大容量数据缓存 | 外部扩展的临时存储器,通过SPI接口与芯片连接,弥补内置SRAM容量不足。用于存放大容量临时数据:如高分辨率图像原始数据(OV3660的1200万像素图像)、音频流缓冲区(5分钟PCM音频)、复杂算法(如人脸识别)的特征矩阵等。例如:ESP32-S3-CAM处理高清图像时,先将数据暂存PSRAM再压缩,避免内置SRAM(512KB)容量不足。【需要在ide中设置启用参考:https://blog.csdn.net/m0_60688978/article/details/154988410】 |
FLASH分区介绍
ESP32-S3 常见的默认 Flash 分区方案(基于 16MB Flash 配置,不同开发环境或版本可能略有差异)如下表所示,主要分为「默认单 APP 分区」「OTA 双 APP 分区」「带 SPIFFS 文件系统分区」三种典型方案:
表1:默认单 APP 分区方案(Default,无 OTA 功能)
适用于无需远程升级的场景,仅一个程序分区,剩余空间分配给文件系统(SPIFFS)。
| 分区名称 | 类型(Type) | 子类型(SubType) | 偏移地址(Hex) | 大小(Hex) | 大小(十进制) | 核心用途 |
|---|---|---|---|---|---|---|
| nvs | data | nvs | 0x00009000 | 0x00005000 | 20KB | 存储键值对数据(如 WiFi 配置、用户设置等,非易失)。 |
| otadata | data | ota | 0x0000E000 | 0x00002000 | 8KB | 记录 OTA 升级状态(此方案中未启用 OTA,仅预留)。 |
| app0 | app | ota_0 | 0x00010000 | 0x00F00000 | 15MB | 存储用户程序(编译后的二进制文件),占 Flash 大部分空间。 |
| spiffs | data | spiffs | 0x00F10000 | 0x000F0000 | 960KB | SPIFFS 文件系统分区,用于存放用户文件(如配置文件、日志等)。 |
表2:OTA 双 APP 分区方案(OTA (Large APP),支持远程升级)
适用于需要 OTA 远程升级的场景,分两个程序分区(app0 和 app1),轮流存储当前/新固件。
| 分区名称 | 类型(Type) | 子类型(SubType) | 偏移地址(Hex) | 大小(Hex) | 大小(十进制) | 核心用途 |
|---|---|---|---|---|---|---|
| nvs | data | nvs | 0x00009000 | 0x00005000 | 20KB | 存储键值对数据(同表1)。 |
| otadata | data | ota | 0x0000E000 | 0x00002000 | 8KB | 记录当前启动的程序分区(如优先从 app0 或 app1 启动,升级失败时回滚)。 |
| app0 | app | ota_0 | 0x00010000 | 0x00700000 | 7MB | 主程序分区(当前运行的固件)。 |
| app1 | app | ota_1 | 0x00710000 | 0x00700000 | 7MB | OTA 预留分区(接收远程下载的新固件)。 |
| spiffs | data | spiffs | 0x00E10000 | 0x001F0000 | 2MB | SPIFFS 文件系统分区(空间比单 APP 方案大,适合更多文件存储)。 |
表3:最小 SPIFFS 分区方案(Minimal SPIFFS,优先保证程序空间)
适用于程序较大但文件存储需求少的场景,压缩文件系统空间,给程序分区更多容量。
| 分区名称 | 类型(Type) | 子类型(SubType) | 偏移地址(Hex) | 大小(Hex) | 大小(十进制) | 核心用途 |
|---|---|---|---|---|---|---|
| nvs | data | nvs | 0x00009000 | 0x00005000 | 20KB | 存储键值对数据(同表1)。 |
| otadata | data | ota | 0x0000E000 | 0x00002000 | 8KB | 预留 OTA 状态记录区(未启用 OTA 时闲置)。 |
| app0 | app | ota_0 | 0x00010000 | 0x00F80000 | 15.5MB | 程序分区(容量最大,适合大型程序,如带摄像头+音频的复杂项目)。 |
| spiffs | data | spiffs | 0x00F90000 | 0x00070000 | 448KB | 精简的 SPIFFS 分区,仅能存少量小文件(如配置参数)。 |
各种类型存储的代码使用示例
以下是ESP32-S3各类存储在代码中的具体使用示例,结合实际场景说明其操作方式和核心函数:
1. ROM(Read-Only Memory)
特性:只读、非易失,存储系统固件,用户无法直接修改,只能通过调用系统API间接使用。
代码示例:
voidsetup(){Serial.begin(115200);// 调用ROM中固化的WiFi驱动函数(无需用户实现底层逻辑)WiFi.begin("SSID","PASSWORD");// WiFi驱动代码存于ROMwhile(WiFi.status()!=WL_CONNECTED){delay(500);}// 调用ROM中的加密算法(如CRC校验)uint32_tcrc=crc32_le(0,(constuint8_t*)"test",4);// crc32算法存于ROMSerial.printf("CRC校验结果:%08X\n",crc);}voidloop(){}说明:ROM中的代码由芯片厂商预烧录,用户通过调用WiFi.begin()、crc32_le()等系统函数间接使用,无需关心底层实现。
2. SRAM(Static Random-Access Memory)
特性:易失性、速度最快,存放程序运行时的变量、函数栈、实时数据。
代码示例:
// 全局变量(存于SRAM,断电丢失)intglobal_count=0;floatsensor_data[100];// 数组存于SRAM,用于缓存传感器数据voidsetup(){Serial.begin(115200);}voidloop(){// 局部变量(存于SRAM的函数栈中,函数结束后释放)intlocal_temp=readTemperature();// 假设readTemperature()返回传感器值sensor_data[global_count%100]=local_temp;// 实时缓存到SRAM数组global_count++;delay(100);}// 模拟传感器读取(返回值存于SRAM的临时变量)floatreadTemperature(){return25.5+random(-5,5)*0.1;}说明:代码中定义的全局变量、局部变量、数组默认存于SRAM,适合高频读写的实时数据(如传感器缓存),但断电后数据丢失。
3. RTC SRAM(Real-Time Clock Static RAM)
特性:易失性但低功耗模式下数据保持,用于深度睡眠时保存关键数据。
代码示例(Arduino环境):
#include<esp_sleep.h>// 定义RTC SRAM中存储数据的地址(0-15共16KB,按字节分配)#defineRTC_DATA_ADDR0voidsetup(){Serial.begin(115200);delay(1000);// 从RTC SRAM读取数据(深度睡眠唤醒后)intsleep_count=0;esp_sleep_get_memory(ESP_RTC_DATA_ATTR,RTC_DATA_ADDR,&sleep_count,sizeof(sleep_count));Serial.printf("第%d次从深度睡眠唤醒\n",sleep_count);// 更新计数并写入RTC SRAMsleep_count++;esp_sleep_set_memory(ESP_RTC_DATA_ATTR,RTC_DATA_ADDR,&sleep_count,sizeof(sleep_count));// 配置10秒后深度睡眠唤醒esp_sleep_enable_timer_wakeup(10*1000000);// 10秒(微秒)Serial.println("进入深度睡眠...");esp_deep_sleep_start();}voidloop(){}说明:通过esp_sleep_set_memory()和esp_sleep_get_memory()读写RTC SRAM,数据在深度睡眠中保持(仅需μA级功耗),适合记录睡眠次数、唤醒原因等关键信息。
4. Flash(Flash Memory)
特性:非易失性、速度较慢,用于存储程序、常量、文件系统数据。
(1)存储常量(编译时写入Flash)
// const常量存于Flash(非易失),而非SRAMconstchar*wifi_ssid="MyWiFi";// WiFi名称存于Flashconstchar*welcome_msg="Hello, ESP32-S3!";// 字符串常量存于Flashvoidsetup(){Serial.begin(115200);Serial.println(welcome_msg);// 从Flash读取常量}voidloop(){}(2)通过SPIFFS存储文件(内置Flash分区)
#include<SPIFFS.h>voidsetup(){Serial.begin(115200);// 初始化SPIFFS(Flash的文件系统分区)if(!SPIFFS.begin(true)){Serial.println("SPIFFS初始化失败");return;}// 向Flash写入文件(非易失,断电保留)File file=SPIFFS.open("/config.txt","w");if(file){file.println("threshold=50");// 存储传感器阈值配置file.close();Serial.println("配置文件写入Flash成功");}// 从Flash读取文件File readFile=SPIFFS.open("/config.txt","r");if(readFile){Serial.println("从Flash读取配置:");while(readFile.available()){Serial.write(readFile.read());}readFile.close();}}voidloop(){}(3)外部Flash(TF卡)存储文件
具体参考我的这篇文章:https://youyouhome.blog.csdn.net/article/details/154936956?spm=1011.2415.3001.5331
5. PSRAM(Pseudo Static RAM)
特性:易失性、容量大,用于存放大数据(如高分辨率图像、音频流)。
代码示例:
#include<esp_psram.h>voidsetup(){Serial.begin(115200);// 检测PSRAM是否存在if(!psramFound()){Serial.println("未检测到PSRAM");return;}// 从PSRAM分配800KB内存(存放大图像数据)size_t img_size=800*1024;// 800KBuint8_t*img_buffer=(uint8_t*)ps_malloc(img_size);// PSRAM分配函数if(img_buffer){Serial.printf("成功从PSRAM分配%d字节内存\n",img_size);// 模拟填充图像数据(实际从摄像头采集)for(size_t i=0;i<img_size;i++){img_buffer[i]=i%256;// 填充伪数据}// 使用后释放PSRAM内存free(img_buffer);Serial.println("PSRAM内存已释放");}else{Serial.println("PSRAM内存分配失败");}}voidloop(){}说明:通过ps_malloc()从PSRAM分配内存(区别于malloc()从SRAM分配),适合存储超过SRAM容量的数据(如800KB的图像缓冲区),但断电后数据丢失。
引脚类型
基于你提供的ESP32-S3-WROOM-1/WROOM-1U管脚功能列表,我将把所有管脚的核心功能分类拆解,并逐一说明每种功能的实际作用,同时结合ESP32-S3的典型应用场景(如机器人、物联网、音视频等)解释功能的使用价值。
先明确核心功能缩写的通用含义
在拆解前,先统一解释列表中高频出现的功能缩写,避免重复说明:
| 功能缩写 | 全称/含义 | 核心作用 |
|---|---|---|
| I/O/T | Input/Output/Touch(输入/输出/触摸) | 基础GPIO功能+触摸感应功能,支持数字输入输出、模拟触摸检测 |
| RTC_GPIO | Real-Time Clock GPIO(实时时钟GPIO) | 深度睡眠模式下仍可工作的GPIO,用于低功耗场景的唤醒、数据采集 |
| GPIOx | General Purpose Input/Output(通用输入输出) | 最基础的数字管脚功能,可配置为输入(如读取传感器电平)、输出(如控制继电器) |
| TOUCHx | Touch Sensor(触摸传感器) | 电容式触摸感应,可实现触摸按键、滑动条等交互,替代物理按键 |
| ADC1_CHx/ADC2_CHx | Analog-to-Digital Converter Channel(模数转换通道) | 将模拟信号(如传感器的电压信号)转换为数字信号,实现模拟量采集 |
| UxTXD/UxRXD | UART Transmit/Receive(串口发送/接收) | 串行通信接口,U0为串口0,U1为串口1,用于与外设(如蓝牙模块、GPS)通信 |
| UxRTS/UxCTS | UART RTS/CTS(串口流控) | 串口硬件流控引脚,防止高速传输时数据丢失,提升串口通信稳定性 |
| XTAL_32K_P/N | 32KHz晶振正/负引脚 | 外接32KHz低速晶振,为RTC提供精准时钟,保证睡眠模式下的时间准确性 |
| CLK_OUTx | Clock Output(时钟输出) | 输出ESP32-S3的系统时钟,可为外部外设提供时钟信号 |
| USB_D-/USB_D+ | USB差分数据引脚 | 实现USB通信(如USB转串口、USB数据传输),部分型号支持USB OTG |
| FSPIxx | Fast SPI(高速SPI) | ESP32-S3的高速SPI外设引脚,用于连接Flash、RAM或高速SPI外设(如显示屏) |
| SUBSP Ixx | Sub SPI(副SPI) | 辅助SPI外设引脚,扩展SPI通道,支持更多SPI外设挂载 |
| SPICLK_P/N_DIFF | SPI差分时钟引脚 | 差分SPI时钟,提升高速SPI传输的抗干扰能力 |
| MTCK/MTDO/MTDI/MTMS | JTAG调试接口引脚 | 硬件调试接口,用于程序烧录、在线调试(如ESP32-S3的开发调试) |
可用引脚
买了一个不带CAM的板子是基于ESP32-S3-WROOM,使用引脚参考
| 引脚编号 | 是否可用 | 原因说明 |
|---|---|---|
| GPIO0 | ❌ 不推荐 | 启动模式检测引脚,低电平进入下载模式 |
| GPIO6 | ❌ 不可用 | 控制电源指示灯(LED-RED) |
| GPIO7 | ❌ 不可用 | 控制 RGB 灯亮度(PWM 输出) |
| GPIO17 | ❌ 不可用 | USB-OTG 或 EPAD 通信相关 |
| GPIO18 | ❌ 不可用 | EPAD 模块控制 |
| GPIO19 | ❌ 不可用 | 与 CH450P 通信(USB1 状态) |
| GPIO20 | ❌ 不可用 | 与 CH450P 通信(USB2 状态) |
| GPIO46 | ⚠️ 谨慎使用 | 默认为 USB_JTAG,若启用则不可用 |
| 其他未连接 GPIO(如 GPIO1–5, 8–16, 21–45) | ✅ 可用 | 无硬连接,可自由配置 |
买了一个带CAM的板子是基于ESP32-S3-DEV,使用引脚参考
| 引脚 | 特性 | 推荐用途 |
|---|---|---|
| GPIO5 | 普通 GPIO | 数字输入/输出、PWM |
| GPIO14 | ADC2_CH3, TOUCH14 | 触摸感应、模拟输入 |
| GPIO22 | 普通 GPIO | 中断输入、控制信号 |
| GPIO23 | 普通 GPIO | 输出驱动、LED 控制 |
| GPIO24 | 普通 GPIO | 传感器通信(I2C备用) |
| GPIO25 | 普通 GPIO | 继电器控制 |
| GPIO33 | RTC_GPIO13 | 深度睡眠唤醒源 |
| GPIO41 | MTDI | 调试信号、状态指示 |
| GPIO42 | MTMS | 调试信号、状态指示 |
✅ 共9 个引脚可较安全使用。
| 类别 | 引脚列表 | 使用建议 |
|---|---|---|
| ❌禁止使用 | GPIO8~18, GPIO26~32, GPIO35~37, GPIO38~40, GPIO43~44, GPIO20~21 | 不可用于任何外设连接 |
| ⚠️谨慎使用 | GPIO0, GPIO3, GPIO45, GPIO46, GPIO34 | 可运行时使用,但需保证上电电平正确 |
| ✅推荐使用 | GPIO5, GPIO14, GPIO22~25, GPIO33, GPIO41~42 | 可用于数字 I/O、PWM、中断、触摸等 |
N8R8的ARDUINO配置
官方注意事项
除非使用 JPEG 格式且分辨率为 CIF 或更低,否则该驱动要求必须安装并启用 PSRAM(片外伪静态随机存取存储器)。
使用 YUV 或 RGB 格式会给芯片带来极大负载,因为 PSRAM 的写入速度并非特别快,最终可能导致图像数据丢失——尤其在 WiFi 已启用的情况下,此问题更为明显。若需获取 RGB 数据,建议先捕获 JPEG 格式图像,再通过
fmt2rgb888或fmt2bmp/frame2bmp接口将其转换为 RGB 格式。
帧缓冲区配置说明
使用 1 个帧缓冲区时:
驱动会等待当前帧采集完成(触发 VSYNC 同步信号)后,启动 I2S DMA(集成电路内置音频接口的直接内存访问)传输。帧数据采集完成后,I2S 会停止工作,帧缓冲区将释放给应用程序。这种方式能让系统获得更强的可控性,但帧数据获取耗时更长。使用 2 个及以上帧缓冲区时:
I2S 会工作在连续模式,每帧数据会被推送至应用程序可访问的队列中。这种方式会增加 CPU/内存的负载,但能使帧率提升一倍(注:仅建议搭配 JPEG 格式使用)。
相关配置选项
- Kconfig 配置项
CONFIG_CAMERA_PSRAM_DMA用于在 ESP32-S2 和 ESP32-S3 设备上启用 PSRAM DMA 模式,该选项默认值为false(禁用状态)。 - 可通过运行时接口
esp_camera_set_psram_mode()切换 PSRAM DMA 模式。
为什么选择ESP32-S3-CAM
ESP32-CAM 与 ESP32-S3-CAM 对比分析
以下是两款开发板的核心差异及选型建议,结合硬件性能、功能扩展和实际应用场景:
1. 核心硬件对比
| 参数 | ESP32-CAM | ESP32-S3-CAM |
|---|---|---|
| 芯片 | ESP32(双核 LX6,160/240MHz) | ESP32-S3(双核 LX7,240MHz) |
| SRAM | 520KB | 512KB + 16KB RTC SRAM |
| PSRAM | 4MB | 8MB(部分型号支持 16MB) |
| Flash | 4MB | 16MB(支持 Octal SPI) |
| AI 加速 | 无 | 支持向量指令集(NPU) |
| USB 接口 | 无 | 支持 USB OTG |
关键差异:
- 性能:ESP32-S3 的 LX7 核心性能提升约 20%,适合图像处理、AI 推理等任务。
- 扩展性:ESP32-S3 支持更多外设(如 LCD 屏、DVP 摄像头)和高速存储。
2. 功能与适用场景
ESP32-CAM:
- 优势:成本低(约 50-80 元),适合基础图像采集(如 OV2640 摄像头)。
- 局限:无 AI 加速,内存较小,复杂任务(如人脸识别)需优化代码。
- 典型应用:Wi-Fi 监控、简单图传、QR 码识别。
ESP32-S3-CAM:
- 优势:支持神经网络加速(如人脸检测)、更高分辨率摄像头(OV5640)。
- 局限:价格较高(约 150-200 元),开发环境需更新(如 ESP-IDF 或 Arduino 2.0+)。
- 典型应用:智能安防、边缘计算、多媒体处理。
3. 开发环境与兼容性
ESP32-CAM:
- 支持 Arduino IDE 和 MicroPython,但需手动配置串口下载。
- 社区资源丰富(如
esp32-camera库)。
ESP32-S3-CAM:
- 需安装 ESP32-S3 开发板库(Arduino IDE 或 PlatformIO)。
- 推荐使用 ESP-IDF 以发挥 AI 加速潜力。
4. 选型建议
选 ESP32-CAM 如果:
- 预算有限,仅需基础图像传输功能。
- 项目对实时性要求不高(如静态监控)。
选 ESP32-S3-CAM 如果:
- 需要 AI 功能(如人脸识别、物体检测)。
- 需处理高分辨率图像或连接外设(如 USB 设备)。
5. 扩展资源
- ESP32-CAM 教程:参考低成本监控方案 或 OV2640 摄像头调试。
- ESP32-S3-CAM 案例:查看基于 XIAO ESP32S3 Sense 的相机项目 或 AI 人脸识别部署。
总结:根据项目需求选择——ESP32-CAM 适合入门级应用,ESP32-S3-CAM 适合高性能 AI 场景。
esp32-s3-cam-n16r8的详细介绍
ESP32-S3-CAM N16R8 是一款基于乐鑫 ESP32-S3 芯片的 AIoT 开发板,ESP32-S3-CAM-N16R8 中的 N16R8 是乐鑫(Espressif)对芯片存储配置的命名规范,具体N16
表示该模组内置 16MB Flash 存储,用于存储程序代码、固件及数据文件。R8
表示配备 8MB PSRAM(伪静态随机存取存储器),用于扩展运行内存,提升多任务处理能力(如摄像头图像处理、AI 运算等),板子主要配置如下:
核心处理器
- 双核 Xtensa® 32 位 LX7 处理器,主频 240 MHz,支持单精度浮点运算单元(FPU)。
- 内置 384KB ROM、512KB SRAM 和 16KB RTC SRAM。
存储配置
- 16MB Flash(Quad SPI)和 8MB PSRAM(Octal SPI),支持大容量代码存储和高速数据处理。
无线通信
- Wi-Fi:支持 802.11 b/g/n 协议(2.4 GHz),最高速率 150 Mbps。
- 蓝牙:支持 Bluetooth 5.0(LE 和 Classic),兼容蓝牙 Mesh 协议。
外设接口
- 摄像头接口:支持 OV2640(200 万像素)或 OV5640 摄像头模组,最高分辨率 1600×1200。
- GPIO:提供 39 个可编程引脚,部分支持 ADC/DAC、PWM、I2C、SPI 等功能。
- 其他接口:UART、I2S、电容式触摸传感器。
电源与功耗
- 工作电压 3.0V–3.6V,支持锂电池充电管理。
- 低功耗设计,适用于电池供电设备。
开发环境与兼容性
编程支持
- Arduino IDE:需安装 ESP32 开发板库(版本 2.0.5+),选择
ESP32S3 Dev Module开发板。 - ESP-IDF:官方框架,支持高级功能(如神经网络加速)。
- MicroPython:适合快速原型开发。
- Arduino IDE:需安装 ESP32 开发板库(版本 2.0.5+),选择
开发工具
- 推荐使用 PlatformIO(VSCode 插件)替代 Arduino IDE,支持更灵活的代码管理。
性能评测
AI 与图像处理
- 支持 神经网络运算,适用于图像识别(如人脸检测)和语音处理。
- 实测 OV2640 摄像头可流畅传输 1600×1200 分辨率视频流。
无线稳定性
- Wi-Fi 和蓝牙 5.0 在复杂环境中表现稳定,支持 Mesh 组网。
扩展性
- 兼容 44Pin GPIO 扩展板,可连接更多传感器或屏幕。
常见问题与解决方案
上传代码失败
- 需按住 BOOT 键 进入下载模式,或检查串口驱动。
- 若报错
OSError(22),尝试更换数据线或调整串口权限。
摄像头初始化问题
- 需在代码中定义
#define CAMERA_MODEL_ESP32S3_EYE以启用 PSRAM。
- 需在代码中定义
PSRAM 使用
- 在 PlatformIO 中需配置
board_build.arduino.memory_type = qio_opi以优化性能。
- 在 PlatformIO 中需配置
参考
如何上传代码:https://blog.csdn.net/motoot/article/details/148042594
如何配置ARDUINO IDE:https://zhuanlan.zhihu.com/p/605553967
官方示例代码:https://github.com/espressif/esp32-camera
官方介绍:https://www.espressif.com.cn/zh-hans/sdks/esp-arduino
训练识别:https://mc.dfrobot.com.cn/thread-325065-1-1.html
https://mc.dfrobot.com.cn/thread-324702-1-1.html
https://blog.csdn.net/NIIT0532/article/details/149395887
https://blog.csdn.net/d1973240747/article/details/148044338
手势识别:https://2048ai.net/68215eeda5baf817cf4a5aac.html
ESP-IDE:https://blog.csdn.net/chentuo2000/article/details/133931499