【ESP32-S3-CAM】HELLO WORLD

发布时间:2026/6/13 16:56:20

【ESP32-S3-CAM】HELLO WORLD ESP32-S3-CAM前置知识存储存储类型FLASH分区介绍各种类型存储的代码使用示例1. ROMRead-Only Memory2. SRAMStatic Random-Access Memory3. RTC SRAMReal-Time Clock Static RAM4. FlashFlash Memory1存储常量编译时写入Flash2通过SPIFFS存储文件内置Flash分区3外部FlashTF卡存储文件5. PSRAMPseudo Static RAM引脚类型先明确核心功能缩写的通用含义可用引脚N8R8的ARDUINO配置官方注意事项帧缓冲区配置说明相关配置选项为什么选择ESP32-S3-CAMESP32-CAM 与 ESP32-S3-CAM 对比分析1. 核心硬件对比2. 功能与适用场景3. 开发环境与兼容性4. 选型建议5. 扩展资源esp32-s3-cam-n16r8的详细介绍开发环境与兼容性性能评测常见问题与解决方案参考存储存储类型类型英文全称易失性速度容量ESP32-S3主要用途详细描述ROMRead-Only Memory否非易失性快384 KB系统固件芯片出厂时固化的只读存储器用户无法修改。主要存储ESP32-S3的底层启动程序Bootloader、硬件外设WiFi、蓝牙、GPIO等的驱动程序以及基础算法库如加密、校验逻辑。是芯片上电后首次运行的“基础系统”确保硬件能正常初始化并加载用户程序。SRAMStatic Random-Access Memory是易失性最快512 KB程序运行内存高速临时存储器CPU可直接访问纳秒级延迟。用于存放程序运行时的实时数据包括全局变量、局部变量、函数调用栈如函数返回地址、高频更新的缓冲区如传感器每秒多次采集的温湿度数据、串口接收的临时字节流。是程序“实时运算的工作台”速度直接影响代码执行效率。RTC SRAMReal-Time Clock Static RAM是但低功耗模式下由RTC电源域供电数据可保持中16 KB低功耗模式数据保持独立于普通SRAM的低功耗存储器仅在深度睡眠时由RTC模块供电功耗低至μA级。用于保存低功耗状态下的关键数据如睡眠前的系统时间、任务进度标记、唤醒触发源定时器/外部中断等。例如小车深度睡眠前存储当前位置坐标唤醒后无需重新定位直接从RTC SRAM读取。FlashFlash Memory否非易失性慢16 MB程序存储、常量数据可擦写的非易失存储器通过SPI接口访问。主要用于存储用户编译后的程序二进制文件划分文件系统如SPIFFS/FATFS存放持久化数据配置文件、日志、图像、音频等预留分区用于OTA远程升级。例如ESP32-S3-CAM拍摄的照片保存到Flash断电后不丢失小车的WiFi配置参数写入Flash重启后自动加载连接。PSRAMPseudo Static Random-Access Memory是易失性中8 MB外部扩展大容量数据缓存外部扩展的临时存储器通过SPI接口与芯片连接弥补内置SRAM容量不足。用于存放大容量临时数据如高分辨率图像原始数据OV3660的1200万像素图像、音频流缓冲区5分钟PCM音频、复杂算法如人脸识别的特征矩阵等。例如ESP32-S3-CAM处理高清图像时先将数据暂存PSRAM再压缩避免内置SRAM512KB容量不足。【需要在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大小十进制核心用途nvsdatanvs0x000090000x0000500020KB存储键值对数据如 WiFi 配置、用户设置等非易失。otadatadataota0x0000E0000x000020008KB记录 OTA 升级状态此方案中未启用 OTA仅预留。app0appota_00x000100000x00F0000015MB存储用户程序编译后的二进制文件占 Flash 大部分空间。spiffsdataspiffs0x00F100000x000F0000960KBSPIFFS 文件系统分区用于存放用户文件如配置文件、日志等。表2OTA 双 APP 分区方案OTA (Large APP)支持远程升级适用于需要 OTA 远程升级的场景分两个程序分区app0 和 app1轮流存储当前/新固件。分区名称类型Type子类型SubType偏移地址Hex大小Hex大小十进制核心用途nvsdatanvs0x000090000x0000500020KB存储键值对数据同表1。otadatadataota0x0000E0000x000020008KB记录当前启动的程序分区如优先从 app0 或 app1 启动升级失败时回滚。app0appota_00x000100000x007000007MB主程序分区当前运行的固件。app1appota_10x007100000x007000007MBOTA 预留分区接收远程下载的新固件。spiffsdataspiffs0x00E100000x001F00002MBSPIFFS 文件系统分区空间比单 APP 方案大适合更多文件存储。表3最小 SPIFFS 分区方案Minimal SPIFFS优先保证程序空间适用于程序较大但文件存储需求少的场景压缩文件系统空间给程序分区更多容量。分区名称类型Type子类型SubType偏移地址Hex大小Hex大小十进制核心用途nvsdatanvs0x000090000x0000500020KB存储键值对数据同表1。otadatadataota0x0000E0000x000020008KB预留 OTA 状态记录区未启用 OTA 时闲置。app0appota_00x000100000x00F8000015.5MB程序分区容量最大适合大型程序如带摄像头音频的复杂项目。spiffsdataspiffs0x00F900000x00070000448KB精简的 SPIFFS 分区仅能存少量小文件如配置参数。各种类型存储的代码使用示例以下是ESP32-S3各类存储在代码中的具体使用示例结合实际场景说明其操作方式和核心函数1. ROMRead-Only Memory特性只读、非易失存储系统固件用户无法直接修改只能通过调用系统API间接使用。代码示例voidsetup(){Serial.begin(115200);// 调用ROM中固化的WiFi驱动函数无需用户实现底层逻辑WiFi.begin(SSID,PASSWORD);// WiFi驱动代码存于ROMwhile(WiFi.status()!WL_CONNECTED){delay(500);}// 调用ROM中的加密算法如CRC校验uint32_tcrccrc32_le(0,(constuint8_t*)test,4);// crc32算法存于ROMSerial.printf(CRC校验结果%08X\n,crc);}voidloop(){}说明ROM中的代码由芯片厂商预烧录用户通过调用WiFi.begin()、crc32_le()等系统函数间接使用无需关心底层实现。2. SRAMStatic Random-Access Memory特性易失性、速度最快存放程序运行时的变量、函数栈、实时数据。代码示例// 全局变量存于SRAM断电丢失intglobal_count0;floatsensor_data[100];// 数组存于SRAM用于缓存传感器数据voidsetup(){Serial.begin(115200);}voidloop(){// 局部变量存于SRAM的函数栈中函数结束后释放intlocal_tempreadTemperature();// 假设readTemperature()返回传感器值sensor_data[global_count%100]local_temp;// 实时缓存到SRAM数组global_count;delay(100);}// 模拟传感器读取返回值存于SRAM的临时变量floatreadTemperature(){return25.5random(-5,5)*0.1;}说明代码中定义的全局变量、局部变量、数组默认存于SRAM适合高频读写的实时数据如传感器缓存但断电后数据丢失。3. RTC SRAMReal-Time Clock Static RAM特性易失性但低功耗模式下数据保持用于深度睡眠时保存关键数据。代码示例Arduino环境#includeesp_sleep.h// 定义RTC SRAM中存储数据的地址0-15共16KB按字节分配#defineRTC_DATA_ADDR0voidsetup(){Serial.begin(115200);delay(1000);// 从RTC SRAM读取数据深度睡眠唤醒后intsleep_count0;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. FlashFlash Memory特性非易失性、速度较慢用于存储程序、常量、文件系统数据。1存储常量编译时写入Flash// const常量存于Flash非易失而非SRAMconstchar*wifi_ssidMyWiFi;// WiFi名称存于Flashconstchar*welcome_msgHello, ESP32-S3!;// 字符串常量存于Flashvoidsetup(){Serial.begin(115200);Serial.println(welcome_msg);// 从Flash读取常量}voidloop(){}2通过SPIFFS存储文件内置Flash分区#includeSPIFFS.hvoidsetup(){Serial.begin(115200);// 初始化SPIFFSFlash的文件系统分区if(!SPIFFS.begin(true)){Serial.println(SPIFFS初始化失败);return;}// 向Flash写入文件非易失断电保留File fileSPIFFS.open(/config.txt,w);if(file){file.println(threshold50);// 存储传感器阈值配置file.close();Serial.println(配置文件写入Flash成功);}// 从Flash读取文件File readFileSPIFFS.open(/config.txt,r);if(readFile){Serial.println(从Flash读取配置);while(readFile.available()){Serial.write(readFile.read());}readFile.close();}}voidloop(){}3外部FlashTF卡存储文件具体参考我的这篇文章https://youyouhome.blog.csdn.net/article/details/154936956?spm1011.2415.3001.53315. PSRAMPseudo Static RAM特性易失性、容量大用于存放大数据如高分辨率图像、音频流。代码示例#includeesp_psram.hvoidsetup(){Serial.begin(115200);// 检测PSRAM是否存在if(!psramFound()){Serial.println(未检测到PSRAM);return;}// 从PSRAM分配800KB内存存放大图像数据size_t img_size800*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 i0;iimg_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/TInput/Output/Touch输入/输出/触摸基础GPIO功能触摸感应功能支持数字输入输出、模拟触摸检测RTC_GPIOReal-Time Clock GPIO实时时钟GPIO深度睡眠模式下仍可工作的GPIO用于低功耗场景的唤醒、数据采集GPIOxGeneral Purpose Input/Output通用输入输出最基础的数字管脚功能可配置为输入如读取传感器电平、输出如控制继电器TOUCHxTouch Sensor触摸传感器电容式触摸感应可实现触摸按键、滑动条等交互替代物理按键ADC1_CHx/ADC2_CHxAnalog-to-Digital Converter Channel模数转换通道将模拟信号如传感器的电压信号转换为数字信号实现模拟量采集UxTXD/UxRXDUART Transmit/Receive串口发送/接收串行通信接口U0为串口0U1为串口1用于与外设如蓝牙模块、GPS通信UxRTS/UxCTSUART RTS/CTS串口流控串口硬件流控引脚防止高速传输时数据丢失提升串口通信稳定性XTAL_32K_P/N32KHz晶振正/负引脚外接32KHz低速晶振为RTC提供精准时钟保证睡眠模式下的时间准确性CLK_OUTxClock Output时钟输出输出ESP32-S3的系统时钟可为外部外设提供时钟信号USB_D-/USB_DUSB差分数据引脚实现USB通信如USB转串口、USB数据传输部分型号支持USB OTGFSPIxxFast SPI高速SPIESP32-S3的高速SPI外设引脚用于连接Flash、RAM或高速SPI外设如显示屏SUBSP IxxSub SPI副SPI辅助SPI外设引脚扩展SPI通道支持更多SPI外设挂载SPICLK_P/N_DIFFSPI差分时钟引脚差分SPI时钟提升高速SPI传输的抗干扰能力MTCK/MTDO/MTDI/MTMSJTAG调试接口引脚硬件调试接口用于程序烧录、在线调试如ESP32-S3的开发调试可用引脚买了一个不带CAM的板子是基于ESP32-S3-WROOM使用引脚参考引脚编号是否可用原因说明GPIO0❌ 不推荐启动模式检测引脚低电平进入下载模式GPIO6❌ 不可用控制电源指示灯LED-REDGPIO7❌ 不可用控制 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数字输入/输出、PWMGPIO14ADC2_CH3, TOUCH14触摸感应、模拟输入GPIO22普通 GPIO中断输入、控制信号GPIO23普通 GPIO输出驱动、LED 控制GPIO24普通 GPIO传感器通信I2C备用GPIO25普通 GPIO继电器控制GPIO33RTC_GPIO13深度睡眠唤醒源GPIO41MTDI调试信号、状态指示GPIO42MTMS调试信号、状态指示✅ 共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-CAMESP32-CAM 与 ESP32-S3-CAM 对比分析以下是两款开发板的核心差异及选型建议结合硬件性能、功能扩展和实际应用场景1. 核心硬件对比参数ESP32-CAMESP32-S3-CAM芯片ESP32双核 LX6160/240MHzESP32-S3双核 LX7240MHzSRAM520KB512KB 16KB RTC SRAMPSRAM4MB8MB部分型号支持 16MBFlash4MB16MB支持 Octal SPIAI 加速无支持向量指令集NPUUSB 接口无支持 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 FlashQuad SPI和 8MB PSRAMOctal SPI支持大容量代码存储和高速数据处理。无线通信Wi-Fi支持 802.11 b/g/n 协议2.4 GHz最高速率 150 Mbps。蓝牙支持 Bluetooth 5.0LE 和 Classic兼容蓝牙 Mesh 协议。外设接口摄像头接口支持 OV2640200 万像素或 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适合快速原型开发。开发工具推荐使用 PlatformIOVSCode 插件替代 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以优化性能。参考如何上传代码https://blog.csdn.net/motoot/article/details/148042594如何配置ARDUINO IDEhttps://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.htmlhttps://mc.dfrobot.com.cn/thread-324702-1-1.htmlhttps://blog.csdn.net/NIIT0532/article/details/149395887https://blog.csdn.net/d1973240747/article/details/148044338手势识别https://2048ai.net/68215eeda5baf817cf4a5aac.htmlESP-IDEhttps://blog.csdn.net/chentuo2000/article/details/133931499

相关新闻