Data only updates once

All, I cannot seem to get my data to update more than once on the platform (note that the values are live/changing on the serial monitor).

#include<Wire.h>
#include <ESP8266WiFi.h>

#include <ThingerWifi.h>

#define USERNAME “” //thingerio username
#define DEVICE_ID “WEMOS_TEMP” //thingerio device name
#define DEVICE_CREDENTIAL “” //thingerio pass
#define SSID “”
#define SSID_PASSWORD “”

ThingerWifi thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

unsigned long lastCheck = 0;

float T0 = 0;
float H0 = 0;
float P0 = 0;

// BME280 I2C address is 0x76(108)
#define Addr 0x76

void setup()
{

thing.add_wifi(SSID, SSID_PASSWORD);
Wire.begin();

unsigned int b1[24];
unsigned int data[8];
unsigned int dig_H1 = 0;
for(int i = 0; i < 24; i++)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((136+i));
// Stop I2C Transmission
Wire.endTransmission();

// Request 1 byte of data
Wire.requestFrom(Addr, 1);

// Read 24 bytes of data
if(Wire.available() == 1)
{
b1[i] = Wire.read();
}
}

// Convert the data
// temp coefficients
unsigned int dig_T1 = (b1[0] & 0xff) + ((b1[1] & 0xff) * 256);
int dig_T2 = b1[2] + (b1[3] * 256);
int dig_T3 = b1[4] + (b1[5] * 256);

// pressure coefficients
unsigned int dig_P1 = (b1[6] & 0xff) + ((b1[7] & 0xff ) * 256);
int dig_P2 = b1[8] + (b1[9] * 256);
int dig_P3 = b1[10] + (b1[11] * 256);
int dig_P4 = b1[12] + (b1[13] * 256);
int dig_P5 = b1[14] + (b1[15] * 256);
int dig_P6 = b1[16] + (b1[17] * 256);
int dig_P7 = b1[18] + (b1[19] * 256);
int dig_P8 = b1[20] + (b1[21] * 256);
int dig_P9 = b1[22] + (b1[23] * 256);

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write(161);
// Stop I2C Transmission
Wire.endTransmission();

// Request 1 byte of data
Wire.requestFrom(Addr, 1);

// Read 1 byte of data
if(Wire.available() == 1)
{
dig_H1 = Wire.read();
}

for(int i = 0; i < 7; i++)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((225+i));
// Stop I2C Transmission
Wire.endTransmission();

// Request 1 byte of data
Wire.requestFrom(Addr, 1);

// Read 7 bytes of data
if(Wire.available() == 1)
{
b1[i] = Wire.read();
}
}

// Convert the data
// humidity coefficients
int dig_H2 = b1[0] + (b1[1] * 256);
unsigned int dig_H3 = b1[2] & 0xFF ;
int dig_H4 = (b1[3] * 16) + (b1[4] & 0xF);
int dig_H5 = (b1[4] / 16) + (b1[5] * 16);
int dig_H6 = b1[6];

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select control humidity register
Wire.write(0xF2);
// Humidity over sampling rate = 1
Wire.write(0x01);
// Stop I2C Transmission
Wire.endTransmission();

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select control measurement register
Wire.write(0xF4);
// Normal mode, temp and pressure over sampling rate = 1
Wire.write(0x27);
// Stop I2C Transmission
Wire.endTransmission();

// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select config register
Wire.write(0xF5);
// Stand_by time = 1000ms
Wire.write(0xA0);
// Stop I2C Transmission
Wire.endTransmission();

for(int i = 0; i < 8; i++)
{
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((247+i));
// Stop I2C Transmission
Wire.endTransmission();

// Request 1 byte of data
Wire.requestFrom(Addr, 1);

// Read 8 bytes of data
if(Wire.available() == 1)
{
data[i] = Wire.read();
}
}

// Convert pressure and temperature data to 19-bits
long adc_p = (((long)(data[0] & 0xFF) * 65536) + ((long)(data[1] & 0xFF) * 256) + (long)(data[2] & 0xF0)) / 16;
long adc_t = (((long)(data[3] & 0xFF) * 65536) + ((long)(data[4] & 0xFF) * 256) + (long)(data[5] & 0xF0)) / 16;
// Convert the humidity data
long adc_h = ((long)(data[6] & 0xFF) * 256 + (long)(data[7] & 0xFF));

// Temperature offset calculations
double var1 = (((double)adc_t) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2);
double var2 = ((((double)adc_t) / 131072.0 - ((double)dig_T1) / 8192.0) *
(((double)adc_t)/131072.0 - ((double)dig_T1)/8192.0)) * ((double)dig_T3);
double t_fine = (long)(var1 + var2);
double cTemp = (var1 + var2) / 5120.0;
double fTemp = cTemp * 1.8 + 32;

// Pressure offset calculations
var1 = ((double)t_fine / 2.0) - 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0);
var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0) * ((double)dig_P1);
double p = 1048576.0 - (double)adc_p;
p = (p - (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double) dig_P9) * p * p / 2147483648.0;
var2 = p * ((double) dig_P8) / 32768.0;
double pressure = (p + (var1 + var2 + ((double)dig_P7)) / 16.0) / 100;

double pressureCorr = ((pressure/10)-0);
//float pressurelocal = pressureCorrpow((1-((0.0065645.0))/(cTemp+(0.0065*645.0)+273.15)),5.257);

// Humidity offset calculations
double var_H = (((double)t_fine) - 76800.0);
var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H)));
double humidity = var_H * (1.0 - dig_H1 * var_H / 524288.0);
if(humidity > 100.0)
{
humidity = 100.0;
}
else if(humidity < 0.0)
{
humidity = 0.0;
}

// Output data to serial monitor
//Serial.print(“Temperature in Celsius : “);
//Serial.print(cTemp);
//Serial.print(” C”);
//Serial.print("\t");
//Serial.print(“Temperature in Fahrenheit : “);
//Serial.print(fTemp);
//Serial.print(” F”);
//Serial.print("\t");
//Serial.print(“Pressure : “);
//Serial.print(pressure/10);
//Serial.print(” kPa”);
//Serial.print("\t");
//Serial.print(pressureCorr);
//Serial.print(" kPa");
//Serial.print("\t");

//Serial.print(pressurelocal);
//Serial.print(" kPa");
//Serial.print("\t");

//Serial.print(“Relative Humidity : “);
//Serial.print(humidity);
//Serial.println(” RH”);
//delay(1000);

T0 = cTemp;
H0 = humidity;
P0 = pressureCorr;

thing[“temps”] >> [](pson & out) {
//sensors.requestTemperatures(); // Send the command to get temperatures
out[“T0”] = T0;
out[“H0”] = H0;
out[“P0”] = P0;

};

}

void loop()
{
thing.handle();

unsigned long currentTs = millis(); //water temp notification
if (currentTs - lastCheck >= 60 * 60 * 1000) { //checks condition every hour
lastCheck = currentTs;
if (T0 <= 10) { //send email if water temp is lower than 10 DegC
thing.call_endpoint(“Email”);
}
}
}

I think I got it working now, for some reason I was under the assumption that you could not out any code in the void loop, not sure why I thought this ?

I’m glad that you solved the issue, for the next opportunity please post the code in the rigth format, it is easy for us to read and try to debug at first sight the issue you may have.

How do I post the code properly, did a very quick search and could not find

In the posting window, the button with the simbol “</>” is the one to give the code format, you may paste the whole sketch, select all of it, and press the button to give the appropriate format.

1 Like