Arduino-biblioteket for å sjekke datoen og temperaturen til den integrerte DS3231 via I2C

Arduino-biblioteket for å sjekke datoen og temperaturen til den integrerte DS3231 via I2C

Arduino-biblioteket for å sjekke datoen og temperaturen til den integrerte DS3231 via I2C

OPPDATERT: Besøk også den nye bibliotek for å administrere dato og klokkeslett med DS3231 RTC-modulen og Arduino med forbedringer som sesongmessige tider.

Driften av IC de sanntidsklokker (RTC) mest populære som styres ved hjelp av buss I2C Det er vanligvis veldig likt. Ved siden av Trådbibliotek de Arduino forenkler kommunikasjonen med enheter betydelig To-leder seriell grensesnitt (TWI), I2C, spesifikk.

Innholdsfortegnelse

    Grovt sett består prosessen av

    1. Start kommunikasjon som slave eller master (angitt som standard) med funksjonen Wire.begin(adresse). Hvis "adresse" er utelatt, begynner kommunikasjonen med μC læreren til buss I2C.

    2. Aktiver kommunikasjon I2C med enheten gjennom minneadressen der den er plassert, ved å bruke kommandoen Wire.beginTransmission(adresse).

    3. Skriv en ordre i buss I2C for å fortelle enheten hvilken operasjon du vil at den skal utføre, ved å bruke Wire.write(kommando), hvor "rekkefølge" er operasjonskoden.

    4. Deaktiver kommunikasjon for å frigjøre buss I2C med funksjon Wire.endTransmission().

    5. Be enheten om å sende en viss mengde data som tilsvarer operasjonen som er forespurt (i dette tilfellet dato og klokkeslett) med funksjonen Wire.requestFrom(adresse,beløp).

    6. Vent til de forespurte dataene med funksjonen er tilgjengelige for lesing Wire.tilgjengelig (), som returnerer antall data som allerede er mottatt og kan leses.

    7. Les dataene sendt av enheten (den sanntidsklokke, i dette tilfellet) ved å bruke funksjonen Wire.read() så mange ganger som bytes angitt Wire.tilgjengelig () som er tilgjengelige.

    8. Normalt sendes dataene i svært kompakte formater, så det er svært sannsynlig at det vil være nødvendig å tolke dataene som mottas på en måte som tilsvarer representasjonen av dataene laget i programmet som bruker enheten.

    Når det gjelder DS3231 (og kompatible i samme serie, for eksempel DS3232) og tolkningen av dataene, i henhold til spesifikasjonene til den integrerte, for eksempel er verdiene til de forskjellige sifrene som representerer tiden representert i binærkodet desimal (BCD) som vil være mer praktisk å uttrykke som en desimalverdi (a byte) å bruke i Arduino

    På samme linje uttrykkes temperaturen som en byte in tos komplement for heltallsdelen og to bits for trinnet, med en oppløsning på en kvart grad, av desimaldelen. Disse og andre aspekter ved datarepresentasjon på klokken har blitt diskutert uttømmende i bibliotekkoden nedenfor. DS3231

    For å sjekke temperaturen med dette biblioteket, bruk bare metoden lese_temperatur() av objektet DS3231 instansiert i begynnelsen. For å lese dato og klokkeslett blir de først lastet inn og deretter forespurt i et av formatene (kompakt, menneskelig...) tilgjengelig for ulike bruksområder, dokumentert i overskriftsdokumentet til kodebiblioteket nedenfor.

    Følgende er eksempelkode for å vise hvordan du bruker biblioteket. Som nevnt ovenfor avleses temperaturen ganske enkelt med funksjonen lese_temperatur() av klasseobjektet DS3231 men for å ignorere feil i avlesningen, brukes to konstanter som lagrer henholdsvis maksimum og minimum temperatur på enheten i henhold til databladet og som leses med de tilsvarende funksjonene.

    Temperaturavlesningen utføres i to trinn: først lastes verdien, slik at ulike bruk av dato eller klokkeslett vil være konsekvente (de vil ikke vise en høyere verdi i ugunstige tilfeller), og for det andre brukes den i henhold til formatet som trengs. Eksempelprogrammet (som ikke er veldig praktisk, selv om det forklarer alle mulighetene) viser alle tilgjengelige formater

    • Funksjonen date_time_value() som returnerer en peker til en matrise chariot (bytes) som inneholder de syv numeriske verdiene som representerer dato og klokkeslett på en klokke DS3231 konvertert til desimal (de er i BCD på enheten)

    • Bruker funksjonen ukedagnummer() Det oppnås en verdi som tilsvarer nummeret på ukedagen som starter på søndag. For å vise den som tekst, brukes en matrise og en trekkes fra for å starte på indeks null, søndag.

    • For å se datoen i et "lokalt" (spansk) format, bruk funksjonen menneske_dato(), som returnerer en peker til en streng der datoen er representert i formatet DD/MM/ÅÅÅÅ, der DD er dagen representert med 2 sifre, MM er måneden med 2 sifre og ÅÅÅÅ er året med 4 sifre.

    • Funksjonen menneskelig_time() returnerer tiden i formatet tt:mm:ss, der tt er timen (i 24-format) representert med 2 sifre, mm er minuttene med 2 sifre og ss er sekundene med 2 sifre.

    • For enkelt å bruke dato og klokkeslett på loggfiler funksjonen er programmert compact_date_time(), som leverer verdien av datoen og klokkeslettet i formatet ÅÅMMDDtthmmss med AA som året representert med de to siste sifrene, MM måneden med 2 sifre, DD dagen med 2 sifre, tt timen (i 2-format) med 24 sifre, mm minuttene med 2 sifre og ss sekundene med 2 sifre. Dette formatet, selv om det er tekst, tar liten plass og tillater veldig enkel alfabetisk rekkefølge.

    • Funksjonen date_time_MySQL() tjener til å presentere dato og klokkeslett i formatet som brukes av databaseadministratoren MySQL (eller den nye og friere mariadb) ÅÅÅÅ-MM-DD tt:mm:ss, der ÅÅÅÅ er året representert med 4 sifre, MM er måneden med 2 sifre, DD er dagen med 2 sifre, tt er timen (i 24-format) med 2 sifre , mm er minuttene med 2 sifre og sekunder med 2 sifre.

    Selv om det er mange formater for å representere dato og klokkeslett, er det kanskje ikke den du trenger der, men sikkert basert på et av de eksisterende og bruke det som eksempel, vil det være enkelt å legge til en ny metode iht. andre spesifikasjoner. Vær så snill, hvis du legger til nye funksjoner, del koden (slipp den ut!) og forklar oss hvordan den fungerer, slik at vi kan gjøre biblioteket bedre litt etter litt. Takk!

    Utdataene fra eksempelprogrammet ovenfor kan være noe sånt som det som vises i følgende bilde: en liste med 7 verdier (sekunder, minutter, time, ukedag, måned, måned og år) datoen og tiden uttrykt på en "menneskelig" måte (i henhold til spansk stil) tiden som et helt tall i firesifret klokkeformat, dato og klokkeslett i databaseformat MySQL, dato og klokkeslett i kompakt format (for logger) og den indre temperaturen til DS3231.

    Arduino-konsoll utgangsbibliotek sanntidsklokke (RTC) og temperatur DS3231 via I2C-buss

    Legg inn kommentar

    Du kan ha gått glipp av