ESP32 and TMP006 Infrared Thermopile Sensor example

esp32 and TMP006 layout
esp32 and TMP006 layout

In this article we look at a TMP006 which is another temperature sensor. We show you how to connect this to an ESP32 with a code example using the Arduino IDE

This is the sensor that I used

Lets look at some information regarding the sensor

Texas Instruments’ TMP006 is the first in a series of temperature sensors that measure the temperature of an object without the need to make contact with the object.

This sensor uses a thermopile to absorb the infrared energy emitted from the object being measured and uses the corresponding change in thermopile voltage to determine the object temperature.

Infrared sensor voltage range is specified from -40°C to +125°C to enable use in a wide range of applications. Low power consumption along with low operating voltage makes the part suitable for battery-powered applications.

The low package height of the chip-scale format enables standard high volume assembly methods, and can be useful where limited spacing to the object being measured is available.


Complete single-chip digital solution, including integrated MEMS thermopile sensor, signal conditioning, ADC and local temperature reference

Digital output:
Sensor voltage: 7 µV/°C
Local temperature: -40°C to +125°C
SMBus™ compatible interface
Pin-programmable interface addressing
Low supply current: 240 µA
Low minimum supply voltage: 2.2 V


Parts Required


Name Link
ESP32 WeMos Mini D1 LOLIN32 ESP32
TMP006 TMP006 Contact-less IR Thermopile Sensor Sensor Module
Connecting wire Free shipping Dupont line 120pcs 20cm male to male + male to female and female to female jumper wire



esp32 and TMP006 layout
esp32 and TMP006 layout


Code Example

This uses the library from

You can download the zip file and install using the Arduino IDE or use the library manager.

In this example I had to chane the I2C address to 0x40, your sensor may have a different address.

  This is an example for the TMP006 Contact-less Infrared Thermopile Sensor 
  Designed specifically to work with the Adafruit TMP006 Breakout 
  These displays use I2C to communicate, 2 pins are required to  
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!
  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_TMP006.h"
// Connect VCC to +3V (its a quieter supply than the 5V supply on an Arduino
// Gnd -> Gnd
// SCL connects to the I2C clock pin. On newer boards this is labeled with SCL
// otherwise, on the Uno, this is A5 on the Mega it is 21 and on the Leonardo/Micro digital 3
// SDA connects to the I2C data pin. On newer boards this is labeled with SDA
// otherwise, on the Uno, this is A4 on the Mega it is 20 and on the Leonardo/Micro digital 2
//Adafruit_TMP006 tmp006;
Adafruit_TMP006 tmp006(0x40);  // start with a diferent i2c address!
void setup() { 
  Serial.println("Adafruit TMP006 example");
  // you can also use tmp006.begin(TMP006_CFG_1SAMPLE) or 2SAMPLE/4SAMPLE/8SAMPLE to have
  // lower precision, higher rate sampling. default is TMP006_CFG_16SAMPLE which takes
  // 4 seconds per reading (16 samples)
  if (! tmp006.begin()) {
    Serial.println("No sensor found");
    while (1);
  Serial.println("Send s to enter sleep mode, or w to wake up.  Measurements are not updated while asleep!");
void loop() {
  // Check for sleep/wake command.
  while (Serial.available() > 0) {
    char c =;
    if (c == 'w') {
      Serial.println("Waking up!");
    else if (c == 's') {
      Serial.println("Going to sleep!");
  // Grab temperature measurements and print them.
  float objt = tmp006.readObjTempC();
  Serial.print("Object Temperature: "); Serial.print(objt); Serial.println("*C");
  float diet = tmp006.readDieTempC();
  Serial.print("Die Temperature: "); Serial.print(diet); Serial.println("*C");
  delay(4000); // 4 seconds per reading for 16 samples per reading



Open the serial monitor and you should see something like this

Adafruit TMP006 example
Send s to enter sleep mode, or w to wake up. Measurements are not updated while asleep!
Object Temperature: 21.74*C
Die Temperature: 22.59*C
Object Temperature: 20.35*C
Die Temperature: 22.81*C






Previous articleESP32 and BMP183 temperature sensor example
Next articleESP32 and MSA301 accelerometer example