#temperature-sensor #infrared #temperature #embedded-hal-driver #sensor #thermometer

no-std mlx9061x

Platform-agnostic Rust driver for the MLX90614 and MLX90615 non-contact infrared thermometers

4 releases (2 breaking)

0.3.0 May 23, 2024
0.2.1 Jun 2, 2023
0.2.0 May 22, 2021
0.1.0 Jul 29, 2020

#1759 in Embedded development

Download history 7/week @ 2024-02-11 14/week @ 2024-02-18 32/week @ 2024-02-25 8/week @ 2024-03-03 12/week @ 2024-03-10 3/week @ 2024-03-17 62/week @ 2024-03-31 3/week @ 2024-04-07 15/week @ 2024-04-14 1/week @ 2024-04-21 105/week @ 2024-05-19 11/week @ 2024-05-26

116 downloads per month


353 lines

Rust MLX90614/MLX90615 Non-contact Infrared Thermometer Driver

crates.io Docs Minimum Supported Rust Version Build Status Coverage Status

This is a platform agnostic Rust driver for the MLX90614/MLX90615 infrared thermometers using the embedded-hal traits.

This driver allows you to:

  • Read the last object temperature measurement. See: object1_temperature().
  • Read the last ambient temperature measurement. See: ambient_temperature().
  • Read the last raw IR measurement. See: raw_ir_channel1().
  • Get/Set the emissivity. See: set_emissivity().
  • Get the device ID. See: device_id().
  • Set the device address. See: set_address().
  • Put the device to sleep. See: sleep().
  • Wake the device from sleep. See: wake_mlx90614().

The MLX90614/MLX90615 are a infrared thermometers for non-contact temperature measurements. Both the IR sensitive thermopile detector chip and the signal conditioning ASSP are integrated in the same TO-39/TO-46 can. Thanks to its low noise amplifier, 17-bit/16-bit ADC and powerful DSP unit, a high accuracy and resolution of the thermometer is achieved.

Depending on the MLX90614 model they feature a single-zone or dual-zone thermopile.

The chips feature an 10-bit PWM and SMBus interface.

The readout resolution is 0.01°C (MLX90614) / 0.02°C (MLX90615).

This driver uses the SMBus interface.



To use this driver, import this crate and an embedded_hal implementation, then instantiate the appropriate device.

Please find additional examples using hardware in this repository: driver-examples

use linux_embedded_hal::I2cdev;
use mlx9061x::{Mlx9061x, SlaveAddr};

fn main() {
    let dev = I2cdev::new("/dev/i2c-1").unwrap();
    let addr = SlaveAddr::default();
    let mut sensor = Mlx9061x::new_mlx90614(dev, addr, 5).unwrap();
    loop {
        let obj_temp = sensor.object1_temperature().unwrap();
        println!("Object temperature: {:.2}ºC", obj_temp);



To enable defmt (version 0.3.x) support, when specifying the dependency on mlx9061x, add the feature "defmt-03".

mlx9061x = { version = "0.3.0", features = ["defmt-03"] }


For questions, issues, feature requests, and other changes, please file an issue in the github project.


Licensed under either of

at your option.


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.