Blynk goes offline after 1 minute of being online

I’m new to Blynk and I’m building a smart traffic light system that can be controlled remotely when needed.

I’m using a Raspberry Pi Pico W + Wi - Fi communication

About Project
The code simulates traffic light at an intersection
North and South traffic lights work together
Same for East and West
Ultrasonic sensors(for lack of better sensors) have been put in place to detect cars
-The sensor is triggered just before the green light is turn on to detect the presence of a car thereby increases the green light duration from 5seconds to 10seconds.

My Problem
Blynk goes offline after some few seconds of staying online

Code is below
I used correct SSID,Password,authentication token
Code is in Micropython

from machine import Pin
import blynklib
import time
import network


 

 
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("*******","*******")
 
BLYNK_AUTH = '*************************************'
 
# Wait for network connection
wait = 10
while wait > 0:
    if wlan.status() < 0 or wlan.status() >= 3:
        break
    wait -= 1
    print('waiting for connection...')
    time.sleep(1)
 
# Handle connection error
if wlan.status() != 3:
    raise RuntimeError('network connection failed')
else:
    print('connected')
    ip = wlan.ifconfig()[0]
    print('IP: ', ip)
 
# Connect to Blynk
blynk = blynklib.Blynk(BLYNK_AUTH)

 
# Initialize the relay pins
relay1_pin = Pin(4, Pin.OUT)
relay2_pin = Pin(8, Pin.OUT)
relay3_pin = Pin(12, Pin.OUT)
relay4_pin = Pin(20, Pin.OUT)
relay5_pin = Pin(10, Pin.OUT)
relay6_pin = Pin(18, Pin.OUT)


# Set up GPIO pins for traffic lights
NORTH_RED_PIN = machine.Pin(2,machine.Pin.OUT)
NORTH_YELLOW_PIN = machine.Pin(3, machine.Pin.OUT)
NORTH_GREEN_PIN = machine.Pin(4, machine.Pin.OUT)

SOUTH_RED_PIN = machine.Pin(6, machine.Pin.OUT)
SOUTH_YELLOW_PIN =machine.Pin(7, machine.Pin.OUT)
SOUTH_GREEN_PIN = machine.Pin(8, machine.Pin.OUT)

EAST_RED_PIN = machine.Pin(10, machine.Pin.OUT)
EAST_YELLOW_PIN = machine.Pin(11, machine.Pin.OUT)
EAST_GREEN_PIN = machine.Pin(12, machine.Pin.OUT)

WEST_RED_PIN = machine.Pin(18, machine.Pin.OUT)
WEST_YELLOW_PIN =machine.Pin(19, machine.Pin.OUT)
WEST_GREEN_PIN = machine.Pin(20, machine.Pin.OUT)

PEDESTRIAN_GREEN_PIN = machine.Pin(15, machine.Pin.OUT)
PEDESTRIAN_RED_PIN = machine.Pin(14, machine.Pin.OUT)
PEDESTRIAN_YELLOW_PIN = machine.Pin(16, machine.Pin.OUT)

#Ultrasonic Senesor Pins
S1 = machine.Pin(0,machine.Pin.OUT)
S2 = machine.Pin(1,machine.Pin.OUT)
S3 = machine.Pin(5,machine.Pin.OUT)
S4 = machine.Pin(9,machine.Pin.OUT)
S5 = machine.Pin(13,machine.Pin.OUT)
S6 = machine.Pin(17,machine.Pin.OUT)
S7 = machine.Pin(26,machine.Pin.OUT)
S8 = machine.Pin(27,machine.Pin.OUT)


#Function to Measure Distance
def measure_distance(a,b):
    # Trigger the ultrasonic sensor
    a.low()
    time.sleep_us(2)
    a.high()
    time.sleep_us(10)
    a.low()

    # Wait for the echo pulse
    while b.value() == 0:
        pass
    pulse_start = time.ticks_us()

    while b.value() == 1:
        pass
    pulse_end = time.ticks_us()

    # Calculate the distance based on the pulse duration
    pulse_duration = time.ticks_diff(pulse_end, pulse_start)
    distance = pulse_duration * 0.0343 / 2

    return distance


#Funcation for Pedestrian Traffic Light
def pedestrian_crossing():
    #Pedestrian
    time.sleep(2)
    PEDESTRIAN_RED_PIN.value(0)
    PEDESTRIAN_GREEN_PIN.value(1)
    time.sleep(5)
    PEDESTRIAN_GREEN_PIN.value(0)
    PEDESTRIAN_YELLOW_PIN.value(1)
    time.sleep(2)
    PEDESTRIAN_YELLOW_PIN.value(0)
    PEDESTRIAN_RED_PIN.value(1)
    time.sleep(2)


#Condidtions to take into consideration to extend the duration of green light
def control(d1, d2, L3, N3, L2, N2, L1, N1):
    L3.value(0)
    N3.value(0)
    N2.value(1)
    L2.value(1)

    if d1 <= 10:
        if d2 <= 10:
            time.sleep(5)
        else:
            N3.value(0)
            N2.value(0)
            N1.value(1)
            time.sleep(3)
            L3.value(0)
            L2.value(1)
            time.sleep(2)
    elif d2 <= 10:
        L2.value(0)
        L1.value(1)
        time.sleep(3)
        N3.value(0)
        N2.value(1)
        time.sleep(2)
        N2.value(0)

    time.sleep(2)



is_virtual_pin_on = False

#If a button is on,the corresponding traffic light stays Greeen with the rest of the traffic lights Red
# Register virtual pin handler
@blynk.on("V0") #virtual pin V1
def v1_write_handler(value): #read the value
    global is_virtual_pin_on
    if int(value[0]) == 1:
        is_virtual_pin_on = True
        relay1_pin.value(1) #turn the relay1 on
        EAST_RED_PIN.value(1)
        WEST_RED_PIN.value(1)
        EAST_YELLOW_PIN.value(0)
        WEST_YELLOW_PIN.value(0)
        EAST_GREEN_PIN.value(0)
        WEST_GREEN_PIN.value(0)
        NORTH_GREEN_PIN.value(1)
        SOUTH_GREEN_PIN.value(0)
        NORTH_YELLOW_PIN.value(0)
        SOUTH_YELLOW_PIN.value(0)
        NORTH_RED_PIN.value(0)	
        SOUTH_RED_PIN.value(1)
        PEDESTRIAN_YELLOW_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(1)
        PEDESTRIAN_GREEN_PIN.value(0)
        print("One")
        #NOrth
        
    else:
        relay1_pin.value(0) #turn the relay1 off
        is_virtual_pin_on = False
        EAST_RED_PIN.value(0)
        EAST_RED_PIN.value(0)
        WEST_RED_PIN.value(0)
        NORTH_GREEN_PIN.value(0)
        SOUTH_RED_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(0)
    
 
@blynk.on("V1") #virtual pin V2
def v2_write_handler(value): #read the value
    global is_virtual_pin_on
    if int(value[0]) == 1:
        is_virtual_pin_on = True
        print("Two")
        relay2_pin.value(1)
        WEST_RED_PIN.value(0)
        EAST_RED_PIN.value(1)
        WEST_RED_PIN.value(1)
        EAST_YELLOW_PIN.value(0)
        WEST_YELLOW_PIN.value(0)
        EAST_GREEN_PIN.value(0)
        WEST_GREEN_PIN.value(0)
        NORTH_GREEN_PIN.value(0)
        SOUTH_GREEN_PIN.value(1)
        NORTH_YELLOW_PIN.value(0)
        SOUTH_YELLOW_PIN.value(0)
        NORTH_RED_PIN.value(1)
        SOUTH_RED_PIN.value(0)
        PEDESTRIAN_YELLOW_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(1)
        PEDESTRIAN_GREEN_PIN.value(0)
        #South
    else:
        relay2_pin.value(0) #turn the relay2 off
        is_virtual_pin_on = False
        EAST_RED_PIN.value(0)
        WEST_RED_PIN.value(0)
        SOUTH_GREEN_PIN.value(0)
        NORTH_RED_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(0)
 
@blynk.on("V2") #virtual pin V3
def v3_write_handler(value): #read the value
    global is_virtual_pin_on
    if int(value[0]) == 1:
        is_virtual_pin_on = True
        print("Three")
        relay3_pin.value(1)
        EAST_RED_PIN.value(0)
        WEST_RED_PIN.value(1)
        EAST_YELLOW_PIN.value(0)
        WEST_YELLOW_PIN.value(0)
        EAST_GREEN_PIN.value(1)
        WEST_GREEN_PIN.value(0)
        NORTH_GREEN_PIN.value(0)
        SOUTH_GREEN_PIN.value(0)
        NORTH_YELLOW_PIN.value(0)
        SOUTH_YELLOW_PIN.value(0)
        NORTH_RED_PIN.value(1)
        SOUTH_RED_PIN.value(1)
        PEDESTRIAN_YELLOW_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(1)
        PEDESTRIAN_GREEN_PIN.value(0)
        #East
    else:
        relay3_pin.value(0) #turn the relay3 off
        is_virtual_pin_on = False
        NORTH_RED_PIN.value(0)
        SOUTH_RED_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(0)
        WEST_RED_PIN.value(0)
        
        
 
@blynk.on("V3") #virtual pin V4
def v4_write_handler(value): #read the value
    global is_virtual_pin_on
    if int(value[0]) == 1:
        is_virtual_pin_on = True
        print("Four")
        relay4_pin.value(1) 
        EAST_RED_PIN.value(1)
        WEST_RED_PIN.value(0)
        EAST_YELLOW_PIN.value(0)
        WEST_YELLOW_PIN.value(0)
        EAST_GREEN_PIN.value(0)
        WEST_GREEN_PIN.value(1)
        NORTH_GREEN_PIN.value(0)
        SOUTH_GREEN_PIN.value(0)
        NORTH_YELLOW_PIN.value(0)
        SOUTH_YELLOW_PIN.value(0)
        NORTH_RED_PIN.value(1)
        SOUTH_RED_PIN.value(1)
        PEDESTRIAN_YELLOW_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(1)
        PEDESTRIAN_GREEN_PIN.value(0)
    else:
        relay4_pin.value(0) #turn the relay4 off
        is_virtual_pin_on = False
        NORTH_RED_PIN.value(0)
        SOUTH_RED_PIN.value(0)
        EAST_RED_PIN.value(0)
        WEST_GREEN_PIN.value(0)
        PEDESTRIAN_RED_PIN.value(0)



while True:
    
    #If Virtual Pin is off run the normal operation of a trafficlight
    if is_virtual_pin_on == False:
        #Measure distance of ultrasonic sensor 
        d1 = measure_distance(S1,S2)
        d2 = measure_distance(S3,S4)
        print("d1",d1)
        print("d2",d2)
        
        #Turn of Red Light for East and West
        #Turn off Red Light for North and South
        EAST_RED_PIN.value(1)
        WEST_RED_PIN(1)
        PEDESTRIAN_RED_PIN.value(1)
        
        #Turn off Red Light for North and South and turn on Green
        NORTH_RED_PIN.value(0)
        SOUTH_RED_PIN(0)
        NORTH_GREEN_PIN.value(1)
        SOUTH_GREEN_PIN.value(1)
        time.sleep(5)
        
        #Green Time Control     control(d1,d2,NORTH_GREEN_PIN,SOUTH_GREEN_PIN,NORTH_YELLOW_PIN,SOUTH_YELLOW_PIN,NORTH_RED_PIN,SOUTH_RED_PIN)
        
        NORTH_YELLOW_PIN.value(0)
        SOUTH_YELLOW_PIN.value(0)
        NORTH_RED_PIN.value(1)
        SOUTH_RED_PIN(1)
        time.sleep(2)
        
        pedestrian_crossing()
        
        #Measure distance of ultrasonic sensor
        d3 = measure_distance(S5,S6)
        d4 = measure_distance(S3,S4)
        print("d3",d3)
        print("d4",d4)
        
        #Turn East and West Green Light on
        EAST_GREEN_PIN.value(1)
        WEST_GREEN_PIN.value(1)
        EAST_RED_PIN.value(0)
        WEST_RED_PIN(0)
        time.sleep(5)
        
        #Green Time Duration Control      control(d3,d4,EAST_GREEN_PIN,WEST_GREEN_PIN,EAST_YELLOW_PIN,WEST_YELLOW_PIN,EAST_RED_PIN,WEST_RED_PIN)
        
        EAST_YELLOW_PIN.value(0)
        WEST_YELLOW_PIN.value(0)
        EAST_RED_PIN.value(1)
        WEST_RED_PIN(1)
        time.sleep(5)
        EAST_RED_PIN.value(1)
        WEST_RED_PIN(1)
        
        pedestrian_crossing()
     
    #Else execute code under the virtual pin that is on
    else:
        blynk.run()
        time.sleep(4)