import urequests
from machine import Pin, PWM
from time import sleep
import network
import time
from machine import Pin
led = Pin(13,Pin.OUT)
print("Conectando a red wifi", end="")
net = network.WLAN(network.STA_IF)
net.active(True)
net.connect('Wokwi-GUEST','')
while not net.isconnected():
print('.', end='')
time.sleep(0.3)
print("Conectado")
if net.isconnected():
led.value(1)
print(net.isconnected())
else:
led.value(0)
Tecla_Arriba = const(0)
Tecla_Abajo = const(1)
teclas = [['1', '2', '3', 'A'], ['4', '5', '6', 'B'], ['7', '8', '9', 'C'], ['*', '0', '#', 'D']]
filas = [2, 4, 5, 19]
columnas = [12, 27, 26, 25]
pines_Filas = [Pin(pin_nombre, mode=Pin.OUT) for pin_nombre in filas]
pines_Columnas = [Pin(pin_nombre, mode=Pin.IN, pull=Pin.PULL_DOWN) for pin_nombre in columnas]
servo_pin = PWM(Pin(14), freq=50)
led = Pin(13, Pin.OUT)
codigo_correcto = "1234A"
codigo_introducido = ""
intentos_fallidos = 0
MAX_INTENTOS_FALLIDOS = 3
TOKEN = "7288813714:AAFg9qNUXYppB70TqUeoLQt9xuc9WrsPbRw"
CHAT_ID = "5285222468"
def inicio():
for fila in range(4):
pines_Filas[fila].value(0)
def escanear(fila, columna):
""" Escaneo del teclado """
pines_Filas[fila].value(1)
key = None
if pines_Columnas[columna].value() == Tecla_Abajo:
key = Tecla_Abajo
pines_Filas[fila].value(0)
return key
def mover_servo(angulo):
duty = int(40 + (angulo / 180) * 115)
servo_pin.duty(duty)
def abrir_puerta():
mover_servo(90)
led.value(1)
sleep(5)
cerrar_puerta()
def cerrar_puerta():
mover_servo(0)
led.value(0)
def enviar_mensaje_telegram(mensaje):
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
data = {"chat_id": CHAT_ID, "text": mensaje}
try:
response = urequests.post(url, json=data)
response.close()
except Exception as e:
print("Error al enviar mensaje por Telegram:", e)
print("Iniciando... Ingrese el codigo:")
inicio()
while True:
for fila in range(4):
for columna in range(4):
tecla = escanear(fila, columna)
if tecla == Tecla_Abajo:
tecla_presionada = teclas[fila][columna]
print(" Su dijito es: ", tecla_presionada)
codigo_introducido += tecla_presionada
sleep(0.5)
if len(codigo_introducido) == len(codigo_correcto):
if codigo_introducido == codigo_correcto:
print("Código correcto, abriendo puerta...")
abrir_puerta()
intentos_fallidos = 0
else:
print("Código incorrecto.")
intentos_fallidos += 1
if intentos_fallidos >= MAX_INTENTOS_FALLIDOS:
mensaje = "¡Alerta! Se han realizado tres intentos fallidos para abrir la puerta."
enviar_mensaje_telegram(mensaje)
intentos_fallidos = 0
codigo_introducido = ""