from machine import Pin, SPI, PWM
import utime
# =========================================================
# DRIVER LCD PARALELA 4-BITS (Sin I2C)
# =========================================================
class GPIO_LCD:
def __init__(self, rs, en, d4, d5, d6, d7):
self.rs = Pin(rs, Pin.OUT)
self.en = Pin(en, Pin.OUT)
self.pins = [Pin(d4, Pin.OUT), Pin(d5, Pin.OUT), Pin(d6, Pin.OUT), Pin(d7, Pin.OUT)]
utime.sleep_ms(20)
self.write_nibble(0x03)
utime.sleep_ms(5)
self.write_nibble(0x03)
self.write_nibble(0x03)
self.write_nibble(0x02)
self.command(0x28) # 4 bits, 2 lineas
self.command(0x0C) # Display ON
self.command(0x01) # Clear
utime.sleep_ms(2)
def write_nibble(self, nibble):
for i in range(4):
self.pins[i].value((nibble >> i) & 0x01)
self.en.value(1)
utime.sleep_us(1)
self.en.value(0)
utime.sleep_us(100)
def command(self, cmd):
self.rs.value(0)
self.write_nibble(cmd >> 4)
self.write_nibble(cmd & 0x0F)
def putstr(self, string):
self.rs.value(1)
for char in string:
char_code = ord(char)
self.write_nibble(char_code >> 4)
self.write_nibble(char_code & 0x0F)
def clear(self):
self.command(0x01)
utime.sleep_ms(2)
# =========================================================
# CONFIGURACIÓN DE PERIFÉRICOS
# =========================================================
lcd = GPIO_LCD(rs=2, en=3, d4=4, d5=5, d6=6, d7=7)
led_verde = Pin(14, Pin.OUT)
led_azul = Pin(13, Pin.OUT)
led_rojo = Pin(12, Pin.OUT)
buzzer = Pin(11, Pin.OUT)
servo = PWM(Pin(15))
servo.freq(50)
def set_servo(angle):
duty = int((angle / 180 * 6500) + 1638)
servo.duty_u16(duty)
# --- NOTA: Debes importar la librería MFRC522 en Wokwi ---
from mfrc522 import MFRC522
spi = SPI(0, baudrate=1000000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
rfid = MFRC522(spi, Pin(17))
ID_VALIDO = "0xC00xEE0x480x00" # Cambia esto por el ID de tu tarjeta
lcd.clear()
lcd.putstr("Acerque su Tag")
set_servo(0)
while True:
rfid.init()
(stat, tag_type) = rfid.request(rfid.REQIDL)
if stat == rfid.OK:
(stat, uid) = rfid.anticoll()
if stat == rfid.OK:
id_leido = "0x%02X0x%02X0x%02X0x%02X" % (uid[0], uid[1], uid[2], uid[3])
print("ID detectado:", id_leido) # <--- AÑADE ESTA LÍNEA
lcd.clear()
if id_leido == ID_VALIDO:
# REQUISITO 5.6: Registrado (Verde + Azul + 90 grados)
lcd.putstr("Usuario\nRegistrado")
led_verde.value(1)
led_azul.value(1)
set_servo(90)
utime.sleep(3)
led_verde.value(0)
led_azul.value(0)
else:
# REQUISITO 5.6: No Registrado (Rojo + Alarma + 0 grados)
lcd.putstr("Usuario sin\nRegistro")
led_rojo.value(1)
buzzer.value(1)
set_servo(0)
utime.sleep(3)
led_rojo.value(0)
buzzer.value(0)
lcd.clear()
lcd.putstr("Acerque su Tag")
set_servo(0)Loading
mfrc522
mfrc522