How to synchronize Blynk button widget and physical button with physical led

So, I have a project whereby I am controlling a light through a relay with a button widget and physical momentary push button. I have implemented code snippets found in other help requests. All appears to be working as it should except that I get intermittent loss of wifi. I am not using any analog pins that have been mentioned as the culprit in other help posts. There is no set pattern to the wifi interruption. Sometimes it happens while I’m pushing the physical button. Other times while I am using the Blynk app virtual button. My code is below. Does anyone see anything that might be causing the issue. I have tried the sketch on multiple nodeMCU microcontrollers and all experience the same issue. I have checked my home wifi network and the logs do not report and issues.

A second problem I am trying to figure out is how to incorporate a physical led into the sketch so that when the relay is LOW (lights are off) the led lights up and when the relay is HIGH (lights are on) the led turns off. Essentially I am trying to use the led as a night light to assist in finding the push button when I want to manually turn on the light.

I have tried placing code within the checkPhysicalButton() section and the BLYNK_WRITE(V1) section with little success. I can get the led to come on but it does not follow the logic I am trying to achieve.

Anyway, thanks in advance for any suggestions on either of my problems.

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>

char auth[] = "myToken";

//WiFi credentials.
char ssid[] = "mySSID";
char pass[] = "myPass";

const int btnPin = D2;             // pin for physical push button switch.
const int RelayPin = D4;         // pin for relay output.

BlynkTimer timer;
void checkPhysicalButton();
int btnPinState = LOW;           // ON
int RelayPinState = HIGH;        // OFF

//*******Sets Relays to Off Position*****************
#define TURN_ON 0                 // TURN_ON and TURN_OFF are defined to account for Active High relays
#define TURN_OFF 1                // Used to switch relay states

void setup()
  Serial.begin (9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(RelayPin, OUTPUT);            //  initialize your pin as output.
  pinMode(btnPin, INPUT_PULLUP);        //  initialize your pin as input with enable internal pull-up resistor "input_pullup"
  digitalWrite(RelayPin, RelayPinState);
  digitalWrite(RelayPin, TURN_OFF);     // remain off till command is receive

  // Setup a function to be called every 100 ms
  timer.setInterval(100L, checkPhysicalButton);

// Every time we connect to the cloud...
  // Request the latest state from the server

// When App button is pushed - switch the state
// Map this Virtual Pin to your Mobile Blynk apps widget.
  RelayPinState = param.asInt();
  digitalWrite(RelayPin, RelayPinState);

void checkPhysicalButton()
  if (digitalRead(btnPin) == LOW)
    // btnPinState is used to avoid sequential toggles
    if (btnPinState != LOW)
      // Toggle relay state
      RelayPinState = !RelayPinState;
      digitalWrite(RelayPin, RelayPinState);
      Blynk.virtualWrite(V1, RelayPinState);  //Update button widget

    btnPinState = LOW; 
    btnPinState = HIGH;

void loop()
{;                               // Run Blynk;                               // Run SimpleTimer

Seems like the power issue. Also please add debug -