Modulo WiFi+Bt ESP32

gpb01: Hai provato QUESTA versione qui (sempre di JChristensen)? ... magari è più aggiornata ::)

Guglielmo

Nulla di fatto Guglielmo.

Ho provato la tua libreria ma oltre a dire che non è compatibile con la Lolin D32 Pro in compilazione restituisce sempre l'errore sulla riga "setSyncProvider(RTC.get); // the function to get the time from the RTC2"

questa è la schermata di errore:

Arduino:1.8.9 (Windows 10), Scheda:"LOLIN D32 PRO, Disabled, Default, 80MHz, 921600, None"

ATTENZIONE: la libreria DS3232RTC dichiara di funzionare sulle architetture (avr) e potrebbe non essere compatibile con la tua scheda che utilizza l'architettura (esp32)
C:\Users\Ettore\AppData\Local\Temp\arduino_modified_sketch_61938\TimeRTC.ino: In function 'void setup()':

TimeRTC:13:21: error: 'RTC' was not declared in this scope

     setSyncProvider(RTC.get);   // the function to get the time from the RTC

                     ^

exit status 1
'RTC' was not declared in this scope

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

Prova con la Adafruit http://www.esp32learning.com/code/esp32-and-ds3231-rtc-example.php

testato: Prova con la Adafruit http://www.esp32learning.com/code/esp32-and-ds3231-rtc-example.php

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

Sto provando ad usare la libreria RtcDS3231.h come in questo esempio https://www.hackster.io/shaddow1201/using-the-esp32-with-rtc-ds3231-module-de9d85 Sembrerebbe funzionare però il problema è che non riesco ad interfacciarlo con la libreria NTP (NtpClientLib.h) che uso nel mio sketch. Non riesco a capire come assegnare epochTime nell'esempio postato sopra. Il mio intento è ricevere l'ora da NTP ed aggiorare il modulo RTC di tanto in tanto.

Rettifico: non da errore in compilazione ma devo verificare se il modulo RTC dialoga correttamente con I2C (non ne sono molto sicuro).

L'ESP8266 ha un RTC software che gestisce automaticamente il passaggio fra orario invernale ed estivo e anche l'aggiornamento via NTP. Immagino sia lo stesso su ESP32.

zoomx: L'ESP8266 ha un RTC software che gestisce automaticamente il passaggio fra orario invernale ed estivo e anche l'aggiornamento via NTP. Immagino sia lo stesso su ESP32.

Questa cosa mi sarebbe utile perchè senza RTC al primo avvio non riesco a visualizzare correttamente l'ora sul display fino a che non riceve l'ora giusta dal NTP

Io ho un piccolo orologino che dall'avvio all'ora in 5 secondi mostra l'ora esatta. A volte ci sta di più per problemi di rete.

Su ESP32, avete mai provato a sfruttare la programmazione dei due core tramite arduino IDE creando due task (in multitasking)? Secondo voi come si possono passare variabili tra un task e l'altro?

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...