BLYNK
HOME       📲 GETTING STARTED       📗 DOCS       ❓HELP CENTER       👉 SKETCH BUILDER

How to add slider in blynk to control temperature setpoint


#1

Hello blynkers, i am currently new in programming and I need help with my project. I already successfully display the temperature & humidity in my Blynk app using DHT11. Can someone show me how use slider widget to control my desired temperature to activated my relay module? Any advice and help would be great. p/s: Iam using nodeMCU(esp8266), DHT11 and relay module. Below are my current code


 
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
 
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
}
 
void setup()
{
  // Debug console
  Serial.begin(9600);
 
  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
 
  dht.begin();
 
  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
}
 
void loop()
{
  Blynk.run();
  timer.run();
}

#2

Like this:

float setpoint = 0;

BLYNK_WRITE(V0)  // slider widget
{
  setpoint = param.asFloat();  
}

#3

thank you for your response sir, after that, how can active my relay module? iam planning to set my relay module as LED(V9) in my blynk


#4

Why would you be using an LED widget for a relay?

float setpoint = 0;
bool relayoff = true;
const int relayPin = 5;  // D1;

BLYNK_WRITE(V0)  // slider widget
{
  setpoint = param.asFloat();  
}

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
  if((setpoint < t) && (relayoff == true))
  { 
    digitalWrite(relayPin, 1); // assuming relay is active HIGH
    relayoff = false;
  }  
}

void setup() {
  pinMode(relayPin, OUTPUT);
  // .............
}

void loop() {
  // ............
}

#5

i just thought that when the relay is on… the LED in blynk would be also on as notification that the module is running


#6

is this code correct? i try compiling and upload it receive no error. I slide the setpoint to 28 in my blynk app when the current room temperature is 30 but the relay still off.

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
int LED  = 5; 

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";
 
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "i";
char pass[] = "";
 
#define DHTPIN 0          // D3
 
// Uncomment whatever type you're using!
#define DHTTYPE DHT11     // DHT 11

 
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
 
float setpoint = 0;
bool relayoff = true;
const int relayPin = 5;  // D1;

BLYNK_WRITE(V0)  // slider widget
{
  setpoint = param.asFloat();  
}
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
  if((setpoint < t) && (relayoff == true))
  { 
    digitalWrite(relayPin, 1); // assuming relay is active HIGH
    relayoff = false;
  }  
}


void setup()
{
 
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  dht.begin();
  pinMode(relayPin, OUTPUT);
 
  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
}
 
void loop()
{
  Blynk.run();
  timer.run();
}

#7

Many relays are active LOW. Do you know which type you have?


#8

like this
i connected the Vcc to Vin, GND to GND and IN1 into D1 of my nodeMcu


#9

So you don’t know if they are active high or low.

Try changing the 1 to 0 in the digitalWrite().


#10

I already changed the value to 0. The result is the relay continually on even i change the value on the slider.


#11

In V0 you would need to add:

relayoff = true;

so a slider movement will reset the flag.

You will need to add code to the sketch to turn the relay off as well.


#12

sorry, where should i add relayoff = true; ? or i just replace here
digitalWrite(relayPin, 0); relayoff = false; ?


#13

Something like this but you might need to switch 1 and 0 around.

float setpoint = 0;
bool relaystatuschanged = false;
const int relayPin = 5;  // D1;

BLYNK_WRITE(V0)  // slider widget
{
  setpoint = param.asFloat();
  relaystatuschanged = true; 
}

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, t);
  Blynk.virtualWrite(V6, h);
  if(setpoint < t) && (relaystatuschanged == true)
  { 
    digitalWrite(relayPin, 1); // assuming relay is active HIGH
    relaystatuschanged = false;
  }
  if(setpoint >= t) && (relaystatuschanged == true)
  { 
    digitalWrite(relayPin, 0); // assuming relay is active HIGH
    relaystatuschanged = false;
  }     
}

void setup() {
  pinMode(relayPin, OUTPUT);
  // .............
}

void loop() {
  // ............
}

You need a flag so that the relay doesn’t keep switching on / off over and over again when it’s in the desired temperature range.


#14

when i try to compile and error come out just like this
image

should i declare it like this? int relaystatuschanged;


#15

No declare it as per my sketch.


#16

it come out another error


#17

Add an extra set of opening and closing brackets to each of the if statements.


#18

after adding ‘( and )’ bracket it come out like this
image


#19

Like this:
if((setpoint < t) && (relaystatuschanged == true))


#20

image

should i delete the semicolon?