Libreria Bluetooth molto pesante su ESP32

Ciao,
mi sono trovato a usare il BT su una esp32 dove avevo già un programma, e non ci sono entrato con la memoria... Ho preso un semplice esempio di prova della libreria BT e da solo una volta compilato occupa l'86% di memoria... Libreria ufficiale BluetoothSerial.

Ci sono altre librerie per un utilizzo più sobrio? :smiley:

Grazie

Quando usi una delle funzionalità BLE, oltre al tuo sketch è necessario compilare tutto il resto di codice per la gestione della comunicazione Bluetooth, servizi GATT, sicurezza e protocolli vari.
Se ci aggiungi anche tutto quello che è necessario per il funzionamento del WiFi ci vuole poco a superare lo spazio in flash assegnato il programma compilato.

La soluzione più immediata è usare uno schema di partizionamento che prevede più "program space" oppure definirne uno custom.

Inoltre, il core ESP32 di default usa lo stack "Bluedroid" che impegna molte risorse. Si potrebbe usare in alternativa lo stack NimBLE che occupa meno risorse sia in termini di SRAM che di spazio programma.

Questo significa però che devi abbandonare la libreria in questione perché è pensata per usare le API bluedroid.
Infine, secondo me dovresti abbandonare proprio l'idea di usare il BLE in modo improprio come se fosse una seriale... il protocollo BLE non funziona in questo modo.

Ciao,
capisco quanta roba ci possa essere per il bluetooth, ma mi pare comunque eccessivo lo spazio occupato, se si utilizza il wifi (non lo so, ma a parer mio dovrebbe essere più complesso) lo spazio occupato è intorno al 70%...
Provo a dare un'occhiata a quanto mi hai suggerito.
In effetti per quello che devo fare è eccessivo l'uso del BT, però è una cosa che deve essere visibile a chiunque, quindi la cosa più immediata era proprio una trasmissione BT sul cellulare.
Forse a questo punto conviene utilizzare un modulo BT HC-05? :smiley:
Grazie

Non farti ingannare dalle percentuali sullo spazio occupato: non è che se un firmware occupa poco spazio sulla flash, allora è per forza di cose migliore.

Inoltre, la percentuale è in funzione dello schema di partizione che selezioni nell'IDE.

Questo è lo sketch SerialToSerialBT.ino con l'opzione di default:

Questo è lo stesso identico sketch selezionando una partizione che prevede maggior spazio per il programma.

A che pro selezionare un microcontrollore che integra il BLE e poi aggiungere un modulo esterno??? Mi sembra una scelta senza senso.

Prova a descrivere quello che devi fare, magari salta fuori qualche idea a cui non avevi pensato.

Bhè, si, chiaro che se si usa un processore più grande la percentuale è minore, ovvio; considerando però che una esp32 wroom ha già abbastanza memoria, trovarla piena per fare "solo" una trasmissione BT mi pare eccessivo.
Il problema mi è sorto quando al mio progetto ho aggiunto il BT e il programma è diventato instabile, esp si impallava, è lì che ho notato la percentuale di utilizzo al 95%.
Potrei usare una esp con maggiore memoria, ma mi pare uno spreco; in effetti se devo usare un modulo esterno mi sa che non ne faccio di nulla, il bello era approfittare che era già presente in ESP32.

Il progetto si basa su un ricevitore radio a valvole AM, a cui ho installato un modulo FM che viene sintonizzato in base alla frequenza sintonizzata sulla radio, tramite lettura della valvola oscillatrice; il "problema" è sapere su che frequenza FM siamo in ascolto, sia se vogliamo utilizzare quella frequenza su altra radio, sia se vogliamo sintonizzarci su una frequenza specifica... Da quì l'idea di inviare allo smartphone la frequenza FM che si riceve.
tutto questo per non mettere un display sulla radio, per non essere invasivi sulla radio stessa, e anche esteticamente non ci starebbe bene :slight_smile:

No, si tratta dello stesso microcontrollore.
Il microcontrollore ESP32 di suo ha poca memoria di archiviazione: appena 480Kb di ROM.
Per questo motivo nei moduli come l'ESP32-WROOM o simile viene sempre affiancato da una memoria di tipo Flash connessa sul bus SPI dalla quale viene poi caricato il firmware da mandare in esecuzione.

Le schede più comuni montano una flash da 4Mb, ma si trovano anche da 8Mb e addirittura da 16Mb.
Questa memoria flash può essere partizionata liberamente in modo da assegnare un po' di spazio per la memorizzazione del firmware, un po' di spazio per gli aggiornamenti OTA e volendo puoi anche usare lo spazio rimanente per salvare file come se fosse un drive (per il micro).

Con lo schema di partizione selezionato di default vengono riservati circa 1,2Mb di memoria per il firmware, ma se necessario si può ampliare più o meno come si vuole.

Ciò detto, la dimensione del firmware non influenza la stabilità del programma, non è che cambia nel corso dell'esecuzione. Se il firmware ci sta nella memoria bene, altrimenti bisogna porre rimedio.

Discorso diverso invece se si sta parlando della percentuale di "dynamic memory".
Se se ne occupa troppa, poi non ne rimane a sufficienza per allocare dinamicamente altri oggetti e quindi l'ESP va in crash.

grazie per l'esaustiva spiegazione :slight_smile: