This cyber-tronic looking sensor hides a secret behind it's glimmering eye. Unlike most temperature sensors, this sensor measures infrared light bouncing off of remote objects so it can sense temperature without having to touch them physically. Simply point the sensor towards what you want to measure and it will detect the temperature by absorbing IR waves emitted. Because it doesn't have to touch the object it's measuring, it can sense a wider range of temperatures than most digital sensors: from -70°C to +380°C! It takes the measurement over an 90-degree field of view so it can be handy for determining the average temperature of an area.
This sensor comes in an easy-to-use metal can. You can easily solder it or plug it into a breadboard. The four pins are used for power, ground, i2c clock and i2c data. There are two versions, one for 3V power and logic levels and one for 5V power and logic levels. You'll also want two 10K pull-up resistors for the I2C data lines, which we thoughtfully include.
Some specifications
  • Factory calibrated
  • -40°C to +125°C for sensor temperature
  • -70°C to +380°C for object temperature
  • ±0.5°C accuracy around room temperatures
  • High accuracy of 0.5°C over wide temperature
  • 90° Field of view
  • 5V version: 4.5 to 5.5V power
  • 3V version: 2.6 to 3.6V power
  • I2C interface, 0x5A is the fixed 7-bit address


Despite being in an odd casing, the sensor is a lot like a simple sensor in a 'classic' integrated circuit shape. There are four pins. The datasheet has a diagram from the bottom view of the sensor which is a little annoying to refer to when wiring so use this image above.

Arduino Wiring

You can easily wire this sensor to any microcontroller, we'll be using an Arduino
This sensor uses a slightly non-standard type of I2C called "repeated-start". If you are not using an Arduino, make sure your microcontroller can support "repeated start I2C requests"!
Note the tab is how we will keep track of pins, in this wiring image, the tab is on the south side of the sensor, there's a red arrow pointing to it

  • Connect GND to common power/data ground
  • Connect PWR to the power supply, for the 3V sensor this is about 3.3V. For the 5V version, use about 5VDC
  • Connect the SDA pin to the I2C data SDA pin on your Arduino. On an UNO & '328 based Arduino, this is also known as A4, on a Mega it is also known as digital 20 and on a Leonardo/Micro, digital 2
  • Connect the SCL pin to the I2C clock SCL pin on your Arduino. On an UNO & '328 based Arduino, this is also known as A5, on a Mega it is also known as digital 21 and on a Leonardo/Micro, digital 3
The MLX90614 has a fixed I2C address, you can only connect one sensor per microcontroller!

Download Adafruit_MLX90614

To begin reading sensor data, you will need to download Adafruit_MLX90614 from our github repository. You can do that by visiting the github repo and manually downloading or, easier, just click this button to download the zip
Rename the uncompressed folder Adafruit_MLX90614 and check that the Adafruit_MLX90614 folder contains Adafruit_MLX90614.cpp and Adafruit_MLX90614.h

Place the Adafruit_MLX90614 library folder your arduinosketchfolder/libraries/ folder.
You may need to create the libraries subfolder if its your first library. Restart the IDE.

We also have a great tutorial on Arduino library installation at:

Load Demo

Open up File->Examples->Adafruit_MLX90614->mlxtest and upload to your Arduino wired up to the sensor
Now you can open up the serial console to see the ambient and object temperature printed out. Ambient temperature is the temperature of the sensor itself. The object temp is what its measuring in the 90-degree field of view.

This guide was first published on Feb 28, 2014. It was last updated on Feb 28, 2014.