#i2c-driver #i2c #sensor-driver #embedded-hal #magnetic

no-std qmc5883p

A platform-agnostic driver for the QMC5883P magnetic sensor

3 releases (stable)

Uses new Rust 2024

1.0.1 Jan 31, 2026
0.1.0 Jan 29, 2026

#1935 in Embedded development

MIT/Apache

35KB
543 lines

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:

Dependencies

~0.8–1.3MB
~26K SLoC