Arduino Nano ESP32使用ESP32-audioI2S库编译报错:找不到span文件
问题:Arduino Nano ESP32使用ESP32-audioI2S库编译失败
- 使用官方Arduino Nano ESP32板型编译时,报错找不到
<span>文件,错误指向库中的psram_unique_ptr.hpp文件 - 切换到板管理器中的Espressif ESP32板型后,编译可通过,但程序体积超出板载空间,验证失败
测试代码
#include <ESP_I2S.h> #include <Audio.h> #include <FS.h> #include <SD.h> #include <SPI.h> //create audio object Audio audio; //defining pins for the SD card interface int SD_CS = 10; int SPI_CLK = 13; int SPI_MOSI = 11; int SPI_MISO = 12; //defining pins for 98357A MAX connection interface int I2S_LRC = 8; int I2S_BLCK = 7; int I2S_DATA = 9; void setup() { pinMode(SD_CS, OUTPUT); digitalWrite(SD_CS, HIGH); SD.begin(SD_CS); audio.setPinout(I2S_BLCK, I2S_LRC, I2S_DATA); audio.setVolume(15); audio.connecttoFS(SD,"/14 bonus.mp3"); } void loop() { // put your main code here, to run repeatedly: audio.loop(); }
对应报错信息
选择Espressif Nano32板型时的报错
Global variables use 60028 bytes (18%) of dynamic memory, leaving 267652 bytes for local variables. Maximum is 327680 bytes. Sketch too big; see https://support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing it. text section exceeds available space in board Error compiling for board Nano32.
选择Arduino Nano ESP32板型时的报错
In file included from C:\Users\Amir\Documents\Arduino\libraries\ESP32-audioI2S-master\src/audiolib_structs.hpp:2, from C:\Users\Amir\Documents\Arduino\libraries\ESP32-audioI2S-master\src/Audio.h:8, from C:\Users\Amir\Documents\Arduino\Senior_design_testing\Senior_design_testing.ino:3: C:\Users\Amir\Documents\Arduino\libraries\ESP32-audioI2S-master\src/psram_unique_ptr.hpp:8:10: fatal error: span: No such file or directory #include <span> ^~~~~~ compilation terminated. Using library I2S at version 1.0 in folder: C:\Users\Amir\AppData\Local\Arduino15\packages\arduino\hardware\esp32\2.0.18-arduino.5\libraries\I2S Using library ESP32-audioI2S-master at version 3.4.6 in folder: C:\Users\Amir\Documents\Arduino\libraries\ESP32-audioI2S-master exit status 1 Error compiling for board Arduino Nano ESP32.
解决方案建议
解决<span>文件缺失问题
- 升级ESP32核心版本:当前使用的核心版本(2.0.18-arduino.5)对C17标准支持不足,
<span>是C17的标准库组件。在Arduino IDE的板管理器中,找到ESP32核心并升级到最新稳定版。 - 强制开启C++17支持:如果暂时不想升级核心,可在项目目录下新建
platform.local.txt文件,添加内容:compiler.cpp.extra_flags=-std=c++17,强制编译器使用C++17标准。 - 降级ESP32-audioI2S库:尝试使用3.4.0版本之前的库,旧版本未依赖C++17的
<span>组件,可避免该错误。
解决程序体积过大问题
- 开启编译优化:在Arduino IDE的「工具」菜单中,找到「编译优化级别」,选择「Os(优化空间)」,减少编译后的程序体积。
- 裁剪库功能:修改ESP32-audioI2S库的配置文件,关闭不需要的音频格式支持(如FLAC、WAV等,仅保留MP3),减少冗余代码。
- 移除重复库依赖:代码中包含的
<ESP_I2S.h>与ESP32-audioI2S库的I2S功能重复,尝试删除该头文件引用,避免重复编译。
内容的提问来源于stack exchange,提问作者AmiCaz
相关产品推荐
相关产品推荐

