Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Alan-R/simple-max31865-rs

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

simple-max31865

Crates.io Docs.rs License

An easy-to-use Raspberry Pi driver for the MAX31865 RTD to Digital converter

Examples are in the examples directory from the root of the tree.

What works

  • Reading the raw value and the converted temperature value either in f64 or scaled integer forms.
  • Detecting and recovering from errors.
  • Setting the ohmic calibration value.
  • Interaction with the chip works well.
  • Reading temperatures and resistances from PT-100 sensors.
  • Fault detection and recovery.
  • Support for Raspberry Pi (via rppal crate).
  • Tested with Max31856 hardware from Playing With Fusion and an Adafruit clone board, both with a PT100 sensor.

TODO

See src/lib.rs for details.

Future: Testing/Mocking

  • Stub off hardware access by creating abstract implementations of Trait(s) and create minimal Mock unit tests (under a "mock" feature).
  • Create mock implementation of SPI and Pin abstractions (controlled by a "mock" feature).
  • Create "mock" hardware tests which exercise the APIs with mock feature.

Many other thoughts listed in the src/lib.rs file.

Quick Start

Raspberry Pi OS Configuration

  • You need a Raspberry Pi with a working Max31865 HAT attached with a known chip select pin.
  • Enable GPIO/SPI via raspi-config or your OS settings before running.

Add to Cargo.toml

[dependencies]
simple-max31865 = "1.0"

Basic Usage (Raspberry Pi)

use simple_max31865::{decode_fault_status, RTDReader, RTDLeads, FilterHz};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut max = RTDReader::new(24, RTDLeads::Three, FilterHz::Sixty)?; // CS pin 24, 3-wire PT100, 60Hz filter
    let temperature = max.get_temperature()?;
    println!("Temperature: {:.2}°C", temperature);
    let resistance = max.get_resistance()?;
    println!("Resistance: {:.2} Ω", resistance);

    match max.read_temp_100() {
        Ok(temp) => println!("Temperature: {:.2}°C", temp as f64 / 100.0),
        Err(e) => {
            if max.is_max_fault(&e) {
                let status = max.read_fault_status()?;
                println!("Fault: {:?}", decode_fault_status(status));  // Fixed: No ? needed
                let _ = max.clear_fault();
            }
            return Err(e.into());
        }
    }
    Ok(())
}

Configuration Options

The examples (e.g., ice_bath_test) support overriding defaults via CLI arguments or environment variables. This is useful for customizing the chip select pin, lead configuration, or filter without modifying code.

  • CLI Arguments (passed after --):

    • --cs-pin <u8>: GPIO pin for chip select (default: 24).
    • --leads <Two|Three|Four>: RTD lead configuration (default: "Three").
    • --filter <Fifty|Sixty>: Noise filter (default: "Sixty").

    Example:

    cargo run --example ice_bath_test -- --cs-pin 8 --leads Four --filter Fifty
    
  • Environment Variables (fallback if CLI not provided):

    • MAX31865_CS_PIN: GPIO pin for chip select (u8, e.g., "8").
    • MAX31865_LEADS: Lead configuration (e.g., "Four").
    • MAX31865_FILTER: Noise filter (e.g., "Fifty").

    Example:

    export MAX31865_CS_PIN=8
    export MAX31865_LEADS=Four
    export MAX31865_FILTER=Fifty
    cargo run --example ice_bath_test
    

Precedence: CLI args > env vars > hardcoded defaults.

Running Hardware Tests

The hardware validation tests (e.g., in tests/100_ohm_test.rs) access shared SPI/GPIO resources and use the serial_test crate to run serially by default. No special flags are needed—just run them normally:

cargo test test_read_resistance_hardware -- --ignored

For the full suite of ignored tests:

cargo test -- --ignored

License

Licensed under either of

References

Credits and License

The simple-max31865 crate is derived from version 1.0.0 of the rs-max31865↗ crate by Rudi Horn and Emeric Martineau, with significant modifications:

  • Greatly simplified, opaque API hiding hardware details.
  • Added Raspberry Pi support via rppal.
  • Floating-point temperature and resistance reads.

Some original code snippets (e.g., register configs) and temperature conversion etc are reused under the MIT/Apache-2.0 license. See the original repo for their contributions.

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.

About

Easy-to-use Rust driver for Max 31865 temperature chip - focused on the Raspberry Pi

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.