Arduino library for the Protocentral MAX30205 human body temperature sensor breakout board.
Don't have one? Buy it here
You can buy the Qwiic-compatible MAX30205 here.
The QWIIC-compatible ProtoCentral MAX30205 breakout board is a wearable human body temperature sensor that reads with an accuracy of +/-0.1 °C. This is a digital I2C-based sensor, so no external ADC is required.
This version of the board is round and designed to be directly wearable by exposing an aluminium surface. The aluminium-base PCB helps in easy thermal conduction so that most of the heat gets transferred to the sensor, resulting in more accurate readings. The top side of the PCB is encapsulated in clear epoxy resin to make it waterproof, and it uses a medical-grade, biocompatible, flexible cable that does not irritate the skin.
- Digital I2C body temperature sensor — no external ADC needed
- High accuracy of +/-0.1 °C over the 37 °C to 39 °C range
- 16-bit resolution (1 LSB = 0.00390625 °C)
- Reads temperature in Celsius or Fahrenheit
- Automatic address scanning (0x48 / 0x49)
- Low-power shutdown mode (<3.5 µA)
- Works on any board with
Wire(AVR, SAMD, ESP32, ESP8266, RP2040, STM32, and more)
- Open the Arduino IDE
- Go to Sketch → Include Library → Manage Libraries
- Search for "Protocentral MAX30205"
- Click Install
- Download or clone this repository
- Copy it into your Arduino libraries folder (
~/Documents/Arduino/libraries/)
Connect the breakout board to the Arduino as follows:
| MAX30205 pin | Arduino connection | Pin function |
|---|---|---|
| Vin / 5V | Vin (3.3V also supported, change the solder jumper on the back; default is 5V) | Power supply |
| GND | GND | Ground |
| SDA | A4 (or the board's SDA pin) | Serial data |
| SCL | A5 (or the board's SCL pin) | Serial clock |
#include <Wire.h>
#include "Protocentral_MAX30205.h"
MAX30205 tempSensor;
void setup() {
Serial.begin(115200);
Wire.begin();
// Scan for the sensor at 0x48 / 0x49 until one is found
while (!tempSensor.scanAvailableSensors()) {
Serial.println("Couldn't find the temperature sensor, please connect the sensor.");
delay(5000);
}
tempSensor.begin(); // Continuous conversion, active mode
}
void loop() {
Serial.print(tempSensor.getTemperature(), 2);
Serial.println(" C");
delay(100);
}The constructor accepts an explicit I2C address and TwoWire instance:
MAX30205 tempSensor(MAX30205_ADDRESS2, Wire1); // 0x48 on the Wire1 busMAX30205(uint8_t sensorAddress = MAX30205_ADDRESS1, TwoWire &wirePort = Wire)| Method | Description |
|---|---|
begin() |
Configure continuous conversion mode; returns true if the sensor responds |
scanAvailableSensors() |
Probe addresses 0x48 and 0x49, latch the one that responds; returns true if found |
getTemperature() |
Read the body temperature in degrees Celsius |
getTemperatureF() |
Read the body temperature in degrees Fahrenheit |
shutdown() |
Put the device into low-power shutdown mode |
printRegisters() |
Dump the register contents to Serial for debugging |
| Constant | Value | Description |
|---|---|---|
MAX30205_ADDRESS1 |
0x49 |
Default I2C address |
MAX30205_ADDRESS2 |
0x48 |
Alternate I2C address |
MAX30205_RESOLUTION |
0.00390625 |
Degrees Celsius per LSB |
| Example | Description |
|---|---|
01-basic-temperature-reading |
Print temperature in Celsius and Fahrenheit to the Serial Monitor |
02-temperature-serial-plotter |
Stream temperature to the Arduino Serial Plotter |
Open the Arduino Serial Monitor (or Serial Plotter) at 115200 baud to view the readings.
For further details, refer to the documentation on the MAX30205 breakout board.
This product is open source! Both our hardware and software are open source and licensed under the following licenses:
Hardware: Creative Commons Share-alike 4.0 International
Software: MIT License
Documentation: Creative Commons Share-alike 4.0 International
See LICENSE.md for the full license text.



