# Controle de Biblioteca com RFID:
# Quando uma tag referente a um livro passar pela porta, ativar o LED e alterar seu status entre
# "Disponível" ou "Emprestado".
from machine import Pin, I2C, SPI
import time
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from mfrc522 import MFRC522
# Configuração do LED
led = Pin(25, Pin.OUT)
# Configuração do display LCD
i2c = I2C(0, sda=Pin(21), scl=Pin(22), freq=400000)
LCD_ADDR = 0x27 # Endereço do LCD
lcd = I2cLcd(i2c, LCD_ADDR, 4, 20)
# Configuração do leitor RFID
sck = Pin(18, Pin.OUT)
mosi = Pin(23, Pin.OUT)
miso = Pin(19, Pin.OUT)
spi = SPI(baudrate=100000, polarity=0, phase=0, sck=sck, mosi=mosi, miso=miso)
sda = Pin(5, Pin.OUT)
rfid = MFRC522(spi, sda)
# Todos os livros pertencentes ao acervo, indexados de acordo com UIDs das tags
acervo = {
"01020304": ["1984", "Disponível"],
"11223344": ["Um Estudo em Vermelho", "Disponível"],
"55667788": ["As Tumbas de Atuan", "Disponível"],
"AABBCCDD": ["Dom Quixote", "Disponível"],
}
# Texto de inicialização
lcd.move_to(4,1)
lcd.putstr("Controle da")
lcd.move_to(4,2)
lcd.putstr("Biblioteca!")
time.sleep_ms(500)
lcd.clear()
apresenta_acervo()
# Função auxiliar para apresentar as informações sobre o acervo no display
def apresenta_acervo():
i = 0
for uid, livro in acervo.items():
lcd.move_to(0, i)
lcd.putstr(livro[0][:15] + " ")
lcd.move_to(16, i)
lcd.putstr(livro[1][:4])
i += 1
# Loop principal
while True:
# Verifica se existe uma tag detectada
status, = rfid.request(rfid.REQIDL)
if (status == rfid.OK):
led.value(1)
# Realiza a leitura dos dados da tag
(status, uid) = rfid.anticoll()
if (status == rfid.OK):
# Pausa a comunicação da tag
rfid.stop_crypto1()
time.sleep_ms(100)
Loading
mfrc522
mfrc522