NFC Access Control System
Contents:
Introduction
Project Evolution
What is NFC?
System Architecture
Hardware Layer
Software Layer
Design Philosophy
Security First
User Friendly
Educational Value
Flexibility
Reliability
Use Cases
Educational Applications
Practical Applications
Technical Specifications
Hardware Requirements
Software Capabilities
Performance Metrics
Getting Started
Project Structure
Hardware Layer
Software Layer
Design Philosophy
Security First
User Friendly
Educational Value
Flexibility
Reliability
Use Cases
Educational Applications
Practical Applications
Technical Specifications
Hardware Requirements
Software Capabilities
Performance Metrics
Getting Started
Project Structure
Examples
Course Tasks Overview
Task 1: Reading NFC Tags
Learning Objectives
Example Code: read_example.cpp
Key Concepts
Running the Example
Expected Output
Task 2: Writing to NFC Tags
Learning Objectives
Example Code: write_example.cpp
Card Storage Structures
Write Functions Reference
Running the Example
Safety Tips
Common Issues and Solutions
Advanced Topics
Card Cloning
NDEF Messages
Next Steps
Tips for Development
See Also
Hardware Setup
Required Components
Core Components
Additional Components
Pin Configuration
PN532 NFC Module (SPI Mode)
LCD Display (4-bit Parallel)
Navigation Buttons
Relay Module
Wiring Diagram
Power Considerations
Assembly Tips
Troubleshooting Hardware Issues
LCD Not Displaying
PN532 Not Detected
Buttons Not Responding
Relay Not Activating
Installation
Prerequisites
Required Software
Recommended Tools
Setting Up PlatformIO
Option 1: PlatformIO IDE (Recommended)
Option 2: PlatformIO Core (CLI)
Getting the Source Code
Clone from Repository
Download ZIP
Project Structure
Configuration
Pin Configuration
Building the Firmware
Using PlatformIO IDE
Using PlatformIO CLI
Uploading to Arduino
Preparing the Arduino
Using PlatformIO IDE
Specifying Upload Port
Monitoring Serial Output
Using PlatformIO
Using Arduino IDE Serial Monitor
Troubleshooting Installation
Build Errors
Upload Errors
Verification
Next Steps
Usage Guide
System Startup
Normal Operation
Scanning Cards
Menu System
Accessing the Menu
Menu Navigation
Main Menu Items
Card Management
Registering a New Card
Deleting a Card
Listing Stored Cards
Advanced Features
Card Cloning
System Information
Customization
Access Duration
Button Configuration
Card Capacity
Best Practices
Regular Operation
Card Management
System Maintenance
Security Considerations
Physical Security
Access Control
Serial Output
Troubleshooting Common Issues
Card Not Reading
False Readings
Menu Not Responding
Relay Not Activating
Class Diagrams
System Architecture Overview
AccessControlSystem Class
NFCReader Class
Complete System Relationships
State Machine
Card Registration Flow
Card Cloning Flow
MIFARE Memory Layout
Installation and Usage
See Also
API Reference
Core Classes
AccessControlSystem
AccessControlSystem
NFCReader
NFCReader
Enumerations
NFCCommMode
NFCReadMode
NFCCardType
Data Structures
NFCCardInfo
NFCWriteResult
SystemState
State Machine Diagram
MenuItem
Configuration Constants
Hardware Pin Definitions
System Parameters
EEPROM Memory Map
Custom Sector Configuration
Example Usage
Basic Setup
Custom Card Handling
Manual Card Registration
Return Values
Memory Considerations
EEPROM Usage
RAM Usage
Thread Safety
Debugging
EEPROM Memory Layout
Memory Map Overview
Memory Regions
Header Section
Card Data Section
Memory Operations
Read Operation Flow
Write Operation Flow
Memory Wear Leveling
Write Frequency Estimation
Best Practices
Memory Initialization
First-Time Setup
Code Example
Memory Debugging
Summary
Card Cloning Technology
Overview
How It Works
Dual UID System
Reading Priority
Custom Sector Structure
Sector 1 Layout
Block 4 Structure (UID Block)
Block 5 Structure (Metadata Block)
Cloning Process
Step-by-Step Procedure
Code Implementation
NFCReader::cloneCard() Method
Reading Cloned UID
Security Considerations
Authentication Keys
Access Control
Physical Security
Limitations
Card Compatibility
Key Requirements
Write Limitations
Advantages Over Magic Cards
Traditional “Magic” Cards
Our Custom Sector Approach
Best Practices
Cloning Workflow
Error Handling
Storage Management
Advanced Topics
Multi-Identity Cards
Encrypted Clones
Time-Limited Clones
Example Use Cases
Backup Access Card
Temporary Access
Multi-Location Access
Testing and Validation
Troubleshooting Cloning Issues
Troubleshooting
Hardware Issues
PN532 Module Not Detected
LCD Display Issues
Button Problems
Relay Issues
Card Reading Issues
Cards Not Detected
Specific Card Types
Software Issues
Compilation Errors
Upload Failures
Runtime Errors
Cloning Issues
Authentication Failed
Write Failed
Verification Failed
Cloned Card Not Working
Access Control Issues
Authorized Card Denied
Unauthorized Card Granted
Relay Timing Issues
Menu System Issues
Menu Not Accessible
Cannot Exit Menu
Cards Not Listing
Diagnostic Tools
Serial Monitor Output
Testing Individual Components
Common Error Codes
Getting Help
Before Seeking Support
Information to Provide
Support Channels
Additional Resources
Quick Start - Building Documentation
Installation
Building
HTML Documentation (Recommended)
PDF Documentation
Viewing
Cleaning
Common Issues
ImportError: No module named sphinx
sphinx-build command not found
Theme not found
LaTeX errors when building PDF
Tips
NFC Access Control System
Index
Index
A
|
N
A
AccessControlSystem (C++ class)
AccessControlSystem::AccessControlSystem (C++ function)
AccessControlSystem::begin (C++ function)
AccessControlSystem::deleteCard (C++ function)
AccessControlSystem::denyAccess (C++ function)
AccessControlSystem::getStoredCardCount (C++ function)
AccessControlSystem::grantAccess (C++ function)
AccessControlSystem::isCardAuthorized (C++ function)
AccessControlSystem::registerCard (C++ function)
AccessControlSystem::update (C++ function)
N
NFCReader (C++ class)
NFCReader::begin (C++ function)
NFCReader::isCardPresent (C++ function)
NFCReader::NFCReader (C++ function)
NFCReader::readCard (C++ function)
NFCReader::resetCardState (C++ function)
NFCReader::writeData (C++ function)
NFCReader::writeMifareClassic (C++ function)
NFCReader::writeMifareClassicString (C++ function)
NFCReader::writeNTAG (C++ function)
NFCReader::writeNTAGString (C++ function)
NFCReader::writeString (C++ function)