# unlam..
# Materia
# Titulo
# Expliccacion osea digamos : curso normal y excepciones
# Explciación pro
# Pendiente:
# - Documentar el código
# - Eliminar todo lo que sobre
# - Cambiar variables por nombres más claros
# - Preparar la versión ESP32-C3-F2 con protoboard.
from umqtt.simple import MQTTClient
from machine import ADC, PWM, Pin
import time
import network, ntptime
luz = ADC(33)
#luz = ADC(Pin(34))
#luz.atten(ADC.ATTN_11DB)
pin19 = Pin(18, Pin.OUT)
pwmPin = PWM(pin19)
pwmPin.freq(50)
pwmPin.duty(0)
pinPIR = Pin(13, Pin.IN) # -> esto mantiene el 1 por 5 segundos
ssid = 'Wokwi-GUEST'
wifipassword = ''
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, wifipassword)
#def lo de la hora ...
while not sta_if.isconnected():
try:
print(".", end="")
time.sleep(1)
except:
print("error")
print("Conectado")
ntptime.settime()
hora_actual = time.localtime()[3]
client_id = "LuzDinamica"
topic_PIR = "Matias_Lista/feeds/sensorpir"
topic_OnOff = "Matias_Lista/feeds/onoff"
topic_RangoHorario = "Matias_Lista/feeds/rangohorario"
mqtt_server = "io.adafruit.com"
port = 1883
user = "Matias_Lista"
password = "aio_VjOq75uDNPylwyt0eAjWdaoPHOKK"
forzado = 0
rango = [0]
def funcion_callback (topico, msg):
global forzado, rango
topico_rec = topico.decode("utf-8")
dato = msg.decode("utf-8")
if (topico_rec == topic_OnOff):
forzado = int(dato)
elif topico_rec == topic_RangoHorario:
rango = dato.split("-")
print(rango)
print("Recibido! \n Topico: " + topico.decode("utf-8") + " - Mensaje: " + msg.decode("utf-8"))
try:
conexionMQTT = MQTTClient(client_id, mqtt_server, user=user, password=password, port=port)
conexionMQTT.connect()
conexionMQTT.set_callback(funcion_callback)
conexionMQTT.subscribe(topic_OnOff)
conexionMQTT.subscribe(topic_RangoHorario)
print("WORKED!")
except OSError as e:
print("FALLO!!!!!")
exit()
last_sent_value = -1
while True:
if (last_sent_value != str(pinPIR.value())):
last_sent_value = str(pinPIR.value())
conexionMQTT.publish(topic_PIR, str(pinPIR.value()))
valor = luz.read()
brillo_porcentaje = ((valor - 32) / (4063 - 32) )
if (forzado == 1):
pwmPin.duty(1023)
else:
if(len(rango) < 2):
# la cantidad de elementos del rango es < 2,
# no hay rango, por lo tanto, tiene en cuenta el PIR
if (pinPIR.value()):
pwmPin.duty(int (1023 * brillo_porcentaje))
else:
pwmPin.duty(0)
else:
print(hora_actual)
# Si hay una hora activa,
if ((hora_actual >= int(rango[0])) and (hora_actual < int(rango[1]))):
# Estamos en el rango, led = 1
pwmPin.duty(1023)
print("Hola!!!!")
else:
# Si no estamos en el rango, comportamiento normal
if (pinPIR.value()):
pwmPin.duty(int (1023 * brillo_porcentaje))
else:
pwmPin.duty(0)
conexionMQTT.check_msg()
time.sleep_ms(500)
hora_actual = time.localtime()[3] - 3