esprfid / esp-rfid

ESP8266 RFID (RC522, PN532, Wiegand, RDM6300) Access Control system featuring WebSocket, JSON, NTP Client, Javascript, SPIFFS
MIT License
1.33k stars 417 forks source link
access-control access-management board esp-rfid esp8266 esp8266-rfid esp8266-websocket flash hacktoberfest mfrc522 pn532 rc522 rdm6300 rfid-doorlock-application rfid-hardware rfid-rc522 rfid-reader rfid-tags websocket wiegand

ESP RFID - Access Control with ESP8266, RC522 PN532 Wiegand RDM6300

Chat at https://gitter.im/esp-rfid/Lobby Build Status Codacy Badge BCH compliance Bountysource

Access Control system using a cheap MFRC522, PN532 RFID, RDM6300 readers or Wiegand RFID readers and Espressif's ESP8266 Microcontroller.

Showcase GifBoard

Features

For Users

Get more information and see accessory options from Tindie Store

What are others saying about esp-rfid?
“Hi, nice project.” – [@Rotzbua]()
“Your app works like a charm” – [@tueddy ]()
“Just stumbled upon this project while planning to do something similar. Very beautifully done!” – [@LifeP]()
“Hello, I've come across your project and first of all… wow - thanks to all contributors for your hard work!” – [@byt3w4rri0r]()
“Brilliant work.” – [@danbicks]()
“This is an impressive project.” – [@appi1]()
“I'd like to thank every single contributor for creating this epic project.” – [@TheCellMc]()
“Congratulations for your awesome work! This project is absolutely brilliant.” – [@quikote]()

Getting Started

This project still in its development phase. New features (and also bugs) are introduced often and some functions may become deprecated. Please feel free to comment or give feedback.

What You Will Need

Hardware

Software

Using Compiled Binaries

Download compiled binaries from GitHub Releases page https://github.com/esprfid/esp-rfid/releases On Windows you can use "flash.bat", it will ask you which COM port that ESP is connected and then flashes it. You can use any flashing tool and do the flashing manually. The flashing process itself has been described at numerous places on Internet.

Building With PlatformIO

Backend

The build environment is based on PlatformIO. Follow the instructions found here: http://platformio.org/#!/get-started for installing it but skip the platform init step as this has already been done, modified and it is included in this repository. In summary:

sudo pip install -U pip setuptools
sudo pip install -U platformio
git clone https://github.com/esprfid/esp-rfid.git
cd esp-rfid
platformio run

When you run platformio run for the first time, it will download the toolchains and all necessary libraries automatically.

Useful commands:

The resulting (built) image(s) can be found in the directory /bin created during the build process.

Frontend

You can not simply edit Web UI files because you will need to convert them to C arrays, which can be done automatically by a gulp script that can be found in tools directory or you can use compiled executables at the same directory as well (for Windows PCs only).

If you want to edit esp-rfid's Web UI you will need (unless using compiled executables):

Gulp script also minifies HTML and JS files and compresses (gzip) them.

In order to test your changes without flashing the firmware you can launch websocket emulator which is included in tools directory.

Get more information here: https://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome

Pin Layout

The following table shows the typical pin layout used for connecting readers hardware to ESP:

ESP8266 NodeMcu/WeMos Wiegand PN532 MFRC522 RDM6300
GPIO-15 D8 SS SDA/SS
GPIO-13 D7 D0 MOSI MOSI
GPIO-12 D6 D1 MISO MISO
GPIO-14 D5 SCK SCK TX
GPIO-04 D2
GPIO-05 D1

For Wiegand based readers, you can configure D0 and D1 pins via settings page. By default, D0 is GPIO-4 and D1 is GPIO-5

Steps

Known Issues

Time

We are syncing time from a NTP Server (in Client -aka infrastructure- Mode). This will require ESP to have an Internet connection. Additionally your ESP can also work without Internet connection too (Access Point -aka Ad-Hoc- Mode), without giving up functionality. This will require you to do syncing manually. ESP can store and hold time for you approximately 51 days without a major issue, device time can drift from actual time depending on usage, temperature, etc. So you have to login to settings page and sync it in a timely fashion.

Security

We assume ESP-RFID project -as a whole- does not offer strong security. There are PICCs available that their UID (Unique Identification Numbers) can be set manually (Currently esp-rfid relies only UID to identify its users). Also there may be a bug in the code that may result free access to your belongings. And also, like every other network connected device esp-rfid is vulnerable to many attacks including Man-in-the-middle, Brute-force, etc.

This is a simple, hobby grade project, do not use it where strong security is needed.

What can be done to increase security? (by you and by us)

Scalability

Since we are limited on both flash and ram size things may get ugly at some point in the future. You can find out some test results below.

Tests

1) How many RFID Tag can be handled?

Restore some randomly generated user data on File System worth:

Total 122,880 Bytes

At least 1000 unique User (RFID Tag) can be handled, the test were performed on WeMos D1 mini.

Additional testing is needed:

Community

Projects that is based on esp-rfid

Acknowledgements

See ChangeLog

Donations

If this project helps you in a way, you can buy us a beer. You can make a donation to the ESP-RFID community with Bountysource

License

The code parts written by ESP-RFID project's authors are licensed under MIT License, 3rd party libraries that are used by this project are licensed under different license schemes, please check them out as well.