Ошибка при попытке воспроизведения звука через ESP8266 с использованием библиотеки «ESP8266Audio»

esp8266 audio esp speaker

Я пытаюсь использовать esp8266 для воспроизведения аудиофайла .mp3 через подключенный динамик с помощью библиотеки «ESP8266Audio».

Я проверил правильность настройки оборудования (например, смог воспроизвести звук через динамик, используя простую функцию tone()). Я также проверил, что образ файловой системы корректно создан и загружен, поскольку смог составить список файлов в каталоге и прочитать данные из простых текстовых файлов, которые я там разместил.

Почему мой код не может обработать/воспроизвести аудиофайл?

Вот мой код:

    #include <Arduino.h>
    #include <LittleFS.h>
    #include <AudioFileSourceLittleFS.h>
    #include <AudioGeneratorMP3.h>
    #include <AudioOutputI2SNoDAC.h>
    
    AudioGeneratorMP3 *mp3;
    AudioFileSourceLittleFS *file;
    AudioOutputI2SNoDAC *out;
    
    void setup() {
        Serial.begin(9600);
    
        if (!LittleFS.begin()) {
            Serial.println("LittleFS initialization failed!");
            return;
        } else {
            Serial.println("LittleFS initialisation successful");
        }
    
        file = new AudioFileSourceLittleFS("/feet.mp3");
        if (!file->isOpen()) {
            Serial.println("Failed to open file.");
            return;
        } else {
            Serial.println("File opened successfully.");
        }
    
        out = new AudioOutputI2SNoDAC();
        out->SetOversampling(200);
        out->SetGain(2.0);
    
        mp3 = new AudioGeneratorMP3();
        if (mp3->begin(file, out)) {
            Serial.println("MP3 begin successful");
        } else {
            Serial.println("MP3 begin failed");
        }
    }
    
    void loop() {
    
        if (mp3->isRunning()) {
            if (!mp3->loop()) {
                Serial.println("MP3 loop failed");
                mp3->stop();
            } else {
                Serial.print("Free heap during loop: ");
                Serial.println(ESP.getFreeHeap());
            }
        } else {
            Serial.println("MP3 done");
            delay(1000);
        }
    }

Результаты декодера исключений:

    Exception (3):
    epc1=0x402046ae epc2=0x00000000 epc3=0x00000000 excvaddr=0x40249b36 depc=0x00000000
    
    LoadStoreError: Processor internal physical address or data error during load or store       
      epc1=0x402046ae in mad_layer_III at ??:?
      excvaddr=0x40249b36 in system_get_sdk_version at ??:?
    
   >>>stack>>>
    
    ctx: cont
    sp: 3ffffb40 end: 3fffffd0 offset: 0150
    3ffffc90:  00000000 00000000 00000000 006f0000
    3ffffca0:  00000000 00000000 0000f884 00000000
    3ffffcb0:  00000000 00000000 00000000 00000000
    3ffffcc0:  00000000 00000030 00000008 3ffe8368
    3ffffcd0:  4025dd3f 3ffe8368 40219f3c 00000004
    3ffffce0:  00000000 0000000a 3ffffd53 00000000
    3ffffcf0:  000000b0 00000000 3ffffd53 4025e128  
    3ffffd00:  4025e129 3ffe8368 3ffffdc0 02b2a450  
    3ffffd10:  009200c0 01000000 00ff050f 24070000  
    3ffffd20:  00000004 00000039 fe302064 3ffef64c
    3ffffd30:  00100408 3ffef9c0 00100408 00000000  
    3ffffd40:  00000000 00000000 0000001f 341002a8  
    3ffffd50:  00353930 400042db 3fffc228 40105af5  
    3ffffd60:  40004b31 3ffefa14 00000000 003435c0  
    3ffffd70:  3ffffe90 3ffffe80 00000014 4000050c
    3ffffd80:  3ffffe90 ffffff9d ffffff9d ffffff9d
    3ffffd90:  ffffff9d ffffff9d ffffff9d ffffff9d  
    3ffffda0:  ffffff9d ffffff9d ffffff9d ffffff9d  
    3ffffdb0:  ffffff9d ffffff9d ffffff9d ffffff9d  
    3ffffdc0:  ffffff9d ffffff9d ffffff9d ffffff9d
    3ffffdd0:  ffffff9d ffffff9d ffffff9d 3ffe85e0  
    3ffffde0:  00000080 0000270f 00000000 00000030  
    3ffffdf0:  402079a8 00000030 00000008 ffffffff  
    3ffffe00:  402079a8 3fff12eb 3ffefa30 00000001  
    3ffffe10:  40100175 00000096 3ffefa30 00000001
    3ffffe20:  4000050c 40100138 3fffc270 4000050c  
    3ffffe30:  40100175 00000080 3fff0374 402174cd  
    3ffffe40:  3ffffe90 3ffffe80 0000000c 4000050c  
    3ffffe50:  4020b8f8 00000030 00000008 ffffffff  
    3ffffe60:  3fff0d04 00080010 40252660 40217540
    3ffffe70:  3fff536c 3fff5c6c 3fff0d01 00080010
    3ffffe80:  ffffffe8 14000000 04000000 3ffffc90  
    3ffffe90:  40252664 3ffffd88 00000000 00000001  
    3ffffea0:  00000000 3fff1d3c 00000002 3ffffc90
    3ffffeb0:  00000000 00000000 3ffffe68 3fff536c
    3ffffec0:  00000000 00000000 000002b2 3fff12f4
    3ffffed0:  3fff1cf4 74612027 00000001 40251be4  
    3ffffee0:  74657366 3ffffc90 00000054 00000000  
    3ffffef0:  000000ab 3fff1324 00000057 00000057  
    3fffff00:  00000054 000000ab 00000004 3fff5c6c  
    3fffff10:  3fff1d3c 00000002 3fffff6c 3fff12f4
    3fffff20:  00000001 3fff1d3c 3fff1310 4020158f  
    3fffff30:  3fff12ec 00000000 6f726863 617a696e  
    3fffff40:  3fff12ec 00000001 3fff0374 00000000  
    3fffff50:  3fff1cf4 3fff12f4 3fff1d3c 402016b8  
    3fffff60:  0000270f 3fff0374 00000000 4020db7c
    3fffff70:  0000270f 3fff0384 3fff0374 4020d004  
    3fffff80:  0000270f 3fff0384 3fff0374 4020d161  
    3fffff90:  4020f19c 3ffe8b88 3ffee8fc 3ffeea6c  
    3fffffa0:  3fffdad0 3ffee8bc 3ffee8fc 4020c34f  
    3fffffb0:  3fffdad0 00000000 3ffeea40 402107bc
    3fffffc0:  feefeffe feefeffe 3fffdab0 40100f11  
    <<<stack<<<
    
    0x4025dd3f in etharp_output at ??:?
    0x40219f3c in __ssputs_r at /workdir/repo/newlib/newlib/libc/stdio/nano-vfprintf.c:179       
    0x4025e128 in etharp_output at ??:?
    0x4025e129 in etharp_output at ??:?
    0x40105af5 in ets_timer_disarm at ??:?
    0x402079a8 in lfs_bd_read at lfs.c:?
    0x402079a8 in lfs_bd_read at lfs.c:?
    0x40100175 in i2s_slc_isr at core_esp8266_i2s.cpp:?
    0x40100138 in i2s_slc_isr at core_esp8266_i2s.cpp:?
    0x40100175 in i2s_slc_isr at core_esp8266_i2s.cpp:?
    0x402174cd in vsnprintf at /workdir/repo/newlib/newlib/libc/stdio/vsnprintf.c:41
    0x4020b8f8 in lfs_file_read at ??:?
    0x40252660 in system_get_sdk_version at ??:?
    0x40217540 in snprintf_P at /workdir/repo/newlib/newlib/libc/sys/xtensa/stdio_pgmspace.c:33  
    0x40252664 in system_get_sdk_version at ??:?
    0x40251be4 in system_get_sdk_version at ??:?
    0x4020158f in mad_header_decode at ??:?
    0x402016b8 in mad_frame_decode at ??:?
    0x4020db7c in littlefs_impl::LittleFSFileImpl::read(unsigned char*, unsigned int) at ??:?    
    0x4020d004 in AudioGeneratorMP3::DecodeNextFrame() at ??:?
    0x4020d161 in AudioGeneratorMP3::loop() at ??:?
    0x4020f19c in HardwareSerial::write(unsigned char const*, unsigned int) at ??:?
    0x4020c34f in loop at ??:?
    0x402107bc in loop_wrapper() at core_esp8266_main.cpp:?
    0x40100f11 in cont_wrapper at ??:?

Как новичок в этом мире, я буду очень благодарен за любую помощь!

, 👍3

Обсуждение

Какие сообщения появлялись на консоли до трассировки стека?, @6v6gt


1 ответ


0

Я обнаружил, что источником моих проблем было то, что самая последняя версия библиотеки ESP8266Audio (1.9.9) несовместима с моей настройкой. Возврат к предыдущей версии библиотеки (1.9.7)

,