RFID Access

From Hive13 Wiki
Jump to navigation Jump to search

Hive13 Project
RFID Access System
Status: Active
Start Date: 1/12/2012



The purpose of this project is to build a modular RFID Access System for all of the tools, doors, and vending machines in the Hive.

  • Requirements
    • Uses the Access Protocol
    • Accepts NFC tags and phones with NFC for access and tracking control (our badges run at 125 KHz)
    • Central database (Postgres, accessed via HTTP, served by a Perl Catalyst app)


What needs to be done

Main Door RFID

  • Battery backup somehow? It's PoE and that's on battery backup.
  • Have it log temperatures

Annex Door RFID

  • Schematic and PCB is on GitHub
  • Battery backup somehow?
  • Motion sensor so it unlocks when you approach it from the inside.
  • Consider switching it to wired for power backup reasons.
  • Add in a mechanical key for when the power's out.

Vending Machine RFID

  • Get compressor being controlled by the Arduino
  • Mount the relay board instead of it being set on a block of wood
  • Clean up the wiring

The Snack Vending Machine has been gutted, its coin validator removed, and RFID card mounted to the machine, however, no work has been done to bring that machine to vending status.

Places it'd be nice to have badge readers

  • Doors out to annex hallway
  • Outside door by the Dumpster
  • Certification-only tools

Enrollment Station

One of the goals of this project is to build a case where cash payments to the hive can be recorded (and membership automatically extended), and cash payments can be automatically made to the card for the purposes of purchasing sodas.

This project is in the planning phase right now -- however, if you want to help, I would appreciate the time and can provide my guidance for this project.


  • The annex uses a WeMos D1 mini.
  • The main door uses an Arduino Mega.

Wiring Diagrams

Scanner to MCU wiring

  • This is correct for the annex door
  • The main door needs to have its wiring changed to match.
Function Scanner Wire Color Ethernet cable wire color
Wiegand D0 Green Green
Wiegand D1 White White/Green
Light Grey Orange
Beeper Purple White/Orange
+12V Red Both blues
Ground Black Both browns

2020 Temporary Rework

Hodapp is working on a makeshift solution for the new space at 2701. Right now this is running from a Raspberry Pi with Alpine Linux, a hacky Python script to interface with intweb, and a C program based on [1] to communicate with an RFID reader via the Wiegand protocol.

Current connections from RFID reader to Raspberry Pi are as follows:

  • Wiegand D0 (green) to BCM 17 *through a resistive divider to ground* (two 1K resistors)
  • Wiegand D1 (white) to BCM 18 *through a resistive divider to ground* (likewise two 1K resistors)
  • Beeper (purple) to BCM 26
  • Grey (LED) unconnected

The resistive divider is because D0 and D1 use 5V, while the Raspberry Pi runs at 3.3V - so they may damage the Pi if used directly. The divider steps this down to a safer 2.5V. Any kind of level shifter that works similarly should be fine here.

The beeper and LED pins do not need a divider. Simply put them on a GPIO pin and bring the pin low to trigger the beeper and the LED.


  • Reading RFID cards from badge reader, and producing proper badge number
  • Authenticating this badge number for door access with intweb
  • Triggering beeper and LED on badge reader.

Still needed:

  • Actual door electronics & mechanism!
  • A more solid wiring layout, perhaps through some level shifter boards.
  • More robust Python code (that won't explode from an errant exception)
  • Commandline arguments to the C program (rpi-wiegand-reader) might be nice rather than hard-coding the GPIOs
  • Some use for beeper and LED in the code. Note that py3-rpigpio is in the Alpine repositories; this doesn't have to be done in WiringPi.
  • A more finalized setup in Alpine Linux - i.e. running the code in OpenRC, enabling the Raspberry Pi's hardware watchdog, and perhaps having some other monitoring on the LAN to ensure that the Pi has not gone offline or crashed.
  • A backup of this Linux image someplace that people can find it easily if needed.
  • Maybe: a TVS on Wiegand D0 and D1 pins?