ds3231

Crates.iods3231
lib.rsds3231
version0.3.0
created_at2025-05-04 20:34:06.181116+00
updated_at2025-06-09 13:57:12.166247+00
descriptionA platform-agnostic driver for the DS3231 precision real-time clock
homepage
repositoryhttps://github.com/liebman/ds3231-rs
max_upload_size
id1659915
size308,752
(liebman)

documentation

https://docs.rs/ds3231

README

DS3231 Real-Time Clock Driver

Crates.io Documentation License Coverage Status

A platform-agnostic Rust driver for the DS3231 Real-Time Clock, built on the embedded-hal ecosystem. The DS3231 is a low-cost, extremely accurate I²C real-time clock (RTC) with an integrated temperature-compensated crystal oscillator (TCXO).

  • Both blocking and async I²C operation support
  • Full register access (time/date, alarms, control, status)
  • Optional logging support via log or defmt
  • No unsafe code
  • Comprehensive error handling

Usage

Add this to your Cargo.toml:

[dependencies]
ds3231 = "0.3.0"

Blocking Example

use ds3231::{DS3231, Config, TimeRepresentation, SquareWaveFrequency, InterruptControl, Oscillator};

// Create configuration
let config = Config {
    time_representation: TimeRepresentation::TwentyFourHour,
    square_wave_frequency: SquareWaveFrequency::Hz1,
    interrupt_control: InterruptControl::SquareWave,
    battery_backed_square_wave: false,
    oscillator_enable: Oscillator::Enabled,
};

// Initialize device with I2C
let mut rtc = DS3231::new(i2c, 0x68);

// Configure the device
rtc.configure(&config)?;

// Get current date/time
let datetime = rtc.datetime()?;

Async Example

Enable the async feature in your Cargo.toml and use with async/await:

use ds3231::asynch::DS3231;

// Initialize device
let mut rtc = DS3231::new(i2c, 0x68);

// Configure asynchronously
rtc.configure(&config).await?;

// Get current date/time asynchronously
let datetime = rtc.datetime().await?;

Features

The crate can be compiled with the following features:

  • async: Enables async I²C support
  • log: Enables logging via the log crate
  • defmt: Enables logging via the defmt crate
  • temperature_f32 - Enables temperature reading as f32

License

Licensed under either of:

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Commit count: 62

cargo fmt