"""
main.py
-------
Leitor de UID de cartoes/tags RFID com modulo MFRC522 + ESP32,
usando MicroPython. Equivalente ao sketch original em Arduino/C++
que usava a biblioteca miguelbalboa/rfid.
Feito para rodar no simulador Wokwi (ESP32 + firmware MicroPython).
Pinagem usada (padrao do diagrama RC522 + ESP32 no Wokwi):
RC522 SDA (SS) -> ESP32 GPIO 5
RC522 SCK -> ESP32 GPIO 18
RC522 MOSI -> ESP32 GPIO 23
RC522 MISO -> ESP32 GPIO 19
RC522 RST -> ESP32 GPIO 21
RC522 3.3V -> ESP32 3V3
RC522 GND -> ESP32 GND
A biblioteca do sensor (mfrc522.py) fica em um arquivo separado,
igual pedido, e e importada aqui.
"""
from machine import Pin, SPI
import utime
from mfrc522 import MFRC522
# ---------- Configuracao dos pinos (ajuste aqui se mudar a fiacao) ----------
SCK_PIN = 18
MOSI_PIN = 23
MISO_PIN = 19
SS_PIN = 5 # Chip Select do RC522 (equivalente ao SS_PIN do Arduino)
RST_PIN = 21 # Reset do RC522 (mesmo pino do sketch original)
# Cria o barramento SPI usado para falar com o MFRC522.
# baudrate 1 MHz e modo 0 (polarity=0, phase=0) sao os valores
# recomendados para o MFRC522 e usados internamente pela lib original.
spi = SPI(
1,
baudrate=1000000,
polarity=0,
phase=0,
sck=Pin(SCK_PIN),
mosi=Pin(MOSI_PIN),
miso=Pin(MISO_PIN),
)
# Instancia o leitor RFID, passando o barramento SPI e os pinos de controle.
rfid = MFRC522(spi, cs_pin=SS_PIN, rst_pin=RST_PIN)
print("MFRC522 Ready")
def uid_to_string(uid_bytes):
"""
Formata a lista de bytes do UID no mesmo estilo usado no sketch
Arduino original: ':XX:XX:XX:XX' em hexadecimal maiusculo,
com dois digitos por byte.
"""
return "".join(":{:02X}".format(b) for b in uid_bytes)
# ---------- Loop principal ----------
while True:
utime.sleep_ms(10) # Pequena pausa, equivalente ao delay(10) do Arduino
uid = rfid.read_uid() # Faz o request + anticoll internamente
if uid is not None:
print("UID:" + uid_to_string(uid))
rfid.halt() # Equivalente a PICC_HaltA()
utime.sleep_ms(1000) # Equivalente ao delay(1000) apos a leitura