Come abbiamo visto nei precedenti tutorials, la configurazione di diversi aspetti del framework esp-idf avviene tramite un menu di configurazione:
E’ possibile utilizzare lo stesso menu per configurare opzioni/parametri relativi al programama che stiamo sviluppando: nel tutorial di oggi vedremo come fare!
Kconfig
Il menu di configurazione del framework viene configurato tramite alcuni files di testo. La sintassi di questi files è mutuata dalla configurazione del kernel Linux e prende il nome di kconfig language.
Per poter aggiungere opzioni relative al nostro programma, è necessario creare un file chiamato Kconfig.projbuild nella stessa cartella che contiene il sorgente del programma:
Il contenuto di questo file è raggruppato all’interno delle voci:
menu "Nome menu" [...] endmenu
che indicano il nome della voce di menu principale sotto la quale saranno ragruppati tutti i parametri che andremo a definire all’interno. Se ad esempio scriviamo
menu "Custom configuration"
avremo:
I parametri di configurazione più semplici hanno la seguente struttura:
config <nomeparametro> <tipo parametro> <prompt> range min max default <valore di default> help <spiegazione>
Il tipo parametro può assumere i seguenti valori:
- string, per parametri di tipo testo
- int, per parametri a valori interi
- hex, per parametri espressi in esadecimale
- bool, per parametri di tipo binario
Se ad esempio vogliamo configurare la porta TCP sulla quale è in ascolto un server, la definizione del relativo parametro può essere:
config TcpPort int "Server TCP port" range 1 65535 default 80 help Enter the TCP port the server is listening on
E’ inoltre possibile realizzare voci di menu a scelta multipla:
choice config <choice_1> bool <prompt> config <choice_2> bool <prompt> ... default <default choice>
Una volta configurati i diversi parametri, i loro valori sono salvati nel file sdkconfig all’interno della cartella principale del progetto:
Il nome delle costanti corrispondenti ai diversi parametri è CONFIG_<nome parametro>. Riprendendo l’esempio sopra, la costante relativa alla porta TCP da utilizzare nel nostro programma avrà nome CONFIG_TcpPort.
Nel mio repository Github trovate un esempio completo. Il file Kconfig.projbuild definisce alcuni parametri per illustrare i diversi tipi possibili:
Una volta configurati, i parametri vengono scritti nel file sdkconfig:
ed eseguendo il programma, visualizzati anche via seriale:
Conclusioni
La possibilità di estendere l’uso del menu di configurazione del framework a parametri custom del nostro programma consente di configurare tutti gli aspetti di un progetto in maniera comoda e unificata. Nell’esempio precedente i parametri relativi alla rete wifi (SSID e password) erano hardcoded all’interno del sorgente del programma: una scelta migliore è ora esternalizzare tali parametri inserendoli proprio nel menu di configurazione… provate!
Salve!
Innanzitutto complimenti per il tutorial!
Il menu di configurazione del mio esp32 non presenta la voce “custom configuration”.
Si presenta come la prima foto che compare in questa pagina.
Come mai?
Mi servirebbe proprio una funzionalità per assegnare dei parametri non hardcoded e non so come fare.
Ciao Susanna, hai creato il file Kconfig.projbuild con i parametri che vuoi configurare tramite menuconfig? Verifica che sia nel path corretto…
Grazie!
Ho notato che l’intero sistema di sviluppo Espressif è piuttosto “frammentato”, ed è difficile trovare le informazioni che servono velocemente.
Con questa tua pagina mi hai risolto un problema velocemente!
Il guaio è che nel progetto che sto sistemando ci sono due Kconfig.projbuild, e vengono entrambe aggiunti nel menuconfig! Sto cercando di rimendiare…