Skip to main content

Crate qmc5883p

Crate qmc5883p 

Source
Expand description

§qmc5883p

An asynchronous driver for the QMC5883P 3-Axis Magnetic Sensor using I2C. This driver is designed for no_std environments and uses embedded-hal-async for non-blocking I2C communication.

§Features

  • Asynchronous Interface: Built for async/await using embedded-hal-async trait.
  • Platform-Agnostic: Compatible with any microcontroller that implements the embedded-hal-async I2C traits.
  • no_std: No need for the standard library.
  • Configurable Settings: Full control over operating modes, output data rates, measurement ranges, and oversampling ratios using a builder pattern.
  • Self-Test Support: Includes a built-in self-test procedure to verify hardware functionality.
  • Magnitude Calculation: Helper methods to read raw X, Y, Z data or calculate the total magnetic field magnitude.
  • Optional Logging: Integrated with defmt for efficient logging in embedded environments.

§Installation

Add this to your Cargo.toml:

[dependencies]
qmc5883p = "0.1.0"

§Usage

§Basic Configuration

use qmc5883p::{Range, Mode, Qmc5883PConfig, OutputDataRate, OverSampleRate, OverSampleRatio1};

// Create a custom configuration
let config = Qmc5883PConfig::default()
    .with_mode(Mode::Continuous)
    .with_odr(OutputDataRate::Hz100)
    .with_range(Range::Gauss8)
    .with_osr1(OverSampleRatio1::Ratio4)
    .with_osr2(OverSampleRate::Rate4);

§Driver Initialization

use qmc5883p::Qmc5883p;
// Initialize the sensor with your I2C peripheral
let mut sensor = Qmc5883p::new(i2c);
sensor.init(config).await?;

// Read magnetic field data
let [x, y, z] = sensor.read_x_y_z().await?;
let magnitude = sensor.read_magnitude().await?;

Look into tests for more usage examples.

§Supported Hardware

This driver is specifically for the QMC5883P magnetic sensor. It verifies the chip ID (expected 0x80) during initialization.

§License

This project is licensed under either of:

Structs§

Qmc5883PConfig
Configuration structure for the QMC5883P sensor. Use the builder pattern to create a configuration.
Qmc5883p
QMC5883P Magnetometer Sensor Driver.

Enums§

Mode
Operating mode of the sensor (Datasheet Sec 6.2).
OutputDataRate
Output Data Rate (ODR).
OverSampleRate
Over Sample Rate 2 (OSR2) - Secondary Filter Bandwidth.
OverSampleRatio1
Over Sample Ratio (OSR1) - Digital Filter Bandwidth Control.
QmcError
Errors that can occur when interacting with the QMC5883P sensor.
Range
Magnetic measurement range configuration.
SelfTest
Self-Test Control.
SetResetMode
Set/Reset Mode Configuration.
SoftReset
Soft Reset Control.