Arduino-bibliotek för att kontrollera datum och temperatur för den integrerade DS3231 via I2C

Arduino-bibliotek för att kontrollera datum och temperatur för den integrerade DS3231 via I2C

Arduino-bibliotek för att kontrollera datum och temperatur för den integrerade DS3231 via I2C

UPPDATERAD: Besök även den nya bibliotek för att hantera datum och tid med DS3231 RTC-modulen och Arduino med förbättringar som säsongsbunden tid.

Driften av IC de realtidsklockor (RTC) mest populära som styrs med hjälp av buss I2C Det brukar vara väldigt likt. Förutom Trådbibliotek de Arduino förenklar kommunikationen med enheter avsevärt Tvåtråds seriellt gränssnitt (TWI), I2C, specifik.

Innehållsförteckning

    I stort sett består processen av

    1. Initiera kommunikation som slav eller master (inställd som standard) med funktionen Wire.begin(adress). Om "adress" utelämnas börjar kommunikationen med μC läraren i buss I2C.

    2. Aktivera kommunikation I2C med enheten genom minnesadressen där den finns, med kommandot Wire.beginTransmission(adress).

    3. Skriv en beställning i buss I2C för att tala om för enheten vilken operation du vill att den ska utföra, med hjälp av Wire.write(kommando), där "ordning" är operationskoden.

    4. Inaktivera kommunikation för att frigöra buss I2C med funktion Wire.endTransmission ().

    5. Be att enheten skickar en viss mängd data som motsvarar den åtgärd som har begärts (i detta fall datum och tid) med funktionen Wire.requestFrom(adress,belopp).

    6. Vänta tills de begärda uppgifterna med funktionen är tillgängliga för läsning Wire.available (), som returnerar antalet data som redan har tagits emot och kan läsas.

    7. Läs data som skickas av enheten (den riktig tids klocka, i det här fallet) med funktionen Wire.read() så många gånger som bytes anges Wire.available () som är tillgängliga.

    8. Normalt skickas data i mycket kompakta format så det är mycket troligt att det kommer att bli nödvändigt att tolka data som tas emot på ett sätt som motsvarar representationen av data som görs i programmet som använder enheten.

    När det gäller DS3231 (och kompatibla sådana i samma serie, såsom DS3232) och tolkningen av data, enligt specifikationerna för den integrerade, till exempel, värdena för de olika siffrorna som representerar tiden representeras i binärt kodad decimal (BCD) vilket är mer bekvämt att uttrycka som ett decimalvärde (a bitgrupp) att använda i Arduino

    På samma rad uttrycks temperaturen som en byte in tvås komplement för heltalsdelen och två bitar för steget, med en upplösning på en fjärdedel av en grad, av decimaldelen. Dessa och andra aspekter av datarepresentation på klockan har diskuterats uttömmande i bibliotekskoden nedan. DS3231

    För att kontrollera temperaturen med detta bibliotek, använd bara metoden read_temperature() av objektet DS3231 instansierat i början. För att läsa datum och tid laddas de först och efterfrågas sedan i ett av formaten (kompakt, mänskligt...) som är tillgängliga för olika användningsområden, dokumenterat i rubrikdokumentet för kodbiblioteket nedan.

    Följande är exempelkod för att visa hur du använder biblioteket. Som nämnts ovan läses temperaturen enkelt av med funktionen read_temperature() av klassobjektet DS3231 men för att ignorera fel i avläsningen används två konstanter som lagrar enhetens maximala respektive lägsta temperatur enligt databladet och som läses med motsvarande funktioner.

    Temperaturavläsningen utförs i två steg: först laddas värdet, så att olika användningar av datum eller tid kommer att vara konsekventa (de kommer inte att visa ett högre värde i ogynnsamma fall) och för det andra används det enligt formatet som behövs. Exempelprogrammet (som inte är särskilt praktiskt, även om det förklarar alla möjligheter) visar alla tillgängliga format

    • Funktionen date_time_value() som returnerar en pekare till en array röding (bytes) som innehåller de sju numeriska värdena som representerar datum och tid på en klocka DS3231 omvandlas till decimal (de är i BCD på enheten)

    • Använda funktionen weekday_number() Ett värde erhålls som motsvarar numret på den veckodag som börjar på söndag. För att visa det som text används en array och en subtraheras för att börja på index noll, söndag.

    • För att se datumet i ett "lokalt" (spanskt) format, använd funktionen mänsklig_datum(), som returnerar en pekare till en sträng där datumet representeras i formatet DD/MM/ÅÅÅÅ, där DD är dagen representerad med 2 siffror, MM är månaden med 2 siffror och ÅÅÅÅ är året med 4 siffror.

    • Funktionen mänsklig_timme() returnerar tiden i formatet hh:mm:ss, där hh är timmen (i 24-format) representerad med 2 siffror, mm är minuterna med 2 siffror och ss är sekunderna med 2 siffror.

    • För att enkelt kunna använda datum och tid på loggfiler funktionen har programmerats compact_date_time(), som levererar värdet för datum och tid i formatet ÅÅMMDDhhmmss där AA är året representerat med de två sista siffrorna, MM är månaden med 2 siffror, DD är dagen med 2 siffror, hh är timmen (i 2-formatet ) med 24 siffror, mm minuterna med 2 siffror och ss sekunderna med 2 siffror. Detta format, även om det är text, tar lite plats och möjliggör mycket enkel alfabetisk ordning.

    • Funktionen date_time_MySQL() tjänar till att presentera datum och tid i det format som används av databashanteraren MySQL (eller det nya och friare mariadb) ÅÅÅÅ-MM-DD hh:mm:ss, där ÅÅÅÅ är året representerat med 4 siffror, MM är månaden med 2 siffror, DD är dagen med 2 siffror, hh är timmen (i 24-format) med 2 siffror , mm är minuter med 2 siffror och sekunder med 2 siffror.

    Även om det finns många format för att representera datum och tid, kanske det du behöver inte finns där, men säkert baserat på ett av de befintliga och med det som exempel så blir det enkelt att lägga till en ny metod enl. andra specifikationer. Vänligen, om du lägger till nya funktioner, dela koden (släpp den!) och förklara för oss hur det fungerar, så att vi kan göra biblioteket bättre lite i taget. Tack!

    Utdata från ovanstående exempelprogram kan vara ungefär det som visas i följande bild: en lista med 7 värden (sekunder, minuter, timme, veckodag, månad, månad och år) datum och tiden uttryckt på ett "mänskligt" sätt (enligt spansk stil) tiden som ett heltal i fyrsiffrigt klockformat, datum och tid i databasformat MySQL, datum och tid i kompakt format (för loggar) och den inre temperaturen på DS3231.

    Arduino-konsolutgångsbibliotek realtidsklocka (RTC) och temperatur DS3231 via I2C-buss

    Post kommentar

    Du kanske har missat