Modulo WiFi+Bt ESP32

1) no. 2) credo di si, ne parlano qui

gpb01: Quella è per DS3231 ... non so se è compatibile con i DS3232 che usa lui e, sicuramente, mancano una serie di funzioni per accedere alla memoria in più che ha detto chip.

Guglielmo

Il 3232 ha solo la ram in più, funzionano tutte le lib 3231, a lui non serve la ram integrata

Aggiorno sulle porte ESP32 (e così rinfresco un po’ anche la sezione ESP32.

Per chi non seguiva, avevo notato che le analogiche di ESP32 leggono diversamente da scheda a scheda (!!!).
Proseguendo le ricerche sul sito Espressif, la cosa era stata notata (con un po’ di ritardo) e si era corso ai ripari eseguendo la taratura delle porte direttamente sul chip in fase di produzione, uno a uno.

Di questi chip, però, sembra che ancora non se ne vedano, almeno sul mercato cinese.

Infatti esiste ancora il solito problema alla programmazione con IDE che obbliga a premere il tastino BOOT per far partire il trasferimento del programma, e le porte analogica continuano a leggere valori diversi da chip a chip.

Vi allego un foglio che ho redatto proprio ora con 12 schedine esp32-devkit dove leggo le prime due porte analogiche e le confronto con un DHT22 (che, chiaramente, essendo digitale, non può che dare valori identici su tutte le schede).
Le differenze, come potete vedere, si aggirano anche oltre i 3 gradi.
Gli asterischi li ho messi a schede con una stampigliatura diversa e molto più completa dello schermo metallico.

Se qualcuno ha avuto a che fare con ESP32 nuove ci può rendere edotti…

ESP32-Analogic.pdf (4.01 KB)

Dovresti leggere delle piccole tensioni note, tipo una pila alcalina carica o un generatore, se lo hai.

Mi hai dato una bella idea, per vedere se il problema è del regolatore interno da 3,3 volt oppure…peggio (perchè significa che il problema è all’interno della CPU).
Quindi a un terzo ingresso analogico ho attaccato una tensione di 3,3 volt da un alimentatorino stabilizzato (ho messo anche un bell’elettrolitico).
Sul terzo canale ho lasciato la formula di lettura della ntc degli altri due canali (non mi interessa leggere la tensione ma la differenza di valori letti)
Nel foglio allegato si evidenziano le stesse differenze. Quindi non è la tensione del regolatore interno montato sulla schedina DEVKIT, perchè se sulle ntc leggo la tensione erogata da questo, nel terzo ingresso leggo una tensione esterna. Ma l’errore esiste ugualmente ed è proporzionale all’errore delle NTC.

ESP32-Analogic2.pdf (4.01 KB)

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.