Hello, I'm trying to refresh a data without refreshing the whole webpage of the esp8266? I have a DS18B20 temperature sensor I'm trying to automatically refresh and update without having to refresh the page. So far no luck trying to find what I can use and adapt to make it work and my lack of coding skills are not advance enough still. Can someone please help me to figure this out. My code is below. I found some ethernet code That I could not make heads or tails of it.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
OneWire ds(D4); // on pin D4 (a 4.7K resistor is necessary)
// Replace with your network credentials
const char* ssid = "xxxxxxxx";
const char* password = "xxxxxxxx";
ESP8266WebServer server(80); //instantiate server at port 80 (http port)
void handleBody(){
if (server.hasArg("data")== false){ //Check if body received
String message = "Body not received";
server.send(200, "text/plain", message);
Serial.println(message);
//return;
}else{
String message = "Body received:\n";
message += server.arg("data");
message += "\n";
server.send(200, "text/plain", message);
Serial.println(message);
}
}
void handleRoot(){
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr))
{
ds.reset_search();
delay(250);
return;
}
if (OneWire::crc8(addr, 7) != addr[7])
{
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0])
{
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++)
{
data[i] = ds.read();
}
// Convert the data to actual temperature
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10)
{
raw = (raw & 0xFFF0) + 12 - data[6];
}
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
// Serial.print(" Temperature = ");
// Serial.print(celsius);
// Serial.print(" Celsius, ");
// Serial.print(fahrenheit);
// Serial.println(" Fahrenheit");
String message = "Your Temperature is:";
message += "\n \n \n";
message += (fahrenheit);
message += "f";
// String message = "What what";
server.send(200, "text/plain", message);
Serial.println(message);
}
void setup(void){
delay(1000);
Serial.begin(115200);
WiFi.softAP(ssid, password); //begin WiFi access point
Serial.println("");
Serial.print("IP address: ");
Serial.println(WiFi.softAPIP());
server.on("/body", handleBody);
server.on("/", handleRoot);
server.begin();
Serial.println("Web server started!");
}
void loop(void){
server.handleClient();
}
Joseph