Modulo WiFi+Bt ESP32

Non so se leggere una tensione di 3.3V, che è giusto il fondoscala, sia un bene, per questo ti avevo suggerito una banale pila e confrontare i valori del convertitore, non convertiti in tensione.

Ops, mi sono dimenticato di dirti che ho fatto un partitore 10k-10k quindi ho esattamente la metà.

Qualcuno mi può dare una mano? Ho visto che ci sono stati sviluppi e bisogna includere una libreria di correzione. Si chiama esp_adc_cal.h Non ho capito come inserirla in un programma, mi sono fermato a #include.....

Mi mandano QUI, poi mi mandano QUI (me è in pyton!!!), poi ho visto QUI....

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.

Praticamente.... GRANDE Arduino Uno oppure NANO. Lo attacchi e leggi lo STESSO VALORE su 20 schede di diversi fornitori. Ancora mi domando come può uscire sul mercato una scheda così...

Su Arduino il riferimento è la tensione di alimentazione che, essendo la stessa per tutti, ti da valori identici.

Credo che se tu usi il riferimento interno ad 1.1V mi sa che succede la stessa cosa dell'ESP32.

Comunque dai link allegati avevo capito che si legge il valore dei fuses e il programma ne tiene conto automaticamente in fase di lettura delle analogiche...

Si, il vantaggio è che una volta calibrato la calibrazione rimane anche cambiando sketch. Ma se fai pochi progetti puoi usare un file SPIFFS o forse la EEPROM simulata.

Appunto: mi puoi fare un esempio PRATICO di come inserirlo in un programma?
Grazie infinite

Faccio un primo esempio banale. Collego l’ingresso analogico a massa. La tensione V è zero e il convertitore mi da zero. Collego l’ingresso all’alimentazione. La tensione V è 3.3V e il convertitore mi da 4095

Faccio quindi la regressione lineare. Per questo esempio uso [u]https://www.graphpad.com/quickcalcs/linear1/[/u]

Nella tabella metto i miei valori, in X i valori del convertitore e in Y le tensioni misurate con il multimetro.

0 0 4095 3.3

Premo calculate now

Si tratta di una regressione lineare, cioè vogliamo trovare l’equazione della linea che segue meglio i nostri valori misurati. L’equazione della linea è Y=aX+b

Slope sarà il nostro valore di a = 0.0008059 Y-intercept sarà il nostro b = 0.0 Poiché stiamo usando solo 2 valori R è 1. Questo perché abbiamo 2 punti e quindi una sola retta che passa per i nostri 2 punti.

Quindi l'equazione diventa Y=0.0008059x+0 E quindi per passare dal valore del convertitore alla tensione basta moltiplicare per 0.0008059

Ma questo è un caso ideale e non ci da molte informazioni. Dobbiamo usare 2 o più tensioni che siano maggiori di zero e minori di 3.3V

Metti 1V e 2 V A 1V il convertitore mi da 1235 A 2V il convertitore mi da 2483 In tabella quindi 1235 1 2483 2

Calcolando abbiamo a=0.0008013 b=0.01042 L’equazione diventa Y = 0.0008013*X + 0.01042 Quindi il valore preso dal convertitore AD va moltiplicato per 0.0008013 e poi va aggiunto 0.01042, otterrai la tensione.

Questi 2 valori di a e b sono quelli da memorizzare in qualche modo, nel programma, nella eeprom, in un file SPIFFS o in questi efuses anche se non so se questi efuses memorizzano dei float.

Puoi anche usare più tensioni, basta inserire i rispettivi valori nella tabella. Sconsiglio gli estremi 0 e 3.3V in quanto sono proprio i valori di riferimento del convertitore.

Il discorso può anche essere fatto per le temperature, ti servono 2 temperature note, cacci i valori in tabella al posto della tensione e ottieni direttamente la temperatura. Questo se il legame tra la temperatura e tensione è lineare ma tu credo usi le NTC che invece non sono lineari. Se non ricordo male lo sono le Pt100 e le termocoppie.

Spero di non aver scritto fesserie.

Buongiorno,

so che tempo fa si era parlato del tasto di boot sul DevKit ESP32, ma non riesco a trovare dove :sweat_smile:

comunque volevo condividere con voi la mia esperienza, su sistema Win devo premere ogni volta il tasto di Boot per caricare uno sketch, mentre su sistema Mac non è necessario. Che dipenda dal chip usb to uart della silicon lab ?

Inoltre volevo chiedere se c'è qualcuno che utilizza un debugger per caricare lo sketch pre-compilato dall' Arduino IDE sull'esp32 e quale mi consigliate ?

Moce993:

su sistema Win devo premere ogni volta il tasto di Boot per caricare uno sketch, mentre su sistema Mac non è necessario…

Queste cose mi fanno notevolmente inc…avolare!

Primo, perché non dovrebbero esserci differenze tre Linux, Mac e Windows se di un programma è stato fatto un porting decente.
Secondo, perché QUESTO dovrebbe essere il sito dell’ IDE di Arduino e se c’è un problema andrebbe quantomeno risolto (e di ciò vorrei un parere dei moderatori…)

Mi succede la stessa cosa con IDE su Windows e IDE su Linux quando devo riscrivere il bootloader dei NANO: su Linux ZERO PROBLEMI, su Windows ogni tanto mi da errore e non c’è modo di scrivere.

A meno che mi dichiarate che su Windows alcune cose non si possono assolutamente fare…

steve-cr: Queste cose mi fanno notevolmente inc...avolare!

vero da fastidio quando le cose non funzionano come dovrebbe, ma io la prendo con filosofia visto che è gratis non pretendo la perfezione :D

Comunque ho idea che non dipenda dall'IDE, ma penso sia un discorso di porte... magari qualcuno più esperto può darmi conferma.

Aggiungo che ho provato su Mac OSx + Eclipse + Plugin Arduino 3.0 e neppure li ho bisogno di premere il tastino di boot, su win devo ancora provare.

Ma con quale delle oltre 30 schede ESP32 ti succede? Io ho la Lolin e il tastino non c'è.

zoomx: Ma con quale delle oltre 30 schede ESP32 ti succede? Io ho la Lolin e il tastino non c'è.

Io utilizzo ESP32 DEVkit V4.

Ho utilizzato anche huzzah32 di Adafruit, ma è un pò diversa e nemmeno su questa c'è il tastino di boot.

E' il classico ESP32-DEVKIT da 15+15 piedini, con due tastini (BOOT e EN).

steve-cr:
A meno che mi dichiarate che su Windows alcune cose non si possono assolutamente fare…

ad esempio dormire sonni tranquilli?

scusa la facile battuta, ma io sono passato a Linux col Papero Signorile, non mi ricordo nemmeno più perché
ma so benissimo perché non torno indietro

Sono passato a Win10 ho installato Arduino IDE 1.8.10, core versione ESP32 1.0.4.

Ora quando carico programmi su ESP32 devKit non serve più che prema il tasto di boot, cosa che fino a ieri dovevo fare.

Il mistero si infittisce :o

zoomx: Faccio un primo esempio banale. Collego l’ingresso analogico a massa. La tensione V è zero e il convertitore mi da zero. Collego l’ingresso all’alimentazione. La tensione V è 3.3V e il convertitore mi da 4095

........

Non è così semplice. Se vai a vedere su Espressif ma anche su altri siti, gli ingressi analogici di ESP32 non sono come qualli a cui siamo abituati con UNO o Nano.

Infatti la lettura parte dopo lo Zero e si ferma prima dei 4095 punti. Insomma, un casino.

Guarda QUI.

Purtroppo è da un pò che non bazzico per il forum, comunque per chi non lo sapesse Espressif ha lanciato da qualche mese la versione WROOM e WROOVER E, dove viene montato ESP32 ECO V3.

Allego il documento Espressif.

ESP32_ECO_V3_User_Guide__EN.pdf (557 KB)