Il programma in python serve per caricare il bin compilato nell'ESP32 e ha anche un monitor seriale.
La calibrazione proposta del documento espressif è lineare quindi usa la semplice equazione y=ax+b che, nel documento, vengono chiamati coeff_a e coeff_b.
Si tratta di prendere una serie di valori raw del convertitore e delle corrispondenti tensioni misurate in altro modo. Quest'ultimo punto nel documento espressif non è molto chiaro, mi è sembrato di capire.
Metti i dati in un foglio di calcolo, plotti i punti e, nel foglio di calcolo stesso, fai un fit lineare, e usi i settaggi per far scrivere sul plot la funzione lineare trovata che avrà la forma y=ax+b e al posto di a e b ci saranno i valori che cerchi. Oppure usi un programma per calcolare il fit lineare a partire dai tuoi dati. Il diagramma nel documento espressif mi sembra sbagliato, nell'asse X ci dovrebbero essere i valori raw e nelle Y le tensioni ma può essere che il sonno mi tradisce. Nel plot ci sono diversi punti ma la procedura può essere fatta anche solo con 2. Però più punti hai più puoi correggere eventuali piccoli errori.
Tale calibrazione è diversa a seconda delle attenuazioni che, mi par di capire, non sono altro che una variazione della tensione VREF.
Quindi, se hai un chip nuovo, la libreria ti permette di scrivere i valori a e b in efuse e successivamente di leggerli da li.
Ma nessuno ti vieta invece di utilizzare direttamente nel codice tali valori. E magari di leggerli dalla SPIFFS.
Questo tipo di procedura vale per qualsiasi ADC di qualsiasi MCU. La procedura potrebbe anche essere usata per passare direttamente dai valori raw a quelli di temperatura usando temperature note se il sensore ha comportamento lineare.