Correct temp reading on ds18b20 until near 0 and below then -196

I’ve assembled a Photon out of box with 2 DS18B20; one on d2 and one on d3 since i don’t know how to gather temps on same digital input. Heck, I don’t even know how to code.

My application is putting a probe each into a freezer each that reach just under 0 degrees F. I assume they are at 4-7 degrees F at moment. I had been logging debug at room temperatures without issue.

Today, i drove the hour and dropped the unit off at my Dad’s house and installed.
I watched the temps drop from ambient air to near 4 degrees where they would then report -196 for hours. Below is actually looking better…

For a long while they just kept report -196.

I need help in these areas please:

  1. Is the code I have correct to obtain the above temp range?
  2. Is the code correct in case the temp drops below zero F?
  3. What can i do to reduce the -196 values?
  4. BONUS - how do i read both temps off D2, for example?

When answering - please note, i am just getting started. I don’t have a background in C or C++.

Here are a few recent outputs:

logD3 Temp: -196.600006May 17th at 7:08:36 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:08:36.225Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:08:36 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:08:36.156Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 7.362500May 17th at 7:08:35 pmfreezer_gkring
{"data":"D2 Temp: 7.362500","ttl":"60","published_at":"2016-05-18T00:08:35.447Z","coreid":"370036001047353138383138","name":"log"}
Temperature7.362500May 17th at 7:08:35 pmfreezer_gkring
{"data":"7.362500","ttl":"6000","published_at":"2016-05-18T00:08:35.378Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:07:34 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:07:34.662Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:07:34 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:07:34.590Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 7.025000May 17th at 7:07:33 pmfreezer_gkring
{"data":"D2 Temp: 7.025000","ttl":"60","published_at":"2016-05-18T00:07:33.880Z","coreid":"370036001047353138383138","name":"log"}
Temperature7.025000May 17th at 7:07:33 pmfreezer_gkring
{"data":"7.025000","ttl":"6000","published_at":"2016-05-18T00:07:33.812Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:06:33 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:06:33.095Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:06:33 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:06:33.026Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.687500May 17th at 7:06:32 pmfreezer_gkring
{"data":"D2 Temp: 6.687500","ttl":"60","published_at":"2016-05-18T00:06:32.316Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.687500May 17th at 7:06:32 pmfreezer_gkring
{"data":"6.687500","ttl":"6000","published_at":"2016-05-18T00:06:32.247Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:05:31 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:05:31.532Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:05:31 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:05:31.462Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.575000May 17th at 7:05:30 pmfreezer_gkring
{"data":"D2 Temp: 6.575000","ttl":"60","published_at":"2016-05-18T00:05:30.750Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.575000May 17th at 7:05:30 pmfreezer_gkring
{"data":"6.575000","ttl":"6000","published_at":"2016-05-18T00:05:30.682Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:04:29 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:04:29.966Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:04:29 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:04:29.898Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.462500May 17th at 7:04:29 pmfreezer_gkring
{"data":"D2 Temp: 6.462500","ttl":"60","published_at":"2016-05-18T00:04:29.184Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.462500May 17th at 7:04:29 pmfreezer_gkring
{"data":"6.462500","ttl":"6000","published_at":"2016-05-18T00:04:29.116Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:03:28 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:03:28.400Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:03:28 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:03:28.331Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.350000May 17th at 7:03:27 pmfreezer_gkring
{"data":"D2 Temp: 6.350000","ttl":"60","published_at":"2016-05-18T00:03:27.621Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.350000May 17th at 7:03:27 pmfreezer_gkring
{"data":"6.350000","ttl":"6000","published_at":"2016-05-18T00:03:27.552Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:02:26 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:02:26.836Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:02:26 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:02:26.767Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.237500May 17th at 7:02:26 pmfreezer_gkring
{"data":"D2 Temp: 6.237500","ttl":"60","published_at":"2016-05-18T00:02:26.056Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.237500May 17th at 7:02:25 pmfreezer_gkring
{"data":"6.237500","ttl":"6000","published_at":"2016-05-18T00:02:25.987Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: 3.650000May 17th at 7:01:25 pmfreezer_gkring
{"data":"D3 Temp: 3.650000","ttl":"60","published_at":"2016-05-18T00:01:25.275Z","coreid":"370036001047353138383138","name":"log"}
Temperature3.650000May 17th at 7:01:25 pmfreezer_gkring
{"data":"3.650000","ttl":"6000","published_at":"2016-05-18T00:01:25.203Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 6.125000May 17th at 7:01:24 pmfreezer_gkring
{"data":"D2 Temp: 6.125000","ttl":"60","published_at":"2016-05-18T00:01:24.515Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.125000May 17th at 7:01:24 pmfreezer_gkring
{"data":"6.125000","ttl":"6000","published_at":"2016-05-18T00:01:24.423Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: -196.600006May 17th at 7:00:23 pmfreezer_gkring
{"data":"D3 Temp: -196.600006","ttl":"60","published_at":"2016-05-18T00:00:23.710Z","coreid":"370036001047353138383138","name":"log"}
Temperature-196.600006May 17th at 7:00:23 pmfreezer_gkring
{"data":"-196.600006","ttl":"6000","published_at":"2016-05-18T00:00:23.640Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 5.900000May 17th at 7:00:22 pmfreezer_gkring
{"data":"D2 Temp: 5.900000","ttl":"60","published_at":"2016-05-18T00:00:22.949Z","coreid":"370036001047353138383138","name":"log"}
Temperature5.900000May 17th at 7:00:22 pmfreezer_gkring
{"data":"5.900000","ttl":"6000","published_at":"2016-05-18T00:00:22.880Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: 4.775000May 17th at 6:59:22 pmfreezer_gkring
{"data":"D3 Temp: 4.775000","ttl":"60","published_at":"2016-05-17T23:59:22.171Z","coreid":"370036001047353138383138","name":"log"}
Temperature4.775000May 17th at 6:59:22 pmfreezer_gkring
{"data":"4.775000","ttl":"6000","published_at":"2016-05-17T23:59:22.098Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 5.787500May 17th at 6:59:21 pmfreezer_gkring
{"data":"D2 Temp: 5.787500","ttl":"60","published_at":"2016-05-17T23:59:21.385Z","coreid":"370036001047353138383138","name":"log"}
Temperature5.787500May 17th at 6:59:21 pmfreezer_gkring
{"data":"5.787500","ttl":"6000","published_at":"2016-05-17T23:59:21.317Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: 5.450000May 17th at 6:58:20 pmfreezer_gkring
{"data":"D3 Temp: 5.450000","ttl":"60","published_at":"2016-05-17T23:58:20.602Z","coreid":"370036001047353138383138","name":"log"}
Temperature5.450000May 17th at 6:58:20 pmfreezer_gkring
{"data":"5.450000","ttl":"6000","published_at":"2016-05-17T23:58:20.532Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 5.675000May 17th at 6:58:19 pmfreezer_gkring
{"data":"D2 Temp: 5.675000","ttl":"60","published_at":"2016-05-17T23:58:19.821Z","coreid":"370036001047353138383138","name":"log"}
Temperature5.675000May 17th at 6:58:19 pmfreezer_gkring
{"data":"5.675000","ttl":"6000","published_at":"2016-05-17T23:58:19.752Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: 6.125000May 17th at 6:57:19 pmfreezer_gkring
{"data":"D3 Temp: 6.125000","ttl":"60","published_at":"2016-05-17T23:57:19.036Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.125000May 17th at 6:57:18 pmfreezer_gkring
{"data":"6.125000","ttl":"6000","published_at":"2016-05-17T23:57:18.967Z","coreid":"370036001047353138383138","name":"Temperature"}
logD2 Temp: 5.562500May 17th at 6:57:18 pmfreezer_gkring
{"data":"D2 Temp: 5.562500","ttl":"60","published_at":"2016-05-17T23:57:18.255Z","coreid":"370036001047353138383138","name":"log"}
Temperature5.562500May 17th at 6:57:18 pmfreezer_gkring
{"data":"5.562500","ttl":"6000","published_at":"2016-05-17T23:57:18.187Z","coreid":"370036001047353138383138","name":"Temperature"}
logD3 Temp: 6.800000May 17th at 6:56:17 pmfreezer_gkring
{"data":"D3 Temp: 6.800000","ttl":"60","published_at":"2016-05-17T23:56:17.471Z","coreid":"370036001047353138383138","name":"log"}
Temperature6.800000May 17th at 6:56:17 pmfreezer_gkring
{"data":"6.800000","ttl":"6000","published_at":"2016-05-17T23:56:17.403Z","coreid":"370036001047353138383138","name":"Temperature"}

Code on Photon:

// This #include statement was automatically added by the Particle IDE.
#include "spark-dallas-temperature/spark-dallas-temperature.h"

// This #include statement was automatically added by the Particle IDE.
#include "OneWire/OneWire.h"

double tempC = 0.0;
double tempF = 0.0;

int tempSensorPinD2 = D2;
int tempSensorPinD3 = D3;

OneWire oneWireD2(tempSensorPinD2);
OneWire oneWireD3(tempSensorPinD3);
DallasTemperature sensorD2(&oneWireD2);
DallasTemperature sensorD3(&oneWireD3);

float temperatureF = 0.0;
char resultstr[64];
bool readingValid = true;  //default to true


void setup() {
    Serial.begin(9600);
    sensorD2.begin();
    sensorD3.begin();
    Spark.variable("tempc", &tempC, DOUBLE);
    Spark.variable("tempf", &tempF, DOUBLE);
}

void loop() {
    sensorD2.requestTemperatures();
    
    temperatureF=sensorD2.getTempFByIndex( 0 );
    sprintf(resultstr, "{\"value F\":%.4f}",temperatureF); 
    
    Serial.println(temperatureF);  //For debug only
    
    bool success;
    success = Particle.publish("Temperature", String(temperatureF),6000,PUBLIC);
    Serial.println("--Success is " + String(success)); //For debug only
    Spark.publish("log", "D2 Temp: " + String(temperatureF));
    
    if (!success) {
      //// get here if event publish did not work
      Serial.println("Particle.publish FAILED"); //For debug only
    }

        //###################################
    if (temperatureF < 95 && temperatureF > 0) {
       // ledControl("l0,LOW");
        Serial.println("LOW"); //For debug only
        //led.setColor(green);
    }
    if (temperatureF > 95 && temperatureF > 0) {
        //ledControl("l0,HIGH");
        Serial.println("HIGH"); //For debug only
        //led.fade(green, red, 5000);
    }
    //###################################
    sensorD3.requestTemperatures();
    
    temperatureF=sensorD3.getTempFByIndex( 0 );
    sprintf(resultstr, "{\"value F\":%.4f}",temperatureF); 
    
    Serial.println(temperatureF);  //For debug only
    
    //bool success;
    success = Particle.publish("Temperature", String(temperatureF),6000,PUBLIC);
    Serial.println("--Success is " + String(success)); //For debug only
    Spark.publish("log", "D3 Temp: " + String(temperatureF));
    
    if (!success) {
      //// get here if event publish did not work
      Serial.println("Particle.publish FAILED"); //For debug only
    }

        //###################################
//    if (temperatureF < 95 && isValidReading(temperatureF) {
    if (temperatureF < 95 && temperatureF > 0) {
       // ledControl("l0,LOW");
        Serial.println("LOW"); //For debug only
        //led.setColor(green);
    }
// if (temperatureF> 95 && isValidReading(tempeatureF) {
    if (temperatureF > 95 && temperatureF > 0) {
        //ledControl("l0,HIGH");
        Serial.println("HIGH"); //For debug only
        //led.fade(green, red, 5000);
    }
    //###################################

    delay(60000);   //milliseconds - increase in production to save battery (60000 for 1 minute or even higher)
}

/*bool isValidReading(float t) {
    bool retVal = false;
    if (t > 0) {
        retVal = true;
         Serial.println("true");
    }
    
    return retVal;
}
*/

Thanks a ton. I hope to pay it forward for the next person in my spot. :smile:
~Douglas

This might be worth a read.

Thanks much. i read it and don’t understand why this would fix it. I’m hearing maybe i need to set the bit to 12 from 9. Still looking around.

I forked the Dallas library and changed 9 to 10 on the dallas.cpp. and defined below as 12.
Let’s see if this helps…

#include "spark-dallas-temperature/spark-dallas-temperature.h"
#include "OneWire/OneWire.h"
#define ONE_WIRE_BUS D3 // temporary -
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress frezer1Thermometer = { 0x28, 0xBF, 0xE4, 0xA6, 0x07, 0x00, 0x00, 0x22 }; // green
DeviceAddress frezer2Thermometer = { 0x28, 0xAB, 0xD8, 0xA6, 0x07, 0x00, 0x00, 0x00 }; // purple yellow // middle

double freezer1TempC = -1;
double freezer2TempC = -1;
void update18B20Temp(DeviceAddress deviceAddress, double &tempC);

// Misc Stuff
//char publishString[40];
unsigned long lastUpdate = 0;
unsigned long updateDelay = 1000;

void setup()
{
    // DS18B20
    sensors.begin();
    sensors.setResolution(frezer1Thermometer, TEMPERATURE_PRECISION);
    sensors.setResolution(frezer2Thermometer, TEMPERATURE_PRECISION);
    Spark.variable("freezer1", &freezer1TempC, DOUBLE);
    Spark.variable("freezer2", &freezer2TempC, DOUBLE);

}

void loop()
{
    unsigned long now = millis();
    if((now - lastUpdate) > updateDelay)
    {
        lastUpdate = now;
        // DS18B20

        sensors.requestTemperatures();
        update18B20Temp(frezer1Thermometer, freezer1TempC);
        update18B20Temp(frezer2Thermometer, freezer2TempC);
        
        Serial.print("freezer1 Temp:");
        Serial.print(freezer1TempC);
        Spark.publish("log", "Middle Freezer: " + String(freezer1TempC));
        Serial.print("freezer2 Temp: ");
        Serial.print(freezer2TempC);
        Spark.publish("log", "Left Freezer: " + String(freezer2TempC));
        Serial.println("C");
    }
    delay(180000);   //milliseconds
}

void update18B20Temp(DeviceAddress deviceAddress, double &tempC)
{
  tempC = sensors.getTempC(deviceAddress);
}

Frustrated and Pleased at the same time. This change worked. I’m now seeing proper temperatures near and below 0 degree F. Now on to next phase.