V1 cannot be activated without passing the D1-D4 button

Why if i want to activate V1 ON (All The Light On), before you have to D1 D2 D3 and D4 ON first? because if you want V1 ON we have to activate D1-D4 ON first … I use relay 4 ch 5V with Nodemcu
what’s wrong?

Thank you

My Code


#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
 
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "xxxx";
 
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "PULPSTONE";
char pass[] = "internet";
bool pirEnabled = false;
BLYNK_WRITE(V1){
  int control4DigitalPins = param.asInt();
  if(control4DigitalPins == 1){
    digitalWrite(D1, HIGH);
    digitalWrite(D2, HIGH);
    digitalWrite(D3, HIGH);
    digitalWrite(D7, HIGH);
  }
  else{
    digitalWrite(D1, LOW);
    digitalWrite(D2, LOW);
    digitalWrite(D3, LOW);
    digitalWrite(D7, LOW);
  }
}
}
 
BLYNK_WRITE(V3){  // button in switch mode
  if(param.asInt()){
    pirEnabled = true;  
  }
  else{
    pirEnabled = false;    
  }
}
 
#define DHTPIN 2          // What digital pin we're connected to
#define ledPower 16
 
// Uncomment whatever type you're using!
#define DHTTYPE DHT11     // DHT 11
//#define DHTTYPE DHT22   // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21   // DHT 21, AM2301
 
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer 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()
{
  int h = dht.readHumidity();
  int t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  int p=digitalRead(14);
   
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
 if((p==HIGH) && (pirEnabled == true)){
 Blynk.notify("Gerakan terdeteksi");
}
}
void setup()
{
  pinMode (ledPower,OUTPUT);
  digitalWrite (ledPower, HIGH);
  pinMode(14,INPUT);
  Serial.begin(9600); // See the connection status in Serial Monitor
  Blynk.begin(auth, ssid, pass);
 
  dht.begin();
 
  // Setup a function to be called every second
  timer.setInterval(10000L, sendWifi);
  timer.setInterval(1000L, sendSensor);
}
void sendWifi()
{
  Blynk.virtualWrite(V2, map(WiFi.RSSI(), -105, -40, 0, 100) );
}
 
void loop()
{
  Blynk.run(); // Initiates Blynk
  timer.run(); // Initiates SimpleTimer
}

I have read and reread this many times… I don’t understand your issue… You seem to be saying if you want to turn the pins ON, they have to be ON first?? That doesn’t make sense.

because it really was a problem in me, because if i want to activate the PIN V1 i must pass the D1-D4 ON first

Aside from GPIO0 (D3) which has a built in pull-up resistor and thus should probably be avoided for your relay purposes. This should work as desired…

Blynk button ON = digital pins ON

Blynk button OFF = digital pins OFF.

What is your exact issue?

PS, it is better to use the GPIO numbering in your code, not the Dx silkscreened designations… and to use the green pins (below) first before others…

PPS, If your relays are Active LOW (AKA relay turns ON when sent a LOW signal), then you should reverse the button action on either your Widget settings or in the code.