from dht import DHT11
from machine import SoftI2C, Pin
from i2c_lcd import I2cLcd
import utime
from machine import Pin
import time
from Keypad import Keypad
import _thread, gc
#________________________________________________________________________________________________________
sensorDHT = DHT11(Pin(13))             #Configuración del sensor DHT11
pir = Pin(12, Pin.IN, Pin.PULL_DOWN) #Configuración del sensor PIR
buzzer_pin = Pin(14, Pin.OUT)              #Configuración del buzzer
ventilador_pin = Pin(27, Pin.OUT)          #Configuración del ventilador
led_rojo = Pin(25, Pin.OUT)                  #Led que nos indica clave erronea
rele = Pin(26, Pin.OUT)                        #Rele para habilitar el electroiman 
#_________________________________________________________________________________________________________
I2C_ADDR = 0x27 # Configuración de la pantalla LCD
totalRows = 2        # Configuración de la pantalla LCD
totalColumns = 16  # Configuración de la pantalla LCD
i2c = SoftI2C(sda=Pin(21), scl=Pin(22), freq=10000)      # Definicion de pines de la LCD
lcd = I2cLcd(i2c, I2C_ADDR, totalRows, totalColumns) # Definicion de las librerias 
#____________________________________________________________________________________________________________
# Definimos los pines de las filas y columnas
row_pins = [15, 2, 4, 5]
col_pins = [18, 19, 23, 17]

# Mapa del teclado matricial 4x4
key_map = [
    ['1', '2', '3', 'A'],
    ['4', '5', '6', 'B'],
    ['7', '8', '9', 'C'],
    ['*', '0', '#', 'D']
]

keypad = Keypad(row_pins, col_pins, key_map)
#______________________________________________________________________________________________________________


# Clave correcta para verificar
correct_password = "1234"
entered_password = ""


while True:
    key = keypad.scan()
    
    if key:
        print("Tecla presionada:", key)
        if key == '#':  # Suponiendo que # es para verificar
            if entered_password == correct_password:
                print("Acceso Correcto")
                rele.on()
                led_rojo.off()
                estado = pir.value()  # Control del buzzer con el sensor PIR se enciende al detectar movimiento
                if estado == 0:
                    print("sin movimiento")
                    buzzer_pin.on()
                else:
                    print("deteccion de movimiento")
                    buzzer_pin.off()
            else:
                print("Acceso Denegado")
                rele.off()
                led_rojo.on()

            entered_password = ""  # Reseteamos la clave ingresada
        elif key == '*':  # Suponiendo que * es para borrar
            entered_password = ""
            print("Password Borrado")
        else:
            entered_password += key
        time.sleep(0.3)  # Pequeña pausa 

def otro():
    while True:
        sensorDHT.measure()
        temp = sensorDHT.temperature()  # Medir temperatura
        hum = sensorDHT.humidity()         #Medir humedad
        Temp = temp-10                          # calibracion de la temperatura a la de bogota 
        Hum = hum+20                            # calibracion de la humedad a la de bogota 
        data_line1 = "T:{:.1f}C H:{:.1f}%".format(Temp, Hum)  # Formatear los datos de temperatura y humedad
        print(data_line1)
        '''lcd.move_to(0, 0)     # Mostrar los datos de temperatura y humedad en la primera línea de la pantalla LCD
        lcd.putstr(data_line1) # Mostrar los datos de temperatura y humedad en la primera línea de la pantalla LCD
        lcd.move_to(0, 1)         # Mostrar el dígito ingresado en la segunda línea de la pantalla LCD
        lcd.putstr(key_pressed) # Mostrar el dígito ingresado en la segunda línea de la pantalla LCD'''
        if temp < 15:               # Control del ventilador si la temperaatura sube a mas de 15°
            ventilador_pin.on()
        else:
            ventilador_pin.off()

_thread.start_new_thread(otro, ())
NOCOMNCVCCGNDINLED1PWRRelay Module