# AM-057 - Max30205 gives negative body temperature values

**URL:** <https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297>\
**Category:** Sensors\
**Created:** [December 23, 2025, 3:29pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297 "2025-12-23T15:29:07Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 23, 2025, 3:29pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/1 "2025-12-23T15:29:07Z")

</div>

Hi,

I have tried quite a lot of stuff to configure MAX30205 which is attached with my Artemis nano board via QWIIC connector, But couldn’t make the sensor work.  
All physical connections are fine, I2C address is properly working, (tested if i put wrong address(0x48 working one), or remove any of the four I2C wire from sensor end it gives “error reading sensor”)

I have tried **ProtoCentral** libs and other libs but no luck.

It is giving my negative values  
”  
20:49:38.326 -\> -38.39'c  
20:49:38.452 -\> -38.38'c  
”  
Anybody has any solution or any secret configuration I am missing.

Thanks

Regards,  
Usman C

---

<div class="post-metadata">

**Author:** ![anon94801460](https://avatars.discourse-cdn.com/v4/letter/a/278dde/32.png) [@anon94801460](https://forum.arduino.cc/u/anon94801460)\
**Post date:** [December 23, 2025, 4:18pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/2 "2025-12-23T16:18:11Z")

</div>

There might be a problem in the code that you forgot to post.

---

<div class="post-metadata">

**Author:** ![Paul\_KD7HB](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paul_kd7hb/32/1127958_2.png) [@Paul\_KD7HB](https://forum.arduino.cc/u/Paul_KD7HB)\
**Post date:** [December 23, 2025, 4:31pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/3 "2025-12-23T16:31:11Z")

</div>

> [@uc-mani](#):
>
> MAX30205

The data sheet shows the device ONLY sends unsigned digital values, so negative temperatures are NOT POSSIBLE!

---

<div class="post-metadata">

**Author:** ![gilshultz](https://avatars.discourse-cdn.com/v4/letter/g/67e7ee/32.png) [@gilshultz](https://forum.arduino.cc/u/gilshultz)\
**Post date:** [December 23, 2025, 4:54pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/4 "2025-12-23T16:54:54Z")

</div>

When you remove one of the wires you get what is expected. They put 4 wires there because that is what is needed. SCL is the clock, SDA is the return data, Ground is the common reference point and of course it does not harvest energy from the air so the + powers it. Now looking at the schematic you forgot to post and comparing it to the non posted code you are using I have determined I cannot figure out your problem either. Keep guessing you may get lucky.

---

<div class="post-metadata">

**Author:** ![6v6gt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/6v6gt/32/225488_2.png) [@6v6gt](https://forum.arduino.cc/u/6v6gt)\
**Post date:** [December 23, 2025, 5:47pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/5 "2025-12-23T17:47:35Z")

</div>

> [@uc-mani](#):
>
> 20:49:38.326 -\> -38.39'c

If these body temperature readings do in fact turn out to be correct, then mention it to your doctor if there is an opportunity at the next visit.

---

<div class="post-metadata">

**Author:** ![Brazilino](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/brazilino/32/1198404_2.png) [@Brazilino](https://forum.arduino.cc/u/Brazilino)\
**Post date:** [December 23, 2025, 5:50pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/6 "2025-12-23T17:50:05Z")

</div>

> [@uc-mani](#):
>
> Artemis nano board

This is a 3V3 logic board. The docs in the ProtoCentral library says their breakout board default is 5V and need a solder jumper change to work on 3V3. It’s a guess, but as already said, that’s all we can do without code and schematics…

---

<div class="post-metadata">

**Author:** ![anon94801460](https://avatars.discourse-cdn.com/v4/letter/a/278dde/32.png) [@anon94801460](https://forum.arduino.cc/u/anon94801460)\
**Post date:** [December 23, 2025, 5:56pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/7 "2025-12-23T17:56:47Z")

</div>

If bit 5 of the configuration register is set, the "extended" temperature range is enabled, which uses the sign bit. In that case the library code might make a conversion error.

After reading the "How to get the best out of this forum" post (linked at the head of every forum category), post the required information.

 ![Capture](https://europe1.discourse-cdn.com/arduino/original/4X/b/0/2/b02d9216a732f7f7410b252ba41d86d3e71e5d8a.jpeg)

---

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 23, 2025, 7:17pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/8 "2025-12-23T19:17:05Z")

</div>

```arduino
#include <Wire.h>

#include "Protocentral_MAX30205.h"

MAX30205 tempSensor;

void setup() {

Serial.begin(9600);

Wire.begin();

//scan for temperature in every 30 sec untill a sensor is found. Scan for both addresses 0x48 and 0x49

while(!tempSensor.scanAvailableSensors()){

Serial.println("Couldn't find the temperature sensor, please connect the sensor." );

delay(30000);

}

Serial.print("sensorAddress is:");

Serial.println(tempSensor.sensorAddress);

tempSensor.begin(); // set continuos mode, active mode

delay(100);

}

void loop() {

float temp = tempSensor.getTemperature(); // read temperature for every 100ms

Serial.print(temp ,2);

Serial.println("'c" );

delay(100);

}

```

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/5/c/a/5ca00b7c3171de0327fbfc4ee2aae002a53f56f8.png)

---

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 23, 2025, 7:24pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/9 "2025-12-23T19:24:45Z")

</div>

![1](https://europe1.discourse-cdn.com/arduino/original/4X/c/7/a/c7aa700c19d57fb797639fd103c7f8c66bfb69f7.jpeg)

 ![3](https://europe1.discourse-cdn.com/arduino/original/4X/2/1/6/216d6d5c2d233b692e308c8dbc132284b6937e33.jpeg)

 ![2](https://europe1.discourse-cdn.com/arduino/original/4X/e/1/a/e1a556a64ae9ac212af948d82f986f8aa23277b5.jpeg)

---

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 23, 2025, 7:29pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/10 "2025-12-23T19:29:55Z")

</div>

My apologies.  
Now I have posted the code along with output and actual sensor pictures.  
Let me know if anything else is needed.

---

<div class="post-metadata">

**Author:** ![Brazilino](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/brazilino/32/1198404_2.png) [@Brazilino](https://forum.arduino.cc/u/Brazilino)\
**Post date:** [December 23, 2025, 7:42pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/11 "2025-12-23T19:42:13Z")

</div>

I’ve found your breakout board in Google. It works from 2.7V to 3.3V. So it seems to be ok.

Nothing wrong with the sketch too. So, clue seems to be on post #7 .

[This site](https://docs.cirkitdesigner.com/component/f3efffbc-bbfa-4f27-80ce-41f0a7514f00/max30205) brings a sketch that uses only wire library. Maybe you can use it to make a test.

---

<div class="post-metadata">

**Author:** ![JCA34F](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jca34f/32/340148_2.png) [@JCA34F](https://forum.arduino.cc/u/JCA34F)\
**Post date:** [December 23, 2025, 9:06pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/12 "2025-12-23T21:06:58Z")

</div>

Running 8 bit Arduino code on a 32 bit processor may be the problem.

---

<div class="post-metadata">

**Author:** ![TomGeorge](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/tomgeorge/32/215261_2.png) [@TomGeorge](https://forum.arduino.cc/u/TomGeorge)\
**Post date:** [December 24, 2025, 8:48am UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/13 "2025-12-24T08:48:36Z")

</div>

Hi, @uc-mani

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/6/a/1/6a163096b7924359f165e46f8c4746357a2f844b.jpeg)

Have you soldered the headers to the module PCB?

Can you post some images of your project?  
So we can see your component layout.

Specifically the solder side of the PCBs.

Thanks.. Tom.... 😃 👍 ☕ 🇦🇺

---

<div class="post-metadata">

**Author:** ![robtillaart](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/robtillaart/32/1098811_2.png) [@robtillaart](https://forum.arduino.cc/u/robtillaart)\
**Post date:** [December 24, 2025, 9:55am UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/14 "2025-12-24T09:55:26Z")

</div>

It sounds like a library problem, you should report it at their repo

> **[Protocentral/Protocentral\_MAX30205](https://github.com/Protocentral/Protocentral_MAX30205/issues)**
>
> Arduino library and hardware for the ProtoCentral MAX30205 body temperature sensor breakout board - Protocentral/Protocentral\_MAX30205

---

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 24, 2025, 11:50am UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/15 "2025-12-24T11:50:00Z")

</div>

Yes i have soldered it. Please see the other picture attached

---

<div class="post-metadata">

**Author:** ![uc-mani](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/uc-mani/32/1129681_2.png) [@uc-mani](https://forum.arduino.cc/u/uc-mani)\
**Post date:** [December 25, 2025, 3:00pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/16 "2025-12-25T15:00:26Z")

</div>

It works but with a twist.  
I am forced to use extended mode D5=1. And according to spec you have to add 64’c with the temperature value. Which somehow is giving me the accurate results.

here is the code snippet

```arduino
void begin(void) {
	I2CwriteByte(sensorAddress, CONFIGURATION_REG, 0x20); //mode config, setting D5 = 1 Extended mode (–64 °C → +191 °C)
	I2CwriteByte(sensorAddress, THYST_REG, 0x00); // set threshold
	I2CwriteByte(sensorAddress, TOS_REG, 0x00); //
}

```

```arduino
float getTemperature(void) {
	uint8_t buf[2];
	I2CreadBytes(sensorAddress, TEMPERATURE_REG, buf, 2);

	int16_t raw = (int16_t)((buf[0] << 8) | buf[1]);
	float temp = (raw * 0.00390625) + 64.0;

	return temp;
}

```

**Output** :

> 14:58:04.220 -\> 31.88'c  
> 14:58:05.236 -\> 31.93'c  
> 14:58:06.265 -\> 32.00'c  
> 14:58:07.281 -\> 32.03'c  
> 14:58:08.283 -\> 32.07'c  
> 14:58:09.278 -\> 32.12'c  
> 14:58:10.302 -\> 32.15'c  
> 14:58:11.302 -\> 32.19'c

---

<div class="post-metadata">

**Author:** ![edicsonm](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/edicsonm/32/1267497_2.png) [@edicsonm](https://forum.arduino.cc/u/edicsonm)\
**Post date:** [April 13, 2026, 11:59am UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/17 "2026-04-13T11:59:33Z")

</div>

[uc-mani](https://forum.arduino.cc/u/uc-mani) could you share your final code? I am have some issues with the same sensor. Thanks.

---

<div class="post-metadata">

**Author:** ![petesoper](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/petesoper/32/1269631_2.png) [@petesoper](https://forum.arduino.cc/u/petesoper)\
**Post date:** [May 1, 2026, 7:36pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/18 "2026-05-01T19:36:44Z")

</div>

This problem has not been solved, it's just been worked around with the above mentioned "use extended mode and add 64.0 to the intermediate result".  
What the datasheet does not say is that in normal data format mode the high order two bits are set but should be ignored. If after creating the 16 bit integer you mask the high order two bits when in normal mode with something like "raw = raw & 0x3fff" then cast to float and multiply the remaining value by 0.00390625 you will see the correct temperature. I'll see if I can get a message to Analog Devices requesting an update to their datasheet. In my opinion they don't have any defense for setting these two high bits in normal data format mode, but I expect them to tell me something like "Well we say in normal mode the range is 0 to 50C, so neither the sign bit nor the next bit signifying 64C can have any meaning!" So I'll beg for them to be merciful. :-)

---

<div class="post-metadata">

**Author:** ![petesoper](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/petesoper/32/1269631_2.png) [@petesoper](https://forum.arduino.cc/u/petesoper)\
**Post date:** [May 1, 2026, 7:55pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/19 "2026-05-01T19:55:42Z")

</div>

To fix the [GitHub - Protocentral/Protocentral\_MAX30205: Arduino library and hardware for the ProtoCentral MAX30205 body temperature sensor breakout board · GitHub](https://github.com/Protocentral/Protocentral_MAX30205.git) repo (as it exists today, May 1, 2026) edit src/Protocentral\_MAX30205.cpp line 26 that has this:  
int16\_t raw = readRaw[0] \<\< 8 | readRaw[1]; //combine two bytes  
but should be like this:  
int16\_t raw = (readRaw[0] \<\< 8 | readRaw[1]) & 0x3fff; //combine two bytes and ignore top two bits

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [October 28, 2026, 7:56pm UTC](https://forum.arduino.cc/t/am-057-max30205-gives-negative-body-temperature-values/1421297/20 "2026-10-28T19:56:40Z")

</div>

Closed on October 28, 2026, 7:56pm UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
