#############################################################################################
# Task 1 #2 : Button (Wokwi/hardware) turn on/off LED in Blynk.
# Switch (Blynk) turn on/off LED in Wokwi/hardware.
#############################################################################################
from machine import Pin
import time
import network
import BlynkLib
### Button's pin (real & virtual), LED's pin (real & virtual), WiFi and Blynk credentials
b1_pin = 32
b1_vir = 4
led1_pin = 26
led1_vir = 1
b2_pin = 35
b2_vir = 5
led2_pin = 25
led2_vir = 2
b3_pin = 34
b3_vir = 6
led3_pin = 33
led3_vir = 3
SSID = 'Wokwi-GUEST'
PASS = ''
TOKEN = 'E_4lvXx6QMQBXIxVmOzphQ5CQzcaYqfr'
### Connect to WiFi
wifi = network.WLAN(network.STA_IF)
if not wifi.isconnected():
print("Connecting to {}...".format(SSID))
wifi.active(True)
wifi.connect(SSID, PASS)
while not wifi.isconnected():
pass
print('Connected! IP:', wifi.ifconfig()[0])
### Initialize button, LED and Blynk
led1 = Pin(led1_pin, Pin.OUT)
b1 = Pin(b1_pin, Pin.IN, Pin.PULL_UP)
led2 = Pin(led2_pin, Pin.OUT)
b2 = Pin(b2_pin, Pin.IN, Pin.PULL_UP)
led3 = Pin(led3_pin, Pin.OUT)
b3 = Pin(b3_pin, Pin.IN, Pin.PULL_UP)
blynk = BlynkLib.Blynk(TOKEN, insecure=True)
@blynk.on("connected")
def blynk_connected(ping):
print('Blynk ready. Ping:', ping, 'ms')
blynk.virtual_write(b1_vir, prev_b1) # init Button/Label in Blynk
blynk.virtual_write(b2_vir, prev_b2)
blynk.virtual_write(b3_vir, prev_b3)
@blynk.on("disconnected")
def blynk_disconnected():
print('Blynk disconnected')
@blynk.on("V4") # Handler to process received data from V1
def v4_write_handler(value):
state1 = int(value[0]) # convert value to integer
if state1 == 1:
led1.value(1) # Update LED
else:
led1.value(0)
def v5_write_handler(value):
state2 = int(value[0]) # convert value to integer
if state2 == 1:
led2.value(1) # Update LED
else:
led2.value(0)
def v6_write_handler(value):
state3 = int(value[0]) # convert value to integer
if state3 == 1:
led3.value(1) # Update LED
else:
led3.value(0)
### get initial button's values
prev_b1 = b1.value()
prev_b2 = b2.value()
prev_b3 = b3.value()
while True:
blynk.run()
curr_b1 = b1.value() # get latest switch state
curr_b2 = b2.value()
curr_b3 = b3.value()
if curr_b1 == 0: # switch is pressed
led1_val = 1 # value to turn on LED
if curr_b2 == 0:
led2_val = 1
if curr_b3 == 0:
led3_val = 1
else: # switch is released
led1_val = 0 # value to turn off LED
led2_val = 0
led3_val = 0
#led.value(led_val)
if curr_b1 != prev_b1: # if switch state changes
prev_b1 = curr_b1
blynk.virtual_write(led1_vir, led1_val) # update LED in Blynk
if curr_b2 != prev_b2:
prev_b2 = curr_b2
blynk.virtual_write(led2_vir, led2_val)
if curr_b3 != prev_b3:
prev_b3 = curr_b3
blynk.virtual_write(led3_vir, led3_val)