Uno sguardo agli environments di Platform.IO
Quello degli environments probabilmente è un concetto nuovo per chi proviene da Arduino IDE. Vi è mai capitato di dover riscrivere una parte del codice per rendere il vostro progetto compatibile con un altro controller o un’altra periferica? Che fare se ad esempio volessimo scrivere un software compatibile con display ILI9488 da 3.5” ed ILI9341 da 2.8” che utilizzano drivers diversi tra loro?
La configurazione degli environments su platformio.ini ci permette proprio questo, e con le dovute accortezze è possibile compilare il progetto per diverse configurazioni hardware/software, senza dover fare ogni volta modifiche al codice.
Sezioni
Sul file platformio.ini possiamo avere dunque più di un environment, che vengono dichiarati in sezioni [env:NAME]. Opzionalmente, possiamo anche dichiarare una sezione comune a tutti gli environment per non ripetere le stesse configurazioni più volte, semplicemente con la sezione [env].
Vediamo in dettaglio l’esempio appena citato dei due display, che hanno molte cose in comune, ma ovviamente il driver è diverso, e magari vogliamo anche utilizzare una rotazione diversa in base al modello. Andiamo a definire la parte in comune nella sezione [env] ed una sezione specifica per ogni modello di display:
[env]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
monitor_filters = esp32_exception_decoder
lib_deps = TFT_eSPI
build_flags =
-D USER_SETUP_LOADED=1
-D TFT_MISO=33
-D TFT_MOSI=15
-D TFT_SCLK=13
-D TFT_DC=2
-D TFT_CS=14
-D TFT_RST=-1
-D TFT_BL=5
-D TFT_BRIGHTNESS=255
-D LOAD_GLCD=1
-D LOAD_FONT2=1
-D LOAD_FONT4=1
-D LOAD_FONT6=1
-D LOAD_FONT7=1
-D LOAD_FONT8=1
-D LOAD_GFXFF=1
-D SMOOTH_FONT=1
-D SPI_FREQUENCY=40000000
[env:ILI9341]
build_flags =
${env.build_flags}
-D ILI9341_DRIVER=1
-D MMB_ROTATION=1
[env:ILI9488]
build_flags =
${env.build_flags}
-D ILI9488_DRIVER=1
-D MMB_ROTATION=3
Figo vero?
Switch degli environments
Ma come facciamo a dire a Platform.IO quale dei due display abbiamo collegato alla board che stiamo flashando? Qui entra in gioco lo switch degli environments, che troviamo nella status bar in basso del nostro ambiente di sviluppo:
Cliccando sul pulsante dello switch, che ci dice anche qual’è l’environmente attivo (ed il nome del progetto):
si aprirà in alto un menù di selezione:
A questo punto, possiamo fare la build e flashare il firmware specifico per il monitor selezionato, senza dover modificare una sola riga di codice!!
Nel laboratorio trovi degli esempi concreti di multi-environments da clonare sul tuo pc:
- Display & TFT_eSPI: esempi per “switchare” i display ILI9341 - ILI9488 - ST7789 - ST7735
- Simple Audio player 3 in 1: esempio di multi-environment che permette di eseguire 3 distinte porzioni di codice (SD Card player - SPIFFS player - internet streaming player)