Loosing Virtual Pins

Is anyone else seen an issue where certain virtual pins seem to disappear? In my particular case V3 is not assigned on any widget yet it does not appear in the assignment drop down menu. I also note that the Digital pin D3 seems to float at various states before settling. Probably unrelated but thought I’d mention it.

Thanks,
R

1 Like

Could you please put screenshots with pin selection and widget screen? Also tell me your email so I could check.

Hey Pavel,

I was going to put together some nice screen shots and some commentary for you last night. When I tried to log in, I had several log in issues… “server not working, try back later”. And trying the wrong password when the app reset. After ultimately getting logged in, all of the virtual pin assignments were gone. I went through and redid all the assignment and V3 was then available. All was working well.

Woke up this morning and tried to connect to blynk. Actually blynk was up and running but not reactive. I logged out and then tried to log in… again with some authentication issues. After connecting, all the virtual pin assignments were again lost on both “projects”.

Anything bigger going on here? Suggestions?

R

PS Email: arduino@rapgar.com

Hello. Issue with “server not working” is fixed. Please wait for the next update. Regarding pins disappearing - we was not able to reproduce. I’ll check your account, thank you for reporting.

Thanks for all your work…

I can’t duplicate it either but pretty sure I was seeing what I was seeing… resolved by the server reset.

R

1 Like

Well, if you saw it, than there was an issue. We are very interested to fix it.

Here you go Dmitriy,

I was able to fully duplicate the problem… although I really wasn’t trying.

From the first picture, you can see that V0,1,2, LED is V3…V10, 11, LED is V13…V20,21,22, LED is 23…and finally V24,25,26, LED 27. Uptime is assigned to V31.

From picture 2, you can see pins V12,14 &15 are unavailable yet unassigned.

Complete Code is provided below. Would love to know what you find.

    /*********************************************************************
      Four Zone Sprinkler Timer with Manual Override
     ********************************************************************/
    
    #define BLYNK_PRINT Serial // Enables Serial Monitor
    #include <SPI.h>
    #include <Ethernet.h>
    #include <BlynkSimpleEthernet.h> // This part is for Ethernet stuff
    #include <SimpleTimer.h>
    
    char auth[] = "3fa959f4f931489ab215d889ea92e369"; // Put your Auth Token here. (see Step 3 above)
    
    SimpleTimer timer;
    
      int enableZone1 = LOW;  // set variables here to be available globally
      int timerZone1 = LOW;
      int manualZone1 = LOW;
      int enableZone2 = LOW;  // set variables here to be available globally
      int timerZone2 = LOW;
      int manualZone2 = LOW;
      int enableZone3 = LOW;  // set variables here to be available globally
      int timerZone3 = LOW;
      int manualZone3 = LOW;
      int enableZone4 = LOW;  // set variables here to be available globally
      int timerZone4 = LOW;
      int manualZone4 = LOW;
    
    void setup()
    {
      Serial.begin(9600); // See the connection status in Serial Monitor
      Blynk.begin(auth);  // Here your Arduino connects to the Blynk Cloud.
    
      // Setup a function to be called every second
      timer.setInterval(1000L, sendUptime);
      timer.setInterval(500L, manageZone1);
      timer.setInterval(500L, manageZone2);
      timer.setInterval(500L, manageZone3);
      timer.setInterval(500L, manageZone4);
      
      //  Set all Arduino outputs to HIGH in respect to Relay Board
      pinMode(2, OUTPUT); // Zone 1
      digitalWrite(2, HIGH);
      pinMode(3, OUTPUT); // Zone 2
      digitalWrite(3, HIGH);
      pinMode(4, OUTPUT); // Zone 3
      digitalWrite(4, HIGH);
      pinMode(5, OUTPUT); // Zone 4
      digitalWrite(5, HIGH);
    }
    
    //  Zone 1
    BLYNK_WRITE(0)
    { enableZone1 = param.asInt(); }
    BLYNK_WRITE(1)
    { timerZone1 = param.asInt(); }
    BLYNK_WRITE(2)
    { manualZone1 = param.asInt(); }
    
    //  Zone 2
    BLYNK_WRITE(10)
    { enableZone2 = param.asInt(); }
    BLYNK_WRITE(11)
    { timerZone2 = param.asInt(); }
    BLYNK_WRITE(12)
    { manualZone2 = param.asInt(); }
    
    //  Zone 3
    BLYNK_WRITE(20)
    { enableZone3 = param.asInt(); }
    BLYNK_WRITE(21)
    { timerZone3 = param.asInt(); }
    BLYNK_WRITE(22)
    { manualZone3 = param.asInt(); }
    
    //  Zone 4
    BLYNK_WRITE(24)
    { enableZone4 = param.asInt(); }
    BLYNK_WRITE(25)
    { timerZone4 = param.asInt(); }
    BLYNK_WRITE(26)
    { manualZone4 = param.asInt(); }
    
    
    
    void loop()   // run over and over again
    {
      Blynk.run(); // Initiates Blynk
      timer.run(); // Initiates SimpleTimer
    }
    
    //  manage Sprinkler Zone 1
    void manageZone1()  {
      if  (((enableZone1 == HIGH) && (timerZone1 == HIGH)) || (manualZone1 == HIGH)) {
        digitalWrite(2, LOW);
        Blynk.virtualWrite(3, HIGH); }
      else  {
        digitalWrite(2, HIGH);
        Blynk.virtualWrite(3, LOW);  }   
    }
    
    //  manage Sprinkler Zone 2
    void manageZone2()  {
      if  (((enableZone2 == HIGH) && (timerZone2 == HIGH)) || (manualZone2 == HIGH)) {
        digitalWrite(3, LOW);
        Blynk.virtualWrite(13, HIGH); }
      else  {
        digitalWrite(3, HIGH);
        Blynk.virtualWrite(13, LOW);  }   
    }
    
    //  manage Sprinkler Zone 3
    void manageZone3()  {
      if  (((enableZone3 == HIGH) && (timerZone3 == HIGH)) || (manualZone3 == HIGH)) {
        digitalWrite(4, LOW);
        Blynk.virtualWrite(23, HIGH); }
      else  {
        digitalWrite(4, HIGH);
        Blynk.virtualWrite(23, LOW);  }   
    }
    
    //  manage Sprinkler Zone 4
    void manageZone4()  {
      if  (((enableZone4 == HIGH) && (timerZone4 == HIGH)) || (manualZone4 == HIGH)) {
        digitalWrite(5, LOW);
        Blynk.virtualWrite(27, HIGH); }
      else  {
        digitalWrite(5, HIGH);
        Blynk.virtualWrite(27, LOW);  }   
    }
    
    
    // This function sends Arduino's up time every second to Virtual Pin (31).
    // 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 sendUptime()
    {
      Blynk.virtualWrite(V31, millis() / 1000);
    }

@rapgar thank you for reporting! You need to remove your dashboard and create new one. this bug is because of migration from old version app to new one. Creating new dashboard should resolve it.

Hello, I tried the project of “Apgar” I found it interesting and easy to implement all works well or nearly so, I added a LCD.widgets that indicates the status of the “Zone” and the moisture level of the soil, there are two problems one minor that is that when the area is active on the LCD the message “zone 1 ON” also flashes the moisture level of the soil is flashing, the second pigrave and where I’m banging my head for a long, it is that I added, compared to original project a daily timer more per day to irrigate twice a day, but when you are in 'zone 1 prog. A "the relay works intermittently (on-off-on-off-on etc.etc) to the duration of the timer, the problem presents himself with the “zone 2 prog. A” but it works properly “zone 1 Prog. B” and “zone 2 Prog. B” why? you can help me?

#define BLYNK_PRINT Serial // Enables Serial Monitor
#define MOISTURE A0
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
int moisture= A0; 
int value= A0;   

    char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; //insert here your token generated by Blynk
 
 WidgetLCD lcd(V7);
  
    SimpleTimer timer;


void sendData(){
  



}

      int enableZone1 = LOW;  // set variables here to be available globally
      int timerZone1 = LOW;
      int timerZone3 = LOW;
      int manualZone1 = LOW;
      int enableZone2 = LOW;  // set variables here to be available globally
      int timerZone2 = LOW;
      int timerZone4 = LOW;
      int manualZone2 = LOW;
     
    void setup()
    {
      Serial.begin(9600); // See the connection status in Serial Monitor
      Blynk.begin(auth, "TPLINK", "xxxxxxxxxxxxx"); //insert here your SSID and password

    
      // Setup a function to be called every second
  
      timer.setInterval(500L, manageZone1);
      timer.setInterval(500L, manageZone2);
      
      
      pinMode(moisture, INPUT);
      pinMode(2, OUTPUT); // Zone 1
      digitalWrite(2, HIGH);
      pinMode(5, OUTPUT); // Zone 2
      digitalWrite(5, HIGH);
      
    }
    
    //  Zone 1
    BLYNK_WRITE(0)
    { enableZone1 = param.asInt(); }
    BLYNK_WRITE(1)
    { timerZone1 = param.asInt(); }
    BLYNK_WRITE(2)
    { manualZone1 = param.asInt(); }
    BLYNK_WRITE(3)
    { timerZone3 = param.asInt(); }
    
    //  Zone 2
    BLYNK_WRITE(10)
    { enableZone2 = param.asInt(); }
    BLYNK_WRITE(11)
    { timerZone2 = param.asInt(); }    
    BLYNK_WRITE(12)
    { manualZone2 = param.asInt(); }
    BLYNK_WRITE(13)
    { timerZone4 = param.asInt(); }
   
    
        
    void loop()   // run over and over again

    
    {
      Blynk.run(); // Initiates Blynk
      timer.run(); // Initiates SimpleTimer
      value= analogRead(moisture);
      lcd.clear(); 
      lcd.print(9, 0, "H/T:");
      lcd.print(13, 0, value);
      
      delay(300);
    }
 
    //  manage Sprinkler Zone 1
    void manageZone1()  {
      if  (((enableZone1 == HIGH) && (timerZone1 == HIGH)) || (manualZone1 == HIGH)) {     
        digitalWrite(2, LOW);        
        lcd.print(4, 1, "Zona 1 ON");}
      if  (((enableZone1 == HIGH) && (timerZone3 == HIGH)) || (manualZone1 == HIGH)) { 
        digitalWrite(2, LOW);        
        lcd.print(4, 1, "Zona 1 ON");}
      else  {
        digitalWrite(2, HIGH);       
        }   
    }
    
    //  manage Sprinkler Zone 2
    void manageZone2()  {
      if  (((enableZone2 == HIGH) && (timerZone2 == HIGH)) || (manualZone2 == HIGH)) {       
        digitalWrite(5, LOW);        
        lcd.print(4, 1, "Zona 2 ON");}
      if  (((enableZone2 == HIGH) && (timerZone4 == HIGH)) || (manualZone2 == HIGH)) {
      digitalWrite(5, LOW);        
        lcd.print(4, 1, "Zona 2 ON");}
      else  {
        digitalWrite(5, HIGH);        
      
        }      
   }