from machine import Pin, PWM
import time
# ===== LED =====
led_green = Pin(2, Pin.OUT)
led_red = Pin(4, Pin.OUT)
# ===== BUZZER =====
buzzer = PWM(Pin(5), freq=1000)
# ===== SERVO =====
servo = PWM(Pin(18), freq=50)
def set_servo(angle):
duty = int(1638 + (angle / 180) * 8191) # ESP32 correct
servo.duty_u16(duty)
# ===== KEYPAD =====
rows = [Pin(p, Pin.OUT) for p in (13, 12, 14, 27)]
cols = [Pin(p, Pin.IN, Pin.PULL_UP) for p in (26, 25, 33, 32)]
keys = [
['1','2','3','A'],
['4','5','6','B'],
['7','8','9','C'],
['*','0','#','D']
]
password = "1234"
entered = ""
# ===== FONCTIONS =====
def beep(freq, dur):
buzzer.freq(freq)
buzzer.duty_u16(30000)
time.sleep_ms(dur)
buzzer.duty_u16(0)
def read_key():
for i, r in enumerate(rows):
r.value(1)
for j, c in enumerate(cols):
if c.value() == 0:
r.value(0)
return keys[i][j]
r.value(0)
return None
def access_ok():
print("Access OK")
led_green.value(1)
led_red.value(0)
beep(1000, 200)
set_servo(90) # ouvrir porte
time.sleep(5)
set_servo(0) # fermer porte
led_green.value(0)
print("Door closed")
def access_denied():
print("Access Denied")
led_red.value(1)
led_green.value(0)
beep(300, 500)
time.sleep(2)
led_red.value(0)
# ===== START =====
print("Enter Password")
# ===== LOOP =====
while True:
key = read_key()
if key:
print("Key:", key)
if key == '#': # valider
if entered == password:
access_ok()
else:
access_denied()
entered = ""
print("Enter Password")
elif key == '*': # reset
entered = ""
print("Reset")
else:
entered += key
print("Code:", entered)
time.sleep(0.3)