Tre esempi in uno sull’utilizzo della Multimedia Board (mmb) con MAX98357A audio amplifier.

Maggiori informazioni sulla connessione della mmb con l’amplificatore le trovi qui

Per iniziare ad utilizzare gli esempi, è necessario clonare in locale il repository . Informazioni dettagliate su come clonare un repository remoto le trovi nell’apposito articolo.

Anche in questo caso in mancanza di una mmb, il progetto può essere riprodotto e/o modificato su una classica breadboard.

La libreria utilizzata è ESP32-audioI2S

3 environments

Ancora una volta utilizziamo gli environments di Platform.IO, ma in questo caso non per passare da un display all’altro come nell’altro esempio, ma per eseguire 3 distinte porzioni di codice in base all’environment selezionato. Per come sono strutturati configurazione e codice sorgente, avremo la possibilità di:

  • Riprodurre un file mp3 da SPIFFS
  • Riprodurre un file mp3 da SD Card
  • Riprodurre una radio in streaming da internet

Ecco il file di configurazione platformio.ini:

[env]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed  = 921600
monitor_filters = esp32_exception_decoder
lib_deps = https://github.com/schreibfaul1/ESP32-audioI2S
build_flags   =
    ; MAX98357A I2S Audio:
    -D VOLUME=21 ; min: 0 - max: 21
    -D I2S_DOUT=12
    -D I2S_BCLK=27
    -D I2S_LRC=23
    
[env:spiffs]
build_flags =
    ${env.build_flags}
    -D MP3_FILE=\"/test.mp3\"
    -D SPIFFS_EXAMPLE

[env:sdcard]
build_flags =
    ${env.build_flags}
    -D SD_CLK=13
    -D SD_MISO=33
    -D SD_MOSI=15
    -D SD_CS=32
    -D MP3_FILE=\"/test.mp3\"
    -D SDCARD_EXAMPLE

[env:streaming]
build_flags =
    ${env.build_flags}
    ; WIFI Settings: 
    -D SID=\"my_wifi_sid\"
    -D PASSWORD=\"my_wifi_pwd\"
    -D STREAMING_URL=\"http://vis.media-ice.musicradio.com/CapitalMP3\"
    -D STREAMING_EXAMPLE

Abbiamo quindi definito:

  • [env]: sezione comune con la parte relativa alla libreria audio, il volume ed i pin dedicati.
  • [env:spiffs]: il file mp3 da riprodurre
  • [env:sdcard]: il file mp3 da riprodurre, i pin della SD Card. NB: è possibile usare la SD Card presente su alcuni display ILI, oppure la scheda dedicata a 6 pin.
  • [env:streaming]: il sid, la password del wifi e l’url dello streaming.

Quanto sopra, ci permette di differenziare il codice sorgente da compilare in base allo stato di SPIFFS_EXAMPLE SDCARD_EXAMPLE STREAMING_EXAMPLE. Vediamolo su uno stralcio di src/main.cpp:

#ifdef STREAMING_EXAMPLE
  #include "WiFi.h"
#endif

#ifdef SPIFFS_EXAMPLE
  #include <SPIFFS.h>
#endif

#ifdef SDCARD_EXAMPLE
  #include "SD.h"
#endif

NB: Platform.IO Ci mette in evidenza qual’è il codice che verrà compilato per l’environment attivo, offuscando quelli inattivi:

Informazioni su come effettuare lo switch degli environments con PlatForm.IO le trovi qui.


Questo genere di condizioni si distinguono per essere eseguite in fase di compilazione (compile-time) e non di esecuzione (runtime) come consuetudine. Il che significa che il codice viene scartato o inserito prima di essere compilato, in modo da ottenere 3 firmware diversi tra loro, nonostante si stia lavorando su un unico progetto.

Qui puoi notare la differenza:

Linking .pio\build\sdcard\firmware.elf
Retrieving maximum program size .pio\build\sdcard\firmware.elf
Checking size .pio\build\sdcard\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   8.9% (used 29204 bytes from 327680 bytes)
Flash: [======    ]  56.0% (used 733436 bytes from 1310720 bytes)

Linking .pio\build\spiffs\firmware.elf
Retrieving maximum program size .pio\build\spiffs\firmware.elf
Checking size .pio\build\spiffs\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [=         ]   8.9% (used 29044 bytes from 327680 bytes)
Flash: [======    ]  55.8% (used 731740 bytes from 1310720 bytes)

Linking .pio\build\streaming\firmware.elf
Retrieving maximum program size .pio\build\streaming\firmware.elf
Checking size .pio\build\streaming\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM:   [==        ]  15.3% (used 50136 bytes from 327680 bytes)
Flash: [========  ]  79.0% (used 1034907 bytes from 1310720 bytes)

PS: Affinchè l’env spiffs funzioni correttamente, è necessario fare l’upload del file data/test.mp3 nella partizione SPIFFS dell’ESP32. Trovi tutte le informazioni nell’articolo dedicato a SPIFFS.

L’esempio è disponibile nel repository . Informazioni dettagliate su come clonare un repository remoto le trovi nell’apposito articolo.

Web installer

Per questo progetto sono disponibili anche alcuni web installers nell’area dedicata. E’ possibile installare il firmware direttamente dalla pagina web.