Hi! I head the same problem with UBIDOTS, and found for my self next solution- I separated main part of scetch and ubidots (for your cause blynk). It’s mean, main code run as Void loop, but in Void setup is also timer which run Void ubidots (or blynk) 6times/hour. In Void blynk wifi started and client blynk begin, if wifi connection is not available the wifi off and return to main loop. Also used eeprom.put command to store data from server (for examle target temp) and eeprom.read to get and than send stored in Void loop data and send it to blynk. (Sorry for my english)
#include <SimpleTimer.h>
#include <time.h>
#include <OneButton.h>
#include "UbidotsMicroESP8266.h"
#include "ESP8266WiFi.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include "DHT.h"
#include <SoftwareSerial.h>
#define DHTPIN D6
#define DHTTYPE DHT11
#define RELEY D3
#define ONE_WIRE_BUS D7
#define TOKEN "************************" // Put here your Ubidots TOKEN
#define ID_1 "*******************" // Tin
#define ID_2 "****************" // Hin
#define ID_3 "******************" // Tout
#define ID_4 "******************" // Reley
#define ID_5 "**********************" // Ttarget
#define WIFISSID "**************" // Put here your Wi-Fi SSID
#define PASSWORD "*********************" // Put here your Wi-Fi password
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET D4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
DHT dht(DHTPIN, DHTTYPE);
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature sensors (&oneWire);
float Hin = dht.readHumidity();
float Tin = dht.readTemperature();
float Tout = sensors.getTempCByIndex(0);
float valBase = 7;
boolean value4;
int delta = 2;
int addr_targ = 101;
int addr_reley = 102;
int addr_last = 103;
int addr_Time = 104;
Ubidots client(TOKEN);
int value5;
long Time = getVarTimestamp(TOKEN);
unsigned long millis();
unsigned long micros();
SimpleTimer timer;
void setup(){
Serial.begin(57600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
unsigned long millis(2000);
display.clearDisplay();
sensors.begin();
dht.begin();
pinMode (RELEY, OUTPUT);
EEPROM.begin(512);
int value5 = valBase;
EEPROM.put(addr_targ, value5);
timer.setInterval(600000L, ubidots);
}
void loop(){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
timer.run();
sensors.requestTemperatures();
float value1 = dht.readTemperature();
display.println("TEMP.inside: "+String(value1));
float value2 = dht.readHumidity();
display.println("Hymid.inside: "+String(value2));
float value3 = sensors.getTempCByIndex(0);
display.println("TEMP.out: "+String(value3));
int value5 = EEPROM.read(addr_targ);
EEPROM.put(addr_last, value5);
// Serial.println("temperature_target: "+String(value5));
display.println("TEMP.targrt: "+String(value5));
if (value1 <= value5-delta)digitalWrite(RELEY, HIGH);
else if (value1 >= value5) digitalWrite(RELEY, LOW);
// if (digitalRead(RELEY) == LOW) value4 =0;
// else value4 = 1;
// EEPROM.put(addr_reley, value4);
unsigned long millis(20000);
display.display();
unsigned long micros(200);
display.clearDisplay();
}
void ubidots() {
client.wifiConnection(WIFISSID, PASSWORD);
if (WiFi.status() != WL_CONNECTED){
unsigned long millis(120000);
int value5 = valBase;
EEPROM.put(addr_targ, value5);
WiFi.disconnect();}
else {int value5 = client.getValue(ID_5);
if(value5 <= 5){ value5 = EEPROM.read(addr_last);
EEPROM.put(addr_targ, value5);}
else EEPROM.put(addr_targ, value5);
Serial.println("temperature_target: "+String(value5));
sensors.requestTemperatures();
float value1 = dht.readTemperature();
float value2 = dht.readHumidity();
float value3 = sensors.getTempCByIndex(0);
long Time = getVarTimestamp(TOKEN);
if (digitalRead(RELEY) == LOW) value4 =0;
else value4 = 1;
Serial.println("RELEY: "+String(value4));
client.add(ID_1, value1);
client.add(ID_2, value2);
client.add(ID_3, value3);
client.add(ID_4, value4);
unsigned long millis(20000);
client.sendAll();
WiFi.disconnect(); }
}