Come promesso, nell’articolo di qualche giorno fa (Serratura Smart RFID – creiamola con Raspberry Pi Pico) ecco la versione semplificata della serratura smart NFC.

Cosa cambia rispetto alla Serratuta Smart RDIF?

Come detto, questa è una versione semplificata, di seguito una tabella che mostra i componenti in uso divisi per categoria:

StandardSemplificata
Raspberry Pi PicoSiSi
Indicatore acusticoSi (Buzzer attivo)No
Indicatore visivoNeopixel Ring 24 RGBLed Rosso + Led Verde
Lettore RFIDSi (RC522)Si (RC522)
Servo per serraturaSi (SG-90 o simili)Si (SG-90 o simili)

Wiring scheme RFID

Il codice


#https://www.tomshardware.com/how-to/raspberry-pi-pico-powered-rfid-lighting

####################################################
# IMPORT LIBRERIE
####################################################
from libs.mfrc522 import MFRC522 #libreria RFID
from random import randint
import utime
from machine import Pin, PWM
from utime import sleep
from libs.servodegree import servo

led_rosso = Pin(15, Pin.OUT)
led_verde = Pin(14, Pin.OUT)


####################################################
# COLLEGAMENTI
####################################################
#Definisco lettore RFID
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)


####################################################
# CONFIGURAZIONE CARTE ABILITATE
####################################################
#Metto in array gli id delle carte che hanno accesso
accessi = [2127566297, 1274987924, 825572532]

#Imposto lo stato della serratura iniziale (0 = Chiuso / 1 = Aperto)
stato = 0

####################################################
# FUNZIONI PER I LED 
####################################################
def spegniled():
    led_rosso.value(0)
    led_verde.value(0)

def lucerossa(time = 0):
    led_rosso.value(1)
    led_verde.value(0)
    if(time != 0):
        led_rosso(1)
        for i in range(time):
            led_rosso.toggle()
            utime.sleep_ms(100)
        led_rosso(1)    

def luceverde():
    led_rosso.value(0)
    led_verde.value(1)


#####################################################
# INIZIO CODICE SERVO 
#####################################################        

def apri():
 servo(20)
 print("Serratura aperta")

def chiudi():
 servo(70)
 print("Serratura chiusa")
 
def toggle():
    global stato
    #Se lo stato è uno, chiudo la serratura e imposto la luce su rosso
    if stato == 1:
        stato = 0
        chiudi()
        lucerossa()
        utime.sleep_ms(1000)
    #Se lo stato è zero, apro la serratura e imposto la luce su verde
    elif stato == 0:
        stato = 1
        apri()
        luceverde()
        utime.sleep_ms(1000)
    else:
        red_blynk(5)
    
##############################################
# INIZIO CODICE ##############################
##############################################


print("Avvio in corso..")
chiudi()
spegniled()
utime.sleep_ms(500)

utime.sleep_ms(1000)
lucerossa()

while True:
    reader.init()
    (stat, tag_type) = reader.request(reader.REQIDL)
    if stat == reader.OK:
        (stat, uid) = reader.SelectTagSN()
        if stat == reader.OK:
            card = int.from_bytes(bytes(uid),"little",False)
            print(card)
            if card in accessi:
                print("Accesso OK")
                toggle()
            else:
                print("Accesso negato")
                chiudi()
                lucerossa(5)
        else:
            print("Reader KO")
            lucerossa(10)
            pass
utime.sleep_ms(50)

Per i dettagli sul codice, puoi consultare l’articolo con la spiegazione passo passo della versione standard.