from machine import Pin, I2C
from time import sleep
import ssd1306
from mfrc522 import MFRC522
# ESP32 Pin assignment
#For OLED I2C Pin -> SCL at Pin 22, SDA at Pin 21
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
#For LEDs Pin -> Green LED at Pin 26,Red LED at Pin 27
# Set All LEDs as OUTPUT (Digital)
led_green = Pin(26, Pin.OUT)
led_red = Pin(27, Pin.OUT)
#Turn OFF ALL LEDs
led_green.value(0)
led_red.value(0)
#For RFID Pin Configurations using SPI Pin
# SCK at Pin 18, MISO at Pin 19 , MOSI at Pin 23 , CS at Pin 5 , RST at Pin 4
reader = MFRC522(spi_id=2, sck=18, miso=19, mosi=23, cs=5, rst=4)
#OLED Area/Size Configurations
oled_width = 128 # OLED Width
oled_height = 64 # OLED HEIGHT
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# ==========================================
# AUTHORIZED CARDS
# ==========================================
rfid_name = ["Johny",
"Rohit",
"hanabi"]
rfid_uid = ["0x01030400",
"0x11334400",
"0x5577cc00"]
# A function to associate RFID NAME with RFID UID and return the RFID NAME
def get_username(uid):
index = 0
try:
index = rfid_uid.index(uid)
return rfid_name[index]
except:
index = -1
print("RFID is not recognized")
return 0
print("Scan Your Card")
# OLED Start
oled.text("Scan Your Card",8,20)
oled.show()
while True:
# RFID READ
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if stat == reader.OK:
oled.fill_rect(1, 1, oled.width - 1, 8, 0)
# oled.text("CARD ID: ", 1, 1)
card_id = "0x%02x%02x%02x%02x" %(uid[0], uid[1], uid[2], uid[3])
print("UID:", card_id)
# oled.text(card_id, 10, 1)
oled.show()
username = get_username(card_id)
if username != 0:
led_green.value(1)
led_red.value(0)
oled.fill_rect(7, 35, oled.width -7, 8, 0)
oled.text("{} ATTEND!".format(username),7,35)
oled.show()
else:
led_green.value(0)
led_red.value(1)
oled.fill_rect(7, 35, oled.width -7, 8, 0)
oled.text(" Wrong Class! ",7,35)
oled.show()
# sleep(1)Loading
mfrc522
mfrc522