from machine import I2C, Pin, SPI
from lcd1602 import LCD1602
import time
from mfrc522 import MFRC522
def wypisz_w_lini(lcd, tekst, wiersz=1):
# Czyścimy linię dopełniając tekst spacjami do dokładnie 16 znaków
pelny_tekst = f"{tekst:<16}"
lcd.set_cursor(0, wiersz)
lcd.print(pelny_tekst)
# Konfiguracja I2C dla LCD
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
lcd = LCD1602(i2c, 2, 16)
lcd.clear()
lcd.print("Przyłóż kartę")
# Konfiguracja SPI1 dla RC522
spi = SPI(1, baudrate=100000, polarity=0, phase=0,
sck=Pin(10), mosi=Pin(11), miso=Pin(12))
rdr = MFRC522(spi, sck=Pin(10), mosi=Pin(11), miso=Pin(12),
rst=Pin(22), cs=Pin(13))
print("System gotowy do czytania kart RFID...")
# Inicjalizacja magistrali I2C na pinach GP4 (SDA) i GP5 (SCL)
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000)
# Inicjalizacja wyświetlacza (2 wiersze, 16 kolumn)
lcd = LCD1602(i2c, 2, 16)
lcd.clear()
lcd.set_cursor(0, 0) # Kolumna 0, Wiersz 0 (górny)
lcd.print("Pico Dom IoT")
lcd.set_cursor(0, 1) # Kolumna 0, Wiersz 1 (dolny)
lcd.print("System OKowrghjiyg!")
###
# Konfiguracja pinów
led = Pin(15, Pin.OUT)
button = Pin(14, Pin.IN, Pin.PULL_UP)
# Zmienne do śledzenia stanu
stan_led = 0 # Przechowuje stan diody (0 - wyłączona, 1 - włączona)
poprzedni_stan_przycisku = 1 # Stan spoczynkowy przycisku z PULL_UP to 1
print("System gotowy! Tryb przełącznika.")
# while True:
# aktualny_stan_przycisku = button.value()
# # Wykrywamy moment wciśnięcia: wcześniej było 1 (puszczony), teraz jest 0 (wciśnięty)
# if poprzedni_stan_przycisku == 1 and aktualny_stan_przycisku == 0:
# # Zmieniamy stan diody na przeciwny (jeśli było 0 to 1, jeśli 1 to 0)
# stan_led = not stan_led
# led.value(stan_led)
# print("Przycisk wciśnięty! Stan diody:", int(stan_led))
# lcd.set_cursor(0, 0)
# lcd.print("Przycisk" + str(int(stan_led)))
# if stan_led:
# wypisz_w_lini(lcd, "Stan: WLACZONA", 0)
# else:
# wypisz_w_lini(lcd, "Stan: WYL", 0)
# # Krótkie opóźnienie eliminujące tzw. drganie styków (debouncing)
# time.sleep(0.05)
# # Zapamiętujemy obecny stan przycisku na kolejny obrót pętli
# poprzedni_stan_przycisku = aktualny_stan_przycisku
######
# Nasłuchiwanie karty
rdr.init()
print("Rozpoczynam pętlę główną...")
while True:
# Pobieramy stan z zapytania
(stat, tag_type) = rdr.request(rdr.PICC_REQIDL)
if stat == rdr.OK:
print("Karta wykryta! Próbuję pobrać UID...")
(stat_anti, raw_uid) = rdr.anticoll()
print("Status antykolizji:", stat_anti)
if raw_uid:
# Bierzemy pierwsze 4 bajty i formatujemy je bezpośrednio
uid_str = "{:02X}:{:02X}:{:02X}:{:02X}".format(raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
print("Ostateczny UID:", uid_str)
print("SUKCES! Odczytano UID:", uid_str)
lcd.clear()
lcd.set_cursor(0, 0)
lcd.print("Karta wykryta:")
lcd.set_cursor(0, 1)
lcd.print(uid_str)
time.sleep(2)
lcd.clear()
lcd.print("Przyloz karte")
time.sleep(0.1)Loading
mfrc522
mfrc522