import network
import BlynkLib
from machine import Pin,ADC
import time
#LDR Config
ldrValue = ADC(Pin(27))
smValue = ADC(Pin(28))
MAX_ADC_READING = 65535;
ADC_REF_VOLTAGE = 3.3;
REF_RESISTANCE = 50;
LUX_CALC_SCALAR = 12518931;
LUX_CALC_EXPONENT = -1.405;
#LED Config
redLED=machine.Pin(14, machine.Pin.OUT)
blueLED=machine.Pin(15, machine.Pin.OUT)
redLED.off()
blueLED.off()
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("@PCCPL-WIFI","")
BLYNK_AUTH = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# connect the network
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)
"Connection to Blynk"
# Initialize Blynk
blynk = BlynkLib.Blynk(BLYNK_AUTH)
# Register virtual pin handler
@blynk.on("V1") #virtual pin V0
def v1_write_handler(value): #read the value
if int(value[0]) == 1:
blueLED.value(1) #turn the led on
else:
blueLED.value(0) #turn the led off
while True:
global ldrResistance, rawData, ldrVoltage
rawDataSM = smValue.read_u16()
rawData = ldrValue.read_u16()
print(f"Raw data SM: {rawDataSM}")
SMVoltage = rawDataSM / MAX_ADC_READING * ADC_REF_VOLTAGE;
print(f"SMVoltage voltage: {SMVoltage}")
SMPercent = SMVoltage * 100 / ADC_REF_VOLTAGE
SMPercent = 100 - SMPercent
print(f"Raw data: {rawData}")
resistorVoltage = rawData / MAX_ADC_READING * ADC_REF_VOLTAGE;
print(f"Resistor voltage: {resistorVoltage}")
ldrVoltage = ADC_REF_VOLTAGE - resistorVoltage;
print(f"LDR voltage: {ldrVoltage}")
ldrResistance = ldrVoltage/resistorVoltage * REF_RESISTANCE;
print(f"LDR resistance: {ldrResistance}")
ldrLux = LUX_CALC_SCALAR * pow(ldrResistance, LUX_CALC_EXPONENT);
print(f"Lux: {ldrLux}")
print("==========")
blynk.virtual_write(5, SMPercent)
time.sleep(0.25)
blynk.run()