blog

Make an Arduino/ESP32 Digital Thermometer with MAX30205 Sensor

MAX30205MTA4 scaled

The MAX30205MTA as a professional body temperature sensor launched by Maxim Integrated, is an ideal choice for making wearable body temperature monitoring devices sensor and digital thermometers due to its ultra-high accuracy, low power consumption, and convenient I2C interface. It is widely compatible with development platforms such as Arduino and ESP32.

What is the sensor for MAX30205 body temperature sensor?

MAX30205MTA3 scaled

The MAX30205 is a contact sensor specially designed for human body temperature monitoring. Different from ambient temperature sensors, its measurement range accurately covers the normal human body temperature and fever range (32℃~42℃). Especially in the core human body temperature range of 35℃~42℃, the accuracy can reach ±0.1℃, which is much higher than ordinary sensors (such as the ±0.5℃ accuracy of DS18B20).

As a representative product of Maxim Integrated, it uses CMOS technology to integrate temperature collection, signal amplification and A/D conversion functions. No additional peripheral circuits are required, and it directly communicates with MCUs (such as Arduino and ESP32) through the I2C bus, simplifying hardware design.

Key parameters

To understand the MAX30205 in depth, you need to refer to its official datasheet (max30205 datasheet:https://easyelecmodule.com/wp-content/uploads/MAX30205-datasheet.pdf). The following are the core parameters:

Product Name 30205 Human Body Temperature Sensor Module
Chip Used MAX30205MTA
Supply Voltage 2.7V – 3.3V
Working Current 600uA (typ)
Accuracy 0.1℃ (Between 37℃ – 39℃) 0.5 (MAX)
Temperature Resolution 16 – bit (0.00390625℃)
Communication Method IIC
Weight 0.86g
Module Size 22mm * 13mm

Max30205 vs Max30208

Many developers confuse the MAX30205 and MAX30208. Both belong to Maxim’s body temperature sensor series, but there are key differences in application scenarios and performance. You need to distinguish them according to your needs when choosing:

Comparison Dimension MAX30205 MAX30208
Core Positioning General – purpose human body temperature sensor (suitable for home use, wearable) Medical – grade high – precision sensor (suitable for clinical, medical equipment)
Accuracy Within 35℃ – 42℃, ±0.1℃ Within 35℃ – 42℃, ±0.05℃ (higher precision)
Power Consumption Typical value 6μA (low power consumption) Typical value 10μA (slightly higher)
Price Single chip is about 1 – 3 US dollars (max30205 price) Single chip is about 3 – 5 US dollars (higher)
Application Scenario Arduino digital thermometer, smart bracelet (body temperature sensor arduino) Medical thermometer, intensive care equipment

In short, if you need to make a low-cost, low-power home/wearable device, the MAX30205 is a cost-effective choice; if you pursue medical-grade ultra-high accuracy, you need to choose the MAX30208.

How MAX30205 Body Temperature Sensor Working?

The working process of the MAX30205 can be divided into 3 core steps. A clear understanding of this process helps to cheek subsequent debugging issues:

1、Temperature Collection: The thermosensitive element (based on CMOS technology) inside the sensor will produce tiny resistance or voltage changes according to changes in surrounding temperature. This change has a linear correspondence with temperature (when the human body temperature contacts the sensor, heat is transferred to the thermosensitive element, triggering a signal change).

2、Signal Processing: The collected weak signal is amplified by the internal amplifier, then sent to a 16-bit A/D converter to convert the analog signal into a digital signal (this step is the key to ensuring accuracy, and the 16-bit resolution can achieve a temperature step of 0.0039℃).

3、Data Transmission: The processed digital temperature data is stored in the internal register of the sensor. Arduino or ESP32 reads the register data through the I2C interface (SDA/SCL pins), and then calculates and converts it into the actual body temperature value through a program.

MAX30205 circuit and pinout

PINNAMEFUNCTION
1SDASerial-Data Input/Output Line. Open-drain. Connect SDA to a pullup resistor. High impedance for supply voltages from 0 to 0.3 V.
2SCLSerial-Data Clock Input. Open-drain. Connect SCL to a pullup resistor. High impedance for supply voltages from 0 to 0.3 V.
3OSOvertemperature Shutdown Output. Open-drain. Connect OS to a pullup resistor.
4GNDGround
5A2I²C Slave Address Input. Connect A2 to GND or VDD to set the desired I²C bus address. Do not leave unconnected (tie unused address inputs high or low for supply voltages from 0 to 0.3 V.
6A1I²C Slave Address Input. Connect A1 to GND, VDD, SDA, or SCL to set the desired I²C bus address. Do not leave unconnected (tie unused address inputs high or low for supply voltages from 0 to 0.3 V.
7A0I²C Slave Address Input. Connect A0 to GND, VDD, SDA, or SCL to set the desired I²C bus address. Do not leave unconnected (tie unused address inputs high or low for supply voltages from 0 to 0.3 V.
8VDDPositive 3.3V Supply Voltage Input. Bypass to GND with a 1 µF bypass capacitor.

MAX30205 & Arduino/Esp 32 Practice: Wiring & Code

Taking Arduino Uno and CJMCU-30205 module as examples, the wiring steps are as follows:

1、The IIC address of the four wires is 0x4F

  • 3.3V————–VCC
  • GND————–GND
  • SCL————–SCL
  • SDA————–SDA

2、The IIC address of the seven wires is 0x48

  • 3.3V————–VCC
  • GND————–GND
  • SCL————–SCL
  • SDA————–SDA
  • GND————–A0
  • GND————–A1
  • GND————–A 2

Arduino Code

We use the open-source library libdriver/max30205 (Github URL: https://github.com/libdriver/max30205), which supports functions such as temperature reading and accuracy configuration. The code example is as follows:

				
					/****************************************max30205 part****************************************/
/*
  wiring:
  VCC------------5V
  GND------------GND
  SCL------------A5/SCL
  SDA------------A4/SDA
 
  A0、A1、A2-----GND
 
  Pay attention: If A0, A1, and A2 are connected to GND, the IIC address is 0x48. If no, the IIC address is 0x4f
  Contact measurement of body temperature.
*/
#include <Wire.h>                                                                 //include library
#include "ClosedCube_MAX30205.h"                                                  //include library
 
ClosedCube_MAX30205 max30205;                                                     //Instantiate an object
 
#define max30205TimeInterval 1000                                                 //Detect the time interval of a trip                  
 
unsigned long max30205Times = 0;                                                  //Record the device running time
float max30205Temp = 0;                                                           //Define a variable
/****************************************set up and loop part*********************************/
void setup() {
  Serial.begin(9600);                                                             //Example Set the baud rate of the serial port to 9600
 
  max30205.begin(0x4F);                                                           //IIC address of the device,If A0, A1, and A2 are connected to GND, the IIC address is 0x48. If no, the IIC address is 0x4f
 
  Serial.println("Go online!");                                                  // The serial port displays the corresponding value
}
void loop() {
  getMAx30205Data();                                                             //Acquired temperature
}
/****************************************max30205 part****************************************/
/*Acquired temperature*/
void getMAx30205Data() {
  if (millis() - max30205Times >= max30205TimeInterval) {                        //This command is executed once in a while
    max30205Times = millis();
 
    max30205Temp = max30205.readTemperature();                                   //Gets the temperature value
    Serial.print("Temp: ");                                                      // The serial port displays the corresponding value
    Serial.print(max30205Temp);                                                  // The serial port displays the corresponding value
    Serial.println(" (C)");                                                      // The serial port displays the corresponding value
  }
}
				
			

Notes

The corresponding library file needs to be downloaded to avoid compilation errors. The working voltage is 3.3V. When four wires are connected, the default IIC address is 0x4F. When seven wires are connected, that is, when A0, A1, and A2 are connected to GND, the IIC address is 0x48. It can measure human body temperature by touching human skin. The data may rise or fall a bit slowly. The precision is very high.

Compatible with ESP32

The default I2C pins of ESP32 are GPIO21 (SDA) and GPIO22 (SCL). When wiring, you only need to connect the SDA of CJMCU-30205 to GPIO21, SCL to GPIO22, VCC to 3.3V, and GND to GND. The code is compatible with Arduino. You only need to ensure that the Wire library (necessary for I2C communication) is installed in the ESP32 development environment, and no modification to the core logic is required.

How to check if a temperature sensor is working or not?

If you encounter abnormal temperature reading during debugging, you can check whether the MAX30205 is working normally by following these steps:

  • Wiring Check: Confirm that VCC is connected to 3.3V (not 5V), SDA/SCL corresponds to the I2C pins of Arduino/ESP32, and there is no false soldering or wrong connection.
  • Initialization Check: Add an initialization status judgment in the Arduino code (such as the “initialization failed” prompt in the above code). If the prompt is repeated, the module may be damaged or the I2C address is wrong (the address can be modified with reference to the max30205 datasheet).
  • Temperature Comparison Verification: Touch the sensor to an object with a known temperature (such as a water cup at room temperature, or the forehead measured by a thermometer gun), and compare the sensor reading with the actual value. If the error is within ±0.1℃, the sensor is normal; if the error is too large, check the circuit noise or replace the module.
  • Serial Data Troubleshooting: If a fixed value (such as 0℃ or 50℃) is read, there may be a code logic error or abnormal sensor register configuration. The register can be reconfigured with reference to the max30205 datasheet.

FAQS

What is the use of MAX30205?

The MAX30205 is a professional human body temperature sensor , mainly used in wearable body temperature monitoring devices, home digital thermometers , body temperature modules of smart bracelets/watches, and can also be used in medical auxiliary equipment (such as body temperature alarm devices).

What is the most accurate temperature sensor?

There is no absolutely “most accurate” sensor, and it needs to be judged according to the scenario: in the human body temperature monitoring scenario, the MAX30208 (±0.05℃) is more accurate than the MAX30205; in the industrial environment, the platinum resistance sensor (such as PT100) has an accuracy of up to ±0.01℃, but it is large in size and high in cost, and is not suitable for wearable devices.

What is the sensor for body temperature?

 In addition to MAX30205/MAX30208, common human body temperature sensors also include:

    • Infrared sensors (such as MLX90614): Non-contact, suitable for fast measurement, but accuracy is affected by distance;
    • Thermocouple sensors: Fast response, but low accuracy (±0.5℃), requiring cold junction compensation;
    • DS18B20: Contact type, low cost, but the accuracy in the human body temperature range is only ±0.5℃, suitable for non-medical scenarios.

Leave a Reply

Your email address will not be published. Required fields are marked *