This project works by associating a movie file with an NFC card. You could manually type out the UID of each of your cards and movie titles, but a Python script helps to ease this process.
# SPDX-FileCopyrightText: Copyright (c) 2024 Liz Clark for Adafruit Industries
#
# SPDX-License-Identifier: MIT
import csv
import os
import sys
import board
import busio
from digitalio import DigitalInOut
from adafruit_pn532.spi import PN532_SPI
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
cs_pin = DigitalInOut(board.D24)
pn532 = PN532_SPI(spi, cs_pin, debug=False)
csv_file = "movies.csv"
if not os.path.isfile(csv_file):
with open(csv_file, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(['uid', 'movie'])
def is_duplicate(uid, mov):
with open(csv_file, mode='r') as f:
reader = csv.DictReader(f)
for row in reader:
if row['uid'] == uid or row['movie'] == mov:
return True
return False
ic, ver, rev, support = pn532.firmware_version
print("Found PN532 with firmware version: {0}.{1}".format(ver, rev))
# Configure PN532 to communicate with MiFare cards
pn532.SAM_configuration()
print("Waiting for new RFID/NFC card...")
while True:
the_uid = pn532.read_passive_target(timeout=0.05)
if the_uid is not None:
uid_str = f"{[hex(i) for i in the_uid]}"
movie = input("Enter the name of the new movie: ")
movie = f"{movie}"
if is_duplicate(uid_str, movie):
print("UID {uid_str} or movie {movie} already exists, skipping.")
else:
with open(csv_file, mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow([uid_str, movie])
print(f"Added UID {uid_str} with movie title {movie} to movies.csv")
sys.exit()
How the Script Works
You'll run the script in a terminal, separate from the main NFC player script. When the script starts, it will wait for an NFC card to be read. When a card is read, it will prompt you to enter a movie title. After you enter the title, the UID from the card and the title are added to the movies.csv file.
Page last edited January 21, 2025
Text editor powered by tinymce.