SSID ESP32 softAP non cost
Vorrei poter impostare l'SSID wifi nel setup (), in modo da poterlo personalizzare in base all'indirizzo MAC o qualcosa di simile. (evitando di ESP con lo stesso codice con lo stesso SSID). Tuttavia, poiché richiede una const, non sembra essere possibile o mi manca qualcosa?
Sto usando platformIO se questo è importante ...
Risposte
Un constparametro di una funzione non definisce cosa può essere passato. È, invece, una "promessa" da parte della funzione che non modificherà i dati che gli vengono trasmessi.
In C quando si passa una "stringa" (che in realtà è un array di caratteri) a una funzione, non si passa effettivamente la stringa (come nel contenuto). Devi solo passare un puntatore alla posizione in memoria in cui è archiviata la stringa.
È perfettamente possibile per una funzione quindi apportare modifiche a quella "stringa" passata, che modificherà i dati originali in memoria. Ciò non è realmente desiderabile in molte situazioni.
Quindi flaggando il parametro come constsi dice al compilatore "Da questo momento in poi i dati puntati da questa variabile non devono essere modificati". Tutti i tentativi di scrittura nella memoria utilizzando quella variabile verranno bloccati dal compilatore.
Non c'è alcuna differenza tra, diciamo, a char *e a const char *diverso da come il compilatore tratta i tentativi di scrivere su di loro.
Quando si passa a char *a una funzione che ne attende, const char *il puntatore viene "aggiornato" a una costante in modo che non sia consentito alcun tentativo di modificare i dati.
Il contrario non è consentito però - non puoi (o non dovresti) provare a convertire un const char *in a char *come su alcuni sistemi (sistemi con architettura "Princeton" con un singolo spazio di indirizzi di memoria monolitico) il puntatore potrebbe puntare ai dati memorizzati in flash, e un tentativo di scrivere in questo ovviamente fallirà.
La funzione che stai chiamando per impostare l'SSID promette semplicemente che non tenterà di modificare i dati che gli vengono trasmessi. Non importa se è una costante o meno: entrambe verranno trattate come una costante e non verranno modificate.
La libreria WifiManager potrebbe funzionare per te, ha un captive portal per configurare la tua connessione wifi al volo. Ha alcune opzioni di configurazione per modellarlo secondo la tua volontà se non mi sbaglio, spero che ti serva bene.