from umqtt.simple import MQTTClient
import machine
import network
from machine import Pin
import time
ssid = 'Wokwi-GUEST'
wifipassword = ''
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, wifipassword)
print("Conectando")
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("CONECTADO A INTERNET")
print(sta_if.ifconfig())
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'LucasLeonel04'
password = 'aio_aXHQ89rmmlVhb9PGHMsIZ485KxE3'
cliend_id = 'CultivaIden'
topic_1 = 'LucasLeonel04/feeds/PadNumerico'
activador = Pin(5,Pin.IN,Pin.PULL_UP) #se definio el pin como Pull_Up por lo que sera 1 hasta que se lo precione
estadoact = 0 #indicador de estado actual del pulsador, para que solo registre un pulso al precionarlo
cont = 0 #contador de pulsos del boton
temp_manual = 40 #se le asigna la temperatura manual controlada por el dashboard
modoc = 0 #activador modo cultivo, con 0=desactivado, con 1=activado
carcont = 0 #caracter recibido por el dashboard - nombre erroneo (deberia ser caract)
cant_car = 0 #cantidad de caracteres recibidos desde el dashboard
carrec = 0 #indicado para saber si se recibio un caracter nuevo, necesario para restablecer
#la variable que guarda el caracter recibido
conta = 1234 #Contraseña que se debe ingresar para inicial el modo.
def funcion_callback(topic, msg):
dato = msg.decode('utf-8')
topicrec = topic.decode('utf-8')
print("Mensaje en topico "+topicrec+":"+dato)
if topicrec == topic_1:
global carcont,carrec,cant_car
carcont = dato
cant_car = cant_car + 1
carrec = 1
try:
conexionMQTT = MQTTClient(cliend_id, mqtt_server, user=user, password=password, port=int(port))
conexionMQTT.set_callback(funcion_callback)
conexionMQTT.connect()
conexionMQTT.subscribe(topic_1)
print("Conectado con el Broker MQTT")
except OSError as e:
print("Fallo la conexion al Broker, Reiniciando....")
time.sleep(5)
machine.reset()
NADA = 0
EVENTO = 1
ESPERA = 2
def procesarentrada(estadoActual,valorpin):
#funcion importante para que solo se detecte un pulso
#con esto se evita, al poner un contador, que se tomen valores mientras el
#boton este pulsado, es decir, solo admite un pulso.
if estadoActual==NADA and valorpin==False:
#si se esta en estado cero (no se recibio nada)
#y se oprime el boton, pasa a estado: evento
return EVENTO
if estadoActual==EVENTO:
return ESPERA
if estadoActual==ESPERA and valorpin==False:
return ESPERA
return NADA
def controlent():
global estadoact, cont, modoc
time.sleep_ms(5)
estadoact = procesarentrada(estadoact,activador.value())
if(estadoact==EVENTO):
cont = cont + 1
if(temp_manual == 40 and cont == 5):
print("Modo ingreso de cultivo")
modoc = 1
cont = 0
def cultacept():
rep = 1
global carcont
print("INGRESO EXITOSO (TIPEE # PARA SALIR)")
while carcont != '#':
print("PANTALLA INICIO CON INDICACIONES DE CONFIGURACIONES: ")
while rep!=0:
#se selecciona la opcion deseada y en los if, se muestra en pantalla, se indica boton de salida #
if carcont == str(1):
print("Haz a")
carcont = ''
elif carcont == str(2):
print("Haz b")
carcont = ''
elif carcont == str(3):
print("Haz c")
carcont = ''
elif carcont == str(4):
print("Haz d")
carcont = ''
elif carcont == '#':
rep=0
carcont = ''
try:
conexionMQTT.check_msg()
time.sleep_ms(500)
except OSError as e:
print("Fallo la conexion al Broker, Reiniciando....")
time.sleep(5)
machine.reset()
try:
conexionMQTT.check_msg()
time.sleep_ms(500)
except OSError as e:
print("Fallo la conexion al Broker, Reiniciando....")
time.sleep(5)
machine.reset()
concatcad = '' #se define en vacio, la variable que guardara la concatenacion de la cadena o contraseña
def mod_C(active):
global modoc,carcont,concatcad,carrec,cant_car,conta
while modoc==1 and carcont != '#':
time.sleep(1)
print("Cultivador Activado")
if carrec == 1:
carrec = 0
print("Caracter Recibido: "+str(carcont))
concatcad = str(concatcad) + str(carcont)
print("Cadena Concatenada: "+str(concatcad))
if cant_car == 4 and str(concatcad)==str(conta):
print("CONTRASEÑA ACEPTADA")
carcont = ''
concatcad = ''
cultacept()
#cant_car=0
concatcad = '#'
if cant_car == 4 and str(concatcad)!=str(conta):
print("CONTRASEÑA INCORRECTA")
carcont='#'
try:
conexionMQTT.check_msg()
time.sleep_ms(500)
except OSError as e:
print("Fallo la conexion al Broker, Reiniciando....")
time.sleep(5)
machine.reset()
#LAS SIGUIENTES SENTENCIAS SE EJECUTAN SI SE SALEN DEL MODO CULTIVO (DEBIENDOSE RESTABLECER TODAS LAS VARIABLES):
modoc = 0 #si se sale del bucle de modo cultivo porque no se cumple la condicion del while
#que se limpien las variables activadoras del modo, asi no se vuelve a activar hasta que se cumpla la condicion de 5 pulsos en el boton.
carcont = '' #se limpia el ultimo caracter recibido del topic a los efectos de que si se sale porque esa variable
#es #, se pueda volver a ejecutar el ciclo ya que ya no sera #
concatcad = '' #se limpia la contraseña tipeada previamente (para ingresar otra nueva y que no se concatene a la vieja)
cant_car = 0 #se limpia el contador de caracterese ingresados, a los efectos de que pueda validarse la contraseña nuevamente
while True:
controlent()
mod_C(modoc)
print("Salio: "+str(cont))
print("Salio: "+str(carcont))
try:
conexionMQTT.check_msg()
except OSError as e:
print("Fallo la conexion al Broker, Reiniciando....")
time.sleep(5)
machine.reset()