Libreria Arduino per controllare la data e la temperatura del DS3231 integrato tramite I2C

Libreria Arduino per controllare la data e la temperatura del DS3231 integrato tramite I2C

Libreria Arduino per controllare la data e la temperatura del DS3231 integrato tramite I2C

AGGIORNATO: visita anche il nuovo libreria per gestire data e ora con il modulo RTC DS3231 e Arduino con miglioramenti come l'orario stagionale.

Il funzionamento di IC de orologi in tempo reale (RTC) più popolari che vengono controllati utilizzando il file autobus I2C Di solito è molto simile. Oltre al Libreria di fili de Arduino semplifica notevolmente le comunicazioni con i dispositivi Interfaccia seriale a due fili (TWI), I2C, specifica.

Sommario

    In generale, il processo consiste in

    1. Avviare le comunicazioni come slave o master (impostato per impostazione predefinita) con la funzione Wire.begin(indirizzo). Se "indirizzo" viene omesso, le comunicazioni iniziano con il μC l'insegnante di autobus I2C.

    2. Attiva la comunicazione I2C con il dispositivo attraverso l'indirizzo di memoria in cui si trova, utilizzando il comando Wire.beginTransmission(indirizzo).

    3. Scrivi un ordine nel autobus I2C per indicare al dispositivo l'operazione che desideri che esegua, utilizzando Wire.write(comando), in cui "ordine" è il codice dell'operazione.

    4. Disabilita le comunicazioni per rilasciare il file autobus I2C con funzione Wire.endTransmission().

    5. Richiedere al dispositivo di inviare una certa quantità di dati che corrispondono all'operazione richiesta (in questo caso la data e l'ora) con la funzione Wire.requestFrom(indirizzo,importo).

    6. Attendere che i dati richiesti con la funzione siano disponibili per la lettura Wire.available (), che restituisce il numero di dati che sono già stati ricevuti e possono essere letti.

    7. Leggere i dati inviati dal dispositivo (the orologio in tempo reale, in questo caso) utilizzando la funzione Filo.read() tante volte quanti sono i byte indicati Wire.available () che sono disponibili.

    8. Normalmente i dati vengono inviati in formati molto compatti quindi è molto probabile che sarà necessario interpretare i dati ricevuti in modo che corrisponda alla rappresentazione dei dati fatta nel programma che utilizza il dispositivo.

    Per quanto riguarda il DS3231 (e quelli compatibili della stessa serie, come il DS3232) e l'interpretazione dei dati, secondo le specifiche dell'integrato, ad esempio, i valori delle diverse cifre che rappresentano l'ora sono rappresentati in decimale in codice binario (BCD) che sarà più conveniente esprimere come valore decimale (a byte) da utilizzare in Arduino

    Sulla stessa riga la temperatura è espressa in byte in complemento a due per la parte intera e due bit per il passo, con risoluzione di un quarto di grado, della parte decimale. Questi e altri aspetti della rappresentazione dei dati sull'orologio sono stati discussi in modo esaustivo nel codice della libreria riportato di seguito. DS3231

    Per controllare la temperatura con questa libreria, basta usare il metodo leggi_temperatura() dell'oggetto DS3231 istanziato all'inizio. Per leggere la data e l'ora, vengono prima caricate e poi richieste in uno dei formati (compatto, umano...) disponibili per diversi usi, documentati nel documento header della libreria di codici sottostante.

    Di seguito è riportato un codice di esempio per mostrare come utilizzare la libreria. Come accennato in precedenza, la temperatura viene semplicemente letta con la funzione leggi_temperatura() dell'oggetto della classe DS3231 ma, per ignorare errori nella lettura, vengono utilizzate due costanti che memorizzano rispettivamente la temperatura massima e minima del dispositivo secondo la scheda tecnica e che vengono lette con le relative funzioni.

    La lettura della temperatura viene effettuata in due fasi: prima viene caricato il valore, in modo che i diversi utilizzi della data o dell'ora siano coerenti (non mostreranno un valore più alto in casi sfavorevoli) e in secondo luogo viene utilizzata secondo il formato che è necessario. Il programma di esempio (che non è molto pratico, anche se spiega tutte le possibilità) mostra tutti i formati disponibili

    • La funzione data_ora_valore() che restituisce un puntatore a un array serbatoio (byte) contenente i sette valori numerici che rappresentano la data e l'ora su un orologio DS3231 convertiti in decimale (sono in BCD sul dispositivo)

    • Usando la funzione numero_giorno_della_settimana() Si ottiene un valore che corrisponde al numero del giorno della settimana che inizia con la domenica. Per visualizzarlo come testo, viene utilizzata una matrice e viene sottratto uno per iniziare dall'indice zero, domenica.

    • Per consultare la data in formato "locale" (spagnolo), utilizzare la funzione data_umana(), che restituisce un puntatore a una stringa in cui la data è rappresentata nel formato GG/MM/AAAA, dove GG è il giorno rappresentato con 2 cifre, MM è il mese con 2 cifre e AAAA è l'anno con 4 cifre.

    • La funzione ora_umana() restituisce l'ora nel formato hh:mm:ss, dove hh è l'ora (in formato 24) rappresentata con 2 cifre, mm sono i minuti con 2 cifre e ss sono i secondi con 2 cifre.

    • Per utilizzare facilmente la data e l'ora log files la funzione è stata programmata compact_date_time(), che fornisce il valore della data e dell'ora nel formato AAMMGGhhmmss dove AA è l'anno rappresentato con le ultime 2 cifre, MM il mese con 2 cifre, GG il giorno con 2 cifre, hh l'ora (in formato 24) con 2 cifre, mm i minuti a 2 cifre e ss i secondi a 2 cifre. Questo formato, anche se è testo, occupa poco spazio e consente un ordine alfabetico molto semplice.

    • La funzione data_ora_MySQL() serve a presentare la data e l'ora nel formato utilizzato dal gestore del database MySQL (o il nuovo e più libero MariaDB) AAAA-MM-GG hh:mm:ss, dove AAAA è l'anno rappresentato con 4 cifre, MM è il mese con 2 cifre, GG è il giorno con 2 cifre, hh è l'ora (in formato 24) con 2 cifre , mm sono i minuti a 2 cifre e i secondi a 2 cifre.

    Sebbene esistano molti formati con cui rappresentare la data e l'ora, quello che ti serve potrebbe non esserci, ma sicuramente basandoti su uno di quelli esistenti e usandolo come esempio, sarà facile aggiungere un nuovo metodo in base a altre specifiche. Per favore, se aggiungi nuove funzioni, condividi il codice (rilascialo!) e spiegaci come funziona, così potremo migliorare poco a poco la libreria. Grazie!

    L'output del programma di esempio sopra potrebbe essere qualcosa di simile a quello mostrato nell'immagine seguente: un elenco di 7 valori (secondi, minuti, ora, giorno della settimana, giorno del mese, mese e anno) la data e l'ora espressa in modo "umano" (secondo lo stile spagnolo) l'ora come numero intero nel formato orologio a quattro cifre, la data e l'ora nel formato database MySQL, data e ora in formato compatto (ad es i registri) e la temperatura interna del DS3231.

    Libreria di output della console Arduino orologio in tempo reale (RTC) e temperatura DS3231 tramite bus I2C

    Invia commento

    Potresti aver perso