This works…change your pin to D0 I think is what it was, fix the includes (use the DS18B20 lib, makes it easier) and you are done. There was no reason to convert your temp to a STRING value since you are only sending the temp in Particle.variable
It is tested and reports correct values in Variable and Dashboard. Except for the first publish which I will leave to you to correct the timing on that. You can crank down the publish interval as long as you keep it above 1/second.
// This #include statement was automatically added by the Spark IDE.
#include "OneWire.h"
#include "DS18B20.h"
DS18B20 ds18b20 = DS18B20(D2); //Sets Pin D2 for Water Temp Sensor
char szInfo[64];
float pubTemp;
double celsius;
unsigned int Metric_Publish_Rate = 50000;
unsigned int MetricnextPublishTime;
unsigned int DS18B20nextSampleTime;
unsigned int DS18B20_SAMPLE_INTERVAL = 2000;
void setup() {
pinMode(D2, INPUT);
Particle.variable("tempHotWater", &celsius, DOUBLE);
Serial.begin(9600);
}
void loop() {
if (millis() > DS18B20nextSampleTime){
getTemp();
Serial.print("Temp is: ");
Serial.println(celsius);
}
if (millis() > MetricnextPublishTime){
Serial.println("Publishing now.");
publishData();
}
}
void publishData(){
sprintf(szInfo, "%2.2f", celsius);
Particle.publish("dsTmp", szInfo, PRIVATE);
MetricnextPublishTime = millis() + Metric_Publish_Rate;
}
void getTemp(){
if(!ds18b20.search()){
ds18b20.resetsearch();
celsius = ds18b20.getTemperature();
DS18B20nextSampleTime = millis() + DS18B20_SAMPLE_INTERVAL;
Serial.print(celsius);
}
}