RTC DS3231 per arduino

L’RTC DS3231 per arduino è un integrato RTC che mi è stato consigliato da un Maker sempre attento alle novità offerte dal mercato: Alberto

RTC DS3231 per arduino

Come sai Arduino non possiede un RTC ( Real Time Clock ) che possa consentirti di tener sotto controllo l’orario.

Nell’orologio neopixel ho simulato il tracorrere dei secondi, minuti ed ore sapendo che non sarà mai preciso, si è trattato solo di una simiulazione.

Nei miei precedenti progetti ho sempre utilizzato un altro RTC il DS1307 puoi leggere qualche alrticolo:

Nei diversi esperimenti ho verificato che tale tipo di RTC perde qualche secondo ogni giorno e cumulato nei mesi diventa uno scarto considerevole che può avere delle implicazioni importanti nel funzionamento del progetto stesso, pensa ad esempio ad un DataLogger se ogni mese perdi qualche minuto al termine di un monitoraggio su lungo periodo ( 3-6 mesi ) ti troverai dati non concordi con il reale orario di raccolta.

L’imprecisione del DS1307 non è legata al chip stesso, piuttosto al quarzo esterno di cui tale integrato necessita per tener sincronizzato il clock interno. Se il quarzo “perde colpi” l’ora non è più fedele.

L’RTC DS3231 per arduino possiede la caratteristica di essere molto preciso, come riportato nel datasheet del produttore in quanto:

The DS3231 is a low-cost, extremely accurate I2C real-time clock (RTC) with an integrated temperature compensated crystal oscillator (TCXO) and crystal.

possiede al suo interno un oscillatore con temperatura controllata ed una sonda di temperatura che utilizza per compensare la frequenza di oscillazione.

Collega l’RTC DS3231 per arduino

I collegamenti elettrici dell’RTC DS3231 per arduino sono molto semplici in quanto il modulo è alimentato a 3,3v e comunica con arduino mediante I2C quindi attraverso i pin SDA ed SCL

RTC DS3231 arduino pin

ho utilizzato i fili di colore giallo e verde per la comunicazione I2C.

Libreria DS3231

Come già per il DS1307 anche per l’RTC DS3231 per arduino è necessaria una libreria, cercando nel web trovi diverse librerie utili tra le quali ho provato questa:

JChristensen DS3231 DS3232RTC

anche se si chiama DS3232 è valida sia per il DS3232 sia per il DS3231. Puoi provare uno degli esempi: TimeRTC

Al primo tentativo di compilazione potresti imbatterti nel medesimo errore in cui mi sono imbattuto io:

RTC DS3231 arduino error library

la necessità di aggiungere la libreria Time.h a quelle installate nel tuo IDE, seguendo il link consigliato dall’autore la trovi qui, una volta installata la compilazione dello sketch dovrebbe procedere correttamente.

Apri il monitor seriale per verificare la data e l’ora restituita dal tuo RTC DS3231 per arduino.

Al primo collegamento l’orario riportato era errato: 01Jan2000 00:00:01, devi impostare l’orario per sincronizzarlo con l’ora corrente.

Tra gli esempi di JChristensen trovi un utilissimo esempio SetSerial.ino che ti permette di impostare l’orario dell’RTC DS3231 per arduino mediante connessione seriale.

Invia questo esempio sul tuo arduino, apri il monitor seriale e dovresti ottenere una schermata simile:

RTC DS3231 arduino set serial

nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:

RTC DS3231 arduino time setting

in questo momento il tuo RTC DS3231 è impostato con la data e l’ora che hai deciso di impostare.

Nota che nella prima schermata del monitor seriale dopo alcune linee viene restituita la temperatura, questo perché lo sketch prevede di recuperare la temperatura dal sensore installato sul modulo e di restituirtela ogni minuto.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/rtc-ds3231-per-arduino.html

84 commenti

2 ping

Vai al modulo dei commenti

    • Antonio il 10 Ottobre 2015 alle 17:25
    • Rispondi

    …si, si verissimo! nei casi da me analizzati il DS1307 mi anticipa mediamente di 15 sec. al giorno! Ottima l’idea del DS3231.

    1. Ciao Antonio,
      si il DS1307è un buon prodotto a patto di accettare la perdita elevata di secondi sui cicli giornalieri.

  1. non capisco perchè ma non mi mantiene l’ora impostata pur avendo la batteria inserita, inoltre anche la temperatura rilevata e’ sballata (0 gradi) idee ?

    1. Ciao Stefano,
      potrebbe essere danneggiato ?

    • Ettore il 31 Gennaio 2016 alle 21:44
    • Rispondi

    Buona sera, ho riscontrato problemi di compatibilità con libreria time e la libreria ds3231 come risolvere il conflitto?
    Grazie saluti
    Ettore

    1. Ciao Ettore,
      senza conoscere il conflitto posso solo suggerirti di trovare un’altra libreria che non presenti conflitti o di modificarti le libreria se ne sei capace.

    • Alessio il 30 Aprile 2016 alle 12:19
    • Rispondi

    Ciao.grazie per tutti gli aiuti 😀

    non riesco a settare l’ora e la data! non riesco a capire come modificarla.grazie

    1. Ciao Alessio,
      hai letto l’articolo e compreso? tra le due schermate relative al monitor seriale è scritto chiaramente, oltre che nei commenti dello sketch, il formato in cui lo sketch si attende la data e l’ora: yyyy,mm,dd,hh,mm,ss

    • luigi il 6 Maggio 2016 alle 11:42
    • Rispondi

    Buongiorno Mauro,
    ho provato a settare il nuovo orario e mi riporta i dati corretti (RTC set to: 06May2016 11:41:45
    06May2016 11:41:45
    06May2016 11:41:46
    06May2016 11:41:47 )
    ma quando riavvio la connessione seriale mi ritorna al settaggio originale (06May2016 11:42:27
    RTC Sync FAIL!
    01Jan1970 00:00:01
    01Jan1970 00:00:02

    cosa posso fare?

    grazie

    Luigi

      • luigi il 6 Maggio 2016 alle 11:47
      • Rispondi

      risolto, avevo invertito i cavi sda scl.

      grazie
      Luigi

      1. Bene Luigi,
        ti ho appena risposto.

    1. Ciao Luigi,
      il messaggio “RTC Sync FAIL!” mi dice che non stai veramente comunicando con il chip RTC, probabilmente hai solo impostato i valori corretti nella memoria genuino, ma il tuo DS3231 è mal collegato.

    • lino grieco il 8 Luglio 2016 alle 20:26
    • Rispondi

    mauro!!!!!
    sempre lino…..ho problemi ad impostare data e ora!!!
    ho seguito la guida….l’errore che mi dà è quando trova nella verifica dello
    sketch arduino mega 2560 in mio possesso….
    che faccio?

    1. Ciao Lino,
      se non mi dici l’errore è impossibile che io riesca ad aiutarti. Solitamente gli errori in fase di compilazione sono chiari, prova ad inviarmelo insieme alla versione del tuo IDE e delle librerie che stai utilizzando.

    • lino grieco il 12 Luglio 2016 alle 15:48
    • Rispondi

    scusami mauro…forse ero un pò stanco….ho provato oggi e funziona..
    l’unica cosa che il mio pc segna le 15:45 e l’ora viene impostata quando apro il monitor seriale
    alle 15:15….per quanto riguarda la data ok

    1. Ciao Lino,
      la differenza di orario potrebbe dipendere da un errato setting captato dall’IDE al momento della compilazione.
      Prova ad impostare tu il valore orario e verifica che il setting avvenga correttamente.

      Dimmi poi come è andata.

        • lino grieco il 13 Luglio 2016 alle 11:08
        • Rispondi

        niente da fare…..stamattina mi portava un ora rispetto al pc di almeno 30 minuti indietro…la data ok

        vado nel serial monitor, inserisco in alto data ed ora faccio invia ma non succede nulla

        1. Ciao Lino,
          hai provato altre librerie?

    • lino grieco il 13 Luglio 2016 alle 15:53
    • Rispondi

    cmq mauro…sei un grande…..ho riletto il post e mi mancava la libreria streaming.h nel file di esempio setserial.

    ho seguito alla lettera tutto e va una bomba…..

    domanda: una volta settata la data e l’ora……dopo aver staccato tutto rimane in memoria nel DS3231 grazie alla batteria al litio incorporata?

    1. Ciao Lino,
      ti ringrazio per i complimenti.
      Mi spiace solo che tu abbia perso tanto tempo per capire che il problema era una libreria come ti avevo suggerito già nei primi commenti, a volte basta leggere con attenzione anche le risposte per risolvere prima.

        • lino grieco il 19 Luglio 2016 alle 15:59
        • Rispondi

        caro mauro….adesso ho bisogno di altre informazioni riguardo al DS3231.
        sto lavorando su un progetto che consiste nel far partire degli attuatori(pompa acqua, areatori, motoriduttori) legati ad una scheda relè grazie alla lettura di sensori di temperatura ed umidità che tu ben conosci….

        per ora riesco a far girare il tutto ogni volta che lancio il mio sketch o quando questo è già caricato su arduino mega2560 con alimentazione esterna….

        quello che voglio fare adesso è legare il funzionamento di questi attuatori all’ora e alla data che arduino mi legge grazie al DS3231.

        quello che intendo fare è trattare l’ora e la data come due variabili e far funzionare i miei attuatori ogni tre ore o addirittura dopo due giorni a partire da un certo momento x……..mi puoi dare delle dritte?

        1. Ciao Lino,
          leggi come funziona la centralina di irrigazione; dovrai adattare il codice al DS3132 in quanto scritta per il DS1307.

    • lino grieco il 22 Luglio 2016 alle 17:27
    • Rispondi

    grazie…inizio a studiarmela e poi torno a stressarti…

    grazie ancora

    • Erik il 10 Ottobre 2016 alle 13:23
    • Rispondi

    ciao a tutti, ogni volta che cerco qualche sito su come usare o impostare certe schede con arduino capito sempre su questo blog molto utile, al momento lo trovo molto più utile del forum ufficiale, ho un problemino, ho provato varie librerie per utilizzare il DS3231RTC e fin’ora solo uno mi ha dato risultati senza sorta di errori, purtroppo nn è questo pubblicato nn sono mai riuscito a risolvere il problema del Time.h riportato in alto e dal pc del lavoro nn riesco a trovare quello che ho usato io per poterlo linkare, ma suppongo che i comandi per utilizzarlo siano sempre gli stessi, ho impostato la data e l’ora ma nn capisco come inizializzare la scheda, per impostare ad una certa ora l’attivazione o la disattivazione di un relè, inoltre al posto del monitor seriale ho impostato un lcd in I2C dove quando carico lo sketch mi mostra la data e ora + la temperatura ma l’unica cosa che si aggiorna automaticamente è la temperatura, l’orario rimane fisso (solo su lcd) se resetto la scheda o ricompilo la scheda allora si aggiorna. Mi potete aiutare? Nel caso stasera quando sono a casa posto il codice come l’ho scritto io così è più utile.

    1. Ciao Erik,
      non so se possa aiutarti ma per la memorizzazione di un allarme è una cosa che penso non sia possibile con il solo RTC; dovrai scrivere del codice arduino che valuti la data e l’ora e porti HIGH un pin a cui è connesso il relè.
      Sul secondo problema sei certo che la lettura dell’orario sia corretta? nel monitor seriale vedi scorrere il tempo?

    • Michelangelo il 19 Ottobre 2016 alle 16:13
    • Rispondi

    ciao mauro, scusa il disturbo, ho collegato rtc d3231 all’arduino e quando carico il codice e apro il monitor seriale mi dice:
    RTC Sync FAIL!
    01Jan1970 00:00:01
    e cosi fa ogni volta che riapro il monitor… cosa posso fare??

    1. Ciao Michelangelo,
      hai provato a verificare che i collegamenti siano corretti e che l’indirizzo i2c sia quello del tuo modulo?
      Se non conosci l’indirizzo del modulo puoi verificarlo sulla documentazione del produttore o venditore da cui hai acquistato l’RTC3231

        • Michelangelo il 1 Novembre 2016 alle 20:44
        • Rispondi

        I collegamenti sono corretti, può essere che la batteria sia scarica?
        Cmq non so cosa sia “l’indirizzo I2C”, se magari potresti spiegarmelo te ne sarei grato; ho acquistato il modulo su internet e mi è arrivato senza niente

        1. Ciao Michelangelo,
          trovi degli articoli in cui ho descritto non solo di cosa si tratta ma anche come reperirlo se non lo possiedi.
          In generale evito di acquistare componenti su siti che non rilasciano adeguata documentazione perché spesso risultano inutilizzabili.

        • Michelangelo il 1 Novembre 2016 alle 20:51
        • Rispondi

        Ho provato a fare uno scanner dell’indirizzo i2c attraverso uno sketch: 0x57. Ora cosa devo fare?
        (scusa ma non me ne intendo molto di programmazione in c/c++ in quanto il mio campo è Java)

        1. Ciao Michelangelo,
          hai letto il mio commento linea per linea a questo articolo? Dovrei aver scritto dove viene indicato l’indirizzo I2C.
          Se qualche passaggio non ti è chiaro della mia spiegazione chiedi pure attraverso i commenti.

    • Erik il 10 Dicembre 2016 alle 18:14
    • Rispondi

    Ciao Mauro, ho ripreso a mano il progetto per sistemarlo un po’, ho visto subito che l’orario nn corrisponde, cioè quando l’avevo impostato quest’estate andava bene ora segna un’ora avanti, avevo anche eliminato la parte che mi faceva vedere la data e l’ora via seriale ho rispristinato e nella riga della seriale ho provato a rinserire la data e l’ora ma nn prende più i nuovi dati, se aggiungo un pulsante posso ottenere il medesimo risultato? sono un po’ scarso in programmazione aiutami almeno a capire (avrei preferito via seriale ma se nn funziona)… il settaggio via seriale funziona solo da nuovo o se cambio batteria?

    1. Ciao Erik,
      hai controllato che lo sketch sia quello che ho pubblicato io?
      Se via seriale vedi il dato che passa, allo stesso modo dovrai poter eseguire le modifiche.
      Se qualcosa non funziona puoi aggiungerti delle righe di Serial.println() per capire cosa gli stai passando, non dovresti avere difficoltà se hai compreso come funziona lo sketch.

        • Erik il 17 Dicembre 2016 alle 14:56
        • Rispondi

        ciao, ne avevo provati diversi, perché ognuno mi dava un problema, del tipo il tuo ma anche quello più aggiornato che ho trovato il setserial mi da errore sulla libreria schematic, allora avevo usato timertc che dava un errore sulla parte del Time.h ho aperto la libreria e ho fatto le giuste correzioni per poter lanciare lo sketch, una volta avviato ho aperto la seriale e ho impostato l’orario, questo un paio di mesi fa, settembre – ottobre prima del cambio dell’ora, dopo ho aggiunto il progetto dell’rtc a quello che già avevo fatto e ho tolto le parti che riguardano il seriale per permettere la visualizzazione su lcd, se rimetto la visualizzazione sul seriale vedo le prime 2 cifre dei minuti che invio al lcd poi vedo l’orario completo e poi la data, ti faccio un esempio di quello che vedo

        :13 01:13:40 17:12:2016

        sul seriale al momento visualizzo la data e l’ora in questo modo e nn riesco a cambiare l’ora per passare dall’ora legale a quella solare e viceversa

          • Erik il 17 Dicembre 2016 alle 18:09
          • Rispondi

          quando parlo dello sketch setserial ho sbagliato a scrivere, volevo riferirmi al streaming.h e invece ho scritto schematic, nel momento che scrivevo mi son sbagliato

          1. OK

        1. Ciao Erik,
          se ho compreso bene il problema hai dovuto modificare la librerai per consentire l’impostazione dell’ora?
          Nel mio caso non è stato necessario.
          Prova a rimettere le modifiche e lasciale permanenti in modo che tu possa eseguire il cambio dell’ora ogni volta che lo desideri o programma una routine di cambio ora calcolato sulla base dell’algoritmo usato per il cambio dell’ora in tutti gli apparati dotati di RTC e sprovvisti di connessione verso un Ntp server.

            • Erik il 19 Dicembre 2016 alle 19:33

            ci ho provato ma nn riesco… che stress 😛 pensavo di aggiungere 2 pulsanti uno per aumentare e uno per diminuire l’ora manualmente, ma sinceramente nn saprei come fare :S

            tipo nn so:

            button up
            if button up true + hour()

            l’ho buttata giù cosi perché sto uscendo, immagino che ci sia molto più da scrivere 😛

          1. Ciao Erik,
            il concetto mi sembra buono.

    • lorenzo il 14 Dicembre 2016 alle 00:07
    • Rispondi

    Ciao io uso un arduino nano su cui i pin analogici A4 e A5 sono fuori asse, sono spostati verso il centro della scheda e non è comodo saldarli per usarli su breadboard.
    Ho cercato dove modificare le linee di codice perchè uso A2 e A3 e non riesco a trovarle. puoi aiutarmi ? 🙂
    il risultato quando collego il tutto mi da:

    “Unable to sync with the RTC
    0:00:00 0 0 1970
    0:00:01 1 1 1970”

    complimenti per il blog !!

      • lorenzo il 14 Dicembre 2016 alle 00:33
      • Rispondi

      Stavo leggendo ” DS3232RTC_h ” e mi chiedevo se non dovessi modificare qualcuna di queste parti:

      //DS3232 I2C Address
      #define RTC_ADDR 0x68

      //DS3232 Register Addresses

      //Alarm mask bits

      ….

      //Control register bits

      ….

      1. Ciao Lorenzo,
        dipende da quale indirizzo possiede la tua scheda.
        Sul blog troverai degli esempi per esplorare gli indirizzi I2C.
        Leggi, comprendi e prova gli sketch per trovare le tue impostazioni.

    1. Ciao Lorenzo,
      iniziamo a dire che devi usare i pin SDA ed SCL e no puoi usare dei pin a caso sulla board.
      Sull’arduino Nano ( se cerchi un pinout sul web ) dovrebbero corrispondere a D2 e D3, controlla, e non sono decentrati.

      Sei certo del modello di scheda che stai utilizzando ?

      1. [[ link rimosso in automatico ]]

        Ciao Mauro questa è esattamente la board che ho io, su G immagini si vede come cercando “arduino pro mini” si trovino delle board anche molto diverse tra loro, non solo per la disposizione dei pin ma anche per il numero.
        qui sotto il pinout dove si vede che il pin digitale 18 e il 19 sono decentrati 😉

        [[ link rimosso in automatico ]]

        1. Ciao Lorenzo,
          a parte la regola che hai violato inserendo link a siti non autorizzati, vedi fondo di ogni articolo, non ricordo quale sia il tuo dubbio.
          Si la Pro Mini ha i pin A4 ed A5 ( alias 18 e 19 ) su una fila interna rispetto a tutti gli altri pin di input/output

            • lorenzo il 25 Dicembre 2016 alle 07:42

            Ciao Mauro, la regola dove è scritta ?
            ho letto quella di non incollare sketch e non l’ho fatto, ma la regola dei “siti non autorizzati” non l’ho mai vista sul tuo sito.
            cmq la mia domanda era quella se si potessero cambiare i pin di arduino a cui collegare la RTC, ma hai già risposto prima 😉

          1. Ciao Lorenzo,
            è una regola dettata dalla netiquette dei blog, ma hai ragione è meglio scriverla, la aggiungerò.

    • Fabrizio il 5 Febbraio 2017 alle 16:59
    • Rispondi

    risolto grazie

    1. Ciao Fabrizio, sono contento .. se ti va scrivici come.

    • giancarlo il 8 Febbraio 2017 alle 14:49
    • Rispondi

    ciao, da quello che so il DS3231 ha anche una piccola “rom” per memorizzare degli alarm, sai se esistono librerie che la supportano e permettono di impostare questi alarm?
    sto progettando una sveglia e mi farebbe davvero comodo

    1. Ciao Giancarlo,
      no purtroppo non so se le librerie per arduino supportino la gestione della rom interna del DS3231.
      Se ne conosci le specifiche puoi proporre all’autore della libreria ufficiale una estensione scritta magari a 4 mani.
      Se ti serve solo per memorizzare degli allarmi puoi usare la EEPROM di arduno, considerando il fatto che ne avrai almeno uno nel tuo progetto.

        • Riccardo il 22 Marzo 2017 alle 12:19
        • Rispondi

        Noi sul forum di Arduino abbiamo scritto questo codice funzionante su DS3231 senza usare librerie:

        #include
        byte ore; /* ore correnti */
        byte minuti; /* minuti correnti */
        byte secondi; /* secondi correnti */
        byte error; /* errore al RTC */
        byte HOURS; /* variabile BCD ore */
        byte MINUTES; /* variabile BCD minuti */
        byte SECONDS; /* variabile BCD secondi */

        byte BCDbin(byte n){return ((n >> 4) * 10) + (n & 0x0F);} /* converte BCD in binario */
        byte binBCD(byte n){return ((n / 10) << 4) | (n % 10);} /* converte binario in BCD */

        void leggiRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        if (Wire.endTransmission()){
        error = 1; /* errore di connessione */
        return;
        }
        Wire.requestFrom(0x68, 3); /* tre registri da leggere */
        if (Wire.available() != 3){
        error = 2; /* errore di ricezione */
        return;
        }
        HOURS = Wire.read(); /* leggi ore RTC */
        MINUTES = Wire.read(); /* leggi minuti RTC */
        SECONDS = Wire.read(); /* leggi secondi RTC */
        error = 0; /* azzera variabile errore RTC */
        }

        void impostaRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        Wire.write(SECONDS); /* imposta secondi RTC */
        Wire.write(MINUTES); /* imposta minuti RTC */
        Wire.write(HOURS); /* imposta ore RTC */
        Wire.endTransmission(); /* fine trasmissione */
        }

        void setup() {
        Serial.begin(9600);
        Wire.begin(); /* inizializza bus i2c */
        ore = 23;
        minuti = 59;
        HOURS = binBCD(ore);
        MINUTES = binBCD(minuti);
        impostaRTC(); /* imposta RTC alle 23:58 */

        }

        voi loop() {
        leggiRTC();
        ore = BCDbin(HOURS);
        minuti = BCDbin(MINUTES);
        secondi = BCDbin(SECONDS);
        Serial.print(ore, minuti, secondi);
        }

        Questo codice imposta l'orario a 23:59 ogni volta che Arduino si accende. Per evitare questo basta cancellare le righe di impostazione dalla sezione setup() con un secondo caricamento dello sketch modificato.
        La cosa interessante è che con questo sketch noi abbiamo scritto "a mano" il registro per le ore, i minuti e i secondi. Da quello che ho capito vedendo i datasheet dovrebbero esserci anche dei registri per l'allarme, ma non abbiamo ancora provato ad usarli. Comunque puntando a quei registri teoricamente dovrebbe essere possibile impostare l'orario dall'allarme. Però facendo tutto quanto a mano. Comunque preferisco questo ad utilizzare la libreria. Ho capito molto di più il funzionamento ed ho l'impressione di avere pieno controllo su quello che faccio.

          • Lello Guidi il 25 Aprile 2018 alle 15:01
          • Rispondi

          Ciao,
          volevo provare il listato senza uso di librerie, ma mi da errore subito sulla linea #define.
          Manca la definizione ?
          Cosa altro devo includere per farlo funzionare?
          Dove tre tutto il documento sul Forum di Arduino?
          Grazie
          e saluti

          1. Ciao Lello,
            questo articolo tratta la lettura del DS3231 mediante la libreria di JChristensen che ho linkato, senza di essa è normale che u riceva un errore non è scritto per funzionare senza la libreria.

          • Lello Guidi il 26 Aprile 2018 alle 22:49
          • Rispondi

          Questo listato non funziona con Arduino UNO, sulla seriale vedo sempre l’orario impostato inizialmente.
          Con il comando “Serial.println(error);” vedo che mi da errore 2, da questa istruzione “Wire.requestFrom(0x68,3);”.
          Saluti

          1. Ciao Lello,
            verifica che l’indirizzo IIC della tua DS3231 sia il medesimo impostato nella libreria e indicami quale esempio stai utilizzando della libreria proposta.

    • Boris il 7 Aprile 2017 alle 16:19
    • Rispondi

    Ciao Mauro.
    Innanzitutto, vorrei farti i miei complimenti per il Blog.
    Sto facendo una stazione metro de esterno con tutti i sensori per gas nel aria MQ e DHT11 e ho pensato di mettere un Trasmettitore 433mhz per inviare tutti i dati al interno e fin qui tutto ok:
    Pero adesso mi sono imbattuto in un piccolo problemino, speravo mi potessi dare una mano.
    Sto cercando di collegare Arduino NANO sullo schermo 3.5′ e ho messo anche Ricevitore 433mhz e i pin bastano.
    Pero, mettendo lo schermo mi si occupano i pin Analogici da A0-A4.
    Adesso questo mi crea il problema se voglio mettere pure un RTC con I2C perche come spieghi tu servono A4 e A5 dei pin Analogici.
    Arduino nano ne ha fino A7.
    Per di più anche Digitali sono occupati dal D2 a D9

    Grazie e buona giornata a tutti!

    1. Ciao Boris,
      controlla sullo schema e le caratteristiche dell’arduino nano se i pin SDA ed SCL siano corrispondenti ad A4 ed A5, poi valuta se puoi liberarli collegando i pin del display ad altri rimasti liberi.

    • Giuseppe il 17 Aprile 2017 alle 10:13
    • Rispondi

    salve a tutti,
    ho un modulo 3231 montato con uno schift register 74hc595 e display LCD.
    Il tutto funziona, ma come mai ogni 10 ore circa il modulo sfasa l’ora di circa 1 minuto e 30 secondi indietro?
    Grazie a tutti e buona Pasquetta.
    Giuseppe

    1. Ciao Giuseppe,
      che questo tipo di modulo abbia una perdita è comprensibile, la tua mi sembra eccessiva.
      Lascio il commento on-line perché altri, più esperti, possano darti maggiori spiegazioni.

    • Valerio il 24 Aprile 2017 alle 22:53
    • Rispondi

    Salve,

    ho un DS3231 AT24C32 IIC collegato ad Arduino UNo secondo questo schema: SCL-> pin4, SDA-> pin5. Uso un IDE su mac versione 1.6.9 e ho scaricato le librerie DS3232RTC e Time come da vostro suggerimento.
    Ho caricato lo sketch TimeRTC.ino ma ricevo questo errore:
    chmod: Unable to change file mode on /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Read-only file system
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Permission denied
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: exec: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: cannot execute: Undefined error: 0

    e nella finestra seriale la data è fissa su Sun 00.00.2000 — 00:00:0

    Cosa sbaglio? Ti rignrazio se vorrai aiutarmi 🙂

    Valerio

    1. Ciao Valerio,
      l’errore non è relativo allo sketch o alle librerie, sembra più un problema di filesystem: “chmod: Unable to change file mode on ” e a seguire “Read-only file system” che mi fa pensare tu possa avere qualche problema sul mac o con l’installazione dell’IDE.
      Prova ad aggiornare l’IDE alla 1.8.2 e installare le librerie solo da Library Manager

    • Lasagni Mirco il 23 Giugno 2017 alle 22:32
    • Rispondi

    Dov’è la riga a cui fai riferimento dicendo
    nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:
    Io non ho capito dov’è la riga inserita/modificata da te

    1. Ciao Mirco,
      nell’immagine del monitor seriale, la riga che devi inviare è yyyy,mm,dd,hh,mm,ss come puoi leggere e serve a configurare la data e ora corrente.

    • FAA il 22 Ottobre 2017 alle 12:01
    • Rispondi

    Ciao Mauro
    Complimenti e grazie per le informazioni che condividi sul sito sto passandolo al setaccio 🙂
    Ho due problemi con la scheda ds3231: non mi legge la temperatura (t:0.00) secondo se levo la batteria (nuova) non mantiene l’ora…
    Hai suggerimenti grazie

    1. Ciao FAA,
      puoi provare a togliere la batteria, se alimentato non perderai l’ora ma dubito cambi qualcosa.
      Se vuoi resettare il DS3231 completamente togli la batteria e l’alimentazione .. perderai tutte le impostazioni ma potresti risolvere.

    • FAA il 24 Ottobre 2017 alle 09:33
    • Rispondi

    Grazie Mauro
    Già provato ma nulla.. si resetta sempre.. provo a ordinarne un altro;
    Nel frattempo smanetterò con rs485
    🙂

    1. Ciao FAA,
      potrebbe essere difettoso.

    • Pietro il 16 Dicembre 2017 alle 08:00
    • Rispondi

    Ciao, ottimo tutorial… una domanda: come posso programmare gli allarmi interno del modulo rtv ad ogni ora?
    In modo da farli inviare un impulso?

    1. Ciao Pietro,
      puoi leggere e comprendere qualche sketch tipo la centralina di irrigazione per capire come su utilizza il comando if in queste situazioni.

    • Giorgio il 25 Marzo 2018 alle 00:06
    • Rispondi

    Ciao. Seguo sempre con molto interesse i tuoi progetti, complimenti.
    Volevo sapere se con il modulo DS3231 non sia possibile creare un cronometro con approssimazione al centesimo di secondo, ed in caso affermativo se si possa avere qualche sketch di esempio.
    Ho già provato ad usare la funzione millis(), ma non va bene nel mio caso, in quanto serve una buona precisione.
    Grazie.

    Giorgio

    1. Ciao Giorgio,
      non penso che questo modulo supporti tale precisione o informazione.

    • Carmine il 10 Ottobre 2018 alle 15:57
    • Rispondi

    Ciao Mauro ti volevo chiedere un informazione un paio di anni fa realizzai un controllo automatico della campanella a scuola utilizzando una scheda arduino e RTC DS1307 fino a l’anno scorso andava bene perchè l’orario era uguale per tutti i giorni della settimana, quest’anno invece la dirigente ha voluto un orario che i giorni dispari abbiamo 6 ore e l’ultima ora suona dalle 13.05 alla 13.55 mentre i giorni pari abbiamo 5 ore l’ultima suona dalle 12.15 alle 13.10. quindi per questa diversificazione mi comporta ad avere un informazione da parte del RTC sui 7 giorni della settimana come posso mfre per tirarli fuori dal RTC ti ringrazio e ti saluto Carmine

    1. Ciao Carmine,
      sul blog ci dovrebbe essere un articolo o un commento relativo a come ottenere l’informazione che ti serve.
      Prova a cercare, magari in un articolo dedicato al DS1307 perché nel DS3231 ( questo in cui hai inserito il commento ) potrebbe essere differente.

    • franco il 15 Maggio 2019 alle 20:01
    • Rispondi

    Mi puoi dire se la data ritornata dall’RTC è comprensiva dell’anno bisestile ?

    1. Ciao Franco,
      a memoria si, comprende l’informazione sulla giornata del 29 febbraio quando l’anno la comprende.
      Per esserne certo al 100% ti consiglio comunque di leggere la documentazione della libreria ed eventualmente il datasheet del DS3231.

    • Roberto il 14 Marzo 2020 alle 17:20
    • Rispondi

    Ciao Mauro,
    mi indica errore durante la compilazione della scheda Arduino Genuino uno, quindi per scaricare la libreria Time, entro nel link da te indicato.
    Ma devo andare dove indica … Included with the Teensyduino Installe, scaricando un programma da 66 Mb ?
    Grazie

    1. Ciao Roberto,
      è sufficiente la sola libreria Time ( .h e .cpp ) che puoi scaricare dal GitHub dell’autore, secondo link nella pagina che ti si apre con il mio link.

    • Edi Lantieri il 19 Marzo 2020 alle 19:00
    • Rispondi

    Buonasera, stoprovando un ds3231 con un arduino uno r3.
    Ho caricato il programma SetSerial.ino prelevato dalle librerie, così come indicato nel precedente tutorial.
    Parte con una data 1 gen 1970
    scrivo sulla linea dei comandi 2020,03,19,18,50,00 e click (send)
    il dispositivo corregge la data, mi dice Sync Pailed, e il resoconto della temperatura mi da 0 °c 32F
    Cosa non funziona?
    Facendo ripartire il programma, per i primi 5 secondi mi da la data nuova, poi dopo un Sync failed ritorna quella base del1 gen 1970
    Potete darmi una mano?
    Grazie

    1. Ciao Edi,
      sembra un problema del modulo, di solito una volta impostata la data essa non si resetta da sola.

    • Michele il 8 Aprile 2020 alle 14:48
    • Rispondi

    Ciao Mauro! Io ho il problema che se spengo arduino e quindi disalimento l’rtc, all’ accensione sucessiva l’Rtc mi segna la data e l’ora dall’ultima volta che l’ho spento. Quindi in poche parole finchè è disalimentato non va avanti con il tempo. La batteria tampone funziona perchè se provo a staccarla la data riparte dall’anno 2000.
    Come potrei risolvere? Grazie

    1. Ciao Michele,
      hai disabilitato le righe di reimpostazione dell’ora ad ogni riavvio?

    • pasquale il 11 Aprile 2020 alle 16:00
    • Rispondi

    ciao mauro volevo chiederti una cosa se la temperatura che rileva il sensore la si può visualizzare sul display grazie buon lavoro

    1. Ciao Pasquale,
      il DS3231 è un RTC non un sensore di temperatura.

  1. […] « RTC DS3231 per arduino […]

  2. […] RTC DS3231 […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.