{"id":16148931,"url":"https://github.com/erriez/erriezds1307","last_synced_at":"2025-07-18T11:05:05.044Z","repository":{"id":85067591,"uuid":"292927207","full_name":"Erriez/ErriezDS1307","owner":"Erriez","description":"DS1307 RTC (Real Time Clock) library for Arduino","archived":false,"fork":false,"pushed_at":"2020-09-09T19:33:00.000Z","size":1399,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-04T14:47:08.370Z","etag":null,"topics":["alarm","arduino","avr","date","documentation","ds1307","epoch","esp32","esp8266","examples","i2c","interrupt","library","rtc","serial","sqw","terminal","time","unix","uno"],"latest_commit_sha":null,"homepage":"https://github.com/Erriez/ErriezArduinoLibraries","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Erriez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-04T19:10:03.000Z","updated_at":"2024-03-21T05:04:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"2664d2b5-757f-49f2-8a61-7b4989732ada","html_url":"https://github.com/Erriez/ErriezDS1307","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Erriez/ErriezDS1307","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erriez%2FErriezDS1307","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erriez%2FErriezDS1307/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erriez%2FErriezDS1307/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erriez%2FErriezDS1307/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Erriez","download_url":"https://codeload.github.com/Erriez/ErriezDS1307/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Erriez%2FErriezDS1307/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265746405,"owners_count":23821644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alarm","arduino","avr","date","documentation","ds1307","epoch","esp32","esp8266","examples","i2c","interrupt","library","rtc","serial","sqw","terminal","time","unix","uno"],"created_at":"2024-10-10T00:35:19.137Z","updated_at":"2025-07-18T11:05:05.037Z","avatar_url":"https://github.com/Erriez.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DS1307 high precision I2C RTC library for Arduino\n\n[![Build Status](https://travis-ci.org/Erriez/ErriezDS1307.svg?branch=master)](https://travis-ci.org/Erriez/ErriezDS1307)\n\nThis is a DS1307 I2C RTC library for Arduino.\n\n![DS1307](https://raw.githubusercontent.com/Erriez/ErriezDS1307/master/extras/DS1307.png)\n\n## Library features\n\n* libc `\u003ctime.h\u003e` compatible\n* Read/write date/time `struct tm`\n* Set/get Unix epoch UTC `time_t`\n* Set/get time (hour, min, sec)\n* Set/get date and time (hour, min, sec, mday, mon, year, wday)\n* Control `SQW` signal (disable / 1Hz / 4096Hz / 8192Hz / 32768Hz)\n* Full RTC register access\n\n## Hardware\n\nAny Arduino hardware with a TWI interface and `Wire.h` support.\n\n## Pins\n\n| Pins board - DS1307            | VCC  | GND  |    SDA     |    SCL     |    SQW     |\n| ------------------------------ | :--: | :--: | :--------: | :--------: | :--------: |\n| Arduino UNO (ATMega328 boards) |  5V  | GND  |     A4     |     A5     | D2 (INT0)  |\n| Arduino Mega2560               |  5V  | GND  |    D20     |    D21     | D2 (INT4)  |\n| Arduino Leonardo               |  5V  | GND  |     D2     |     D3     | D7 (INT6)  |\n| Arduino DUE (ATSAM3X8E)        | 3V3  | GND  |     20     |     21     |     2      |\n| ESP8266                        | 3V3  | GND  | GPIO4 (D2) | GPIO5 (D1) | GPIO0 (D3) |\n| ESP32                          | 3V3  | GND  |   GPIO21   |   GPIO22   |   GPIO0    |\n\nNote: Tested ESP8266 / ESP32 boards:\n\n* **ESP8266 boards**: ESP12F / WeMos D1 \u0026 R2 / Node MCU v2 / v3\n* **ESP32 boards:** WeMos LOLIN32 / LOLIN D32\n\nOther unlisted MCU's may work, but are not tested.\n\n## Examples\n\nArduino IDE | Examples | Erriez DS1307 RTC:\n\n* [Alarm](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307Alarm/ErriezDS1307Alarm.ino) Software alarm\n* [Bare](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307Bare/ErriezDS1307Bare.ino) Bare example without a library\n* [DumpRegisters](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307DumpRegisters/ErriezDS1307DumpRegisters.ino) Dump registers for debugging\n* [SetBuildDateTime](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307SetBuildDateTime/ErriezDS1307SetBuildDateTime.ino) Set build date/time\n* [SetGetDateTime](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307SetGetDateTime/ErriezDS1307SetGetDateTime.ino) Set/get date and time\n* [SetGetTime](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307SetGetTime/ErriezDS1307SetGetTime.ino) Set/get time\n* [SQWInterrupt](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307SQWInterrupt/ErriezDS1307SQWInterrupt.ino) 1Hz SQW interrupt pin\n* [Terminal](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307Terminal/ErriezDS1307Terminal.ino) Serial terminal example\n* [Test](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307Test/ErriezDS1307Test.ino) Regression test\n* [WriteRead](https://github.com/Erriez/ErriezDS1307/blob/master/examples/ErriezDS1307WriteRead/ErriezDS1307WriteRead.ino) Write/read `struct tm`\n\n## Documentation\n\n* [Doxygen online HTML](https://erriez.github.io/ErriezDS1307)\n* [Doxygen PDF](https://github.com/Erriez/ErriezDS1307/blob/master/ErriezDS1307.pdf)\n* [DS1307 datasheet](https://github.com/Erriez/ErriezDS1307/blob/master/extras/DS1307.pdf)\n\n\n## Usage\n\n**Initialization**\n\n```c++\n#include \u003cWire.h\u003e\n#include \u003cErriezDS1307.h\u003e\n\n// Create RTC object\nErriezDS1307 rtc;\n\nvoid setup()\n{\n    // Initialize TWI with a 100kHz (default)\n    Wire.begin();\n    Wire.setClock(100000);\n    \n    // Initialize RTC\n    while (!rtc.begin()) {\n        Serial.println(F(\"RTC not found\"));\n        delay(3000);\n    }\n}\n```\n\n**Check oscillator status at startup**\n\n```c++\n// Check oscillator status\nif (!rtc.isRunning()) {\n    // Error: RTC oscillator stopped. Date/time cannot be trusted. \n    // Set new date/time before reading date/time.\n\n    // Enable oscillator\n    rtc.clockEnable(true);\n}\n```\n\n**Set time**\n\n```c++\n// Write time to RTC\nif (!rtc.setTime(12, 0, 0)) {\n    // Error: Set time failed\n}\n```\n\n**Get time**\n\n```c++\nuint8_t hour;\nuint8_t minute;\nuint8_t second;\n\n// Read time from RTC\nif (!rtc.getTime(\u0026hour, \u0026minute, \u0026second)) {\n    // Error: RTC read failed\n}\n```\n\n**Set date and time**\n\n```c++\n// Write RTC date/time: 13:45:09  31 December 2019  2=Tuesday\nif (!rtc.setDateTime(13, 45, 9,  31, 12, 2019,  2) {\n    // Error: RTC write failed\n}\n```\n\n**Get date and time**\n\n```c++\nuint8_t hour;\nuint8_t min;\nuint8_t sec;\nuint8_t mday;\nuint8_t mon;\nuint16_t year;\nuint8_t wday;\n\n// Read RTC date/time\nif (!rtc.getDateTime(\u0026hour, \u0026min, \u0026sec, \u0026mday, \u0026mon, \u0026year, \u0026wday) {\n    // Error: RTC read failed\n}\n\n// hour: 0..23\n// min: 0..59\n// sec: 0..59\n// mday: 1..31\n// mon: 1..12\n// year: 2000..2099\n// wday: 0..6 (0=Sunday .. 6=Saturday)\n```\n\n**Write date/time struct tm**\n\n```c++\nstruct tm dt;\n\ndt.tm_hour = 12;\ndt.tm_min = 34;\ndt.tm_sec = 56;\ndt.tm_mday = 29;\ndt.tm_mon = 1; // 0=January\ndt.tm_year = 2020-1900;\ndt.tm_wday = 6; // 0=Sunday\n\nif (!rtc.write(\u0026dt)) {\n    // Error: RTC Read failed\n}\n```\n\n**Read date/time struct tm**\n\n```c++\nstruct tm dt;\n\n// Read RTC date/time\nif (!rtc.read(\u0026dt)) {\n    // Error: RTC read failed\n}\n```\n\n**Read Unix Epoch UTC**\n\n```c++\ntime_t t;\n\n// Read Unix epoch UTC from RTC\nif (!rtc.getEpoch(\u0026t)) {\n    // Error: RTC read failed\n}\n```\n\n**Write Unix Epoch UTC**\n\n```c++\n// Write Unix epoch UTC to RTC\nif (!rtc.setEpoch(1599416430UL)) {\n    // Error: Set epoch failed\n}\n```\n\n**Square Wave Out (SQW)**\n\n```c++\nrtc.setSquareWave(SquareWaveDisable);\t// Disable\nrtc.setSquareWave(SquareWave1024Hz);\t// 1024Hz\nrtc.setSquareWave(SquareWave4096Hz);\t// 4096Hz\nrtc.setSquareWave(SquareWave8192Hz);\t// 8192Hz\nrtc.setSquareWave(SquareWave32768Hz);\t// 32768Hz\n```\n\n\n## Library dependencies\n\n* `Wire.h`\n* `Terminal.ino` requires `ErriezSerialTerminal` library.\n\n\n## Library installation\n\nPlease refer to the [Wiki](https://github.com/Erriez/ErriezArduinoLibraries/wiki) page.\n\n\n## More Arduino Libraries from Erriez\n\n* [Erriez Libraries](https://github.com/Erriez/ErriezArduinoLibraries)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferriez%2Ferriezds1307","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferriez%2Ferriezds1307","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferriez%2Ferriezds1307/lists"}