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 for Front Door

Currently involved:

  • Hodapp (setup on Pi and integration with RFID reader)
  • Drew Kirkman (infra stuff)
  • Dave B. (door electronics?)
  • Dave Velzy

We are working on a makeshift solution for the new space at 2701. Right now this is running from a Raspberry Pi with Alpine Linux and some software written in Go. This code interfaces with RFID readers over the Wiegand protocol, communicates with intweb to request access for some badge, and listens over HTTP for 'manual' door open requests.

Code is at: https://github.com/Hive13/HiveRFID

The electric door release is a HES 5000 from Assa Abloy. (Installation instructions: https://content.assaabloyusa.com/doc/AADSS1009179&.pdf)


Diagram to follow, eventually.

  • Green (Wiegand D0) from reader to level shifter RXI channel 1.
  • White (Wiegand D1) from reader to level shifter RXI channel 2.
  • Black (ground) from reader to level shifter GND (either one).
  • Raspberry Pi BCM 17 to level shifter RXO channel 1.
  • Raspberry Pi BCM 18 to level shifter RXO channel 2.
  • Raspberry Pi 3.3V to level shifter LV.
  • Raspberry Pi 5V to level shifter HV.
  • Raspberry Pi GND to level shifter GND (either one).
  • Raspberry Pi BCM 26 to purple from reader (beeper)
  • Raspberry Pi BCM ??? to grey from reader (LED)

Connect power to reader's red wire, and ensure that power supply ground is also connected to level shifter GND.

Double-check that D0 and D1 from the reader are always on the high-voltage side of the level shifter, and that the Raspberry Pi's GPIOs are always on the low-voltage side.

This also works if you have no level shifter:

  • 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)

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 their level shifted; 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
  • Serving HTTP requests
  • Triggering beeper and LED on badge reader

Still needed

  • Power supply for electronic door strike
  • Connect up the WeMos Switch Shield board (from Dave & Ralph) to said power supply, and drive it from a GPIO
  • Make use of beeper and LED
  • Cache badges (perhaps hold a badge in cache for 3-4 days)
  • More setup in Alpine Linux - run the code in OpenRC, enable Raspberry Pi's hardware watchdog, and perhaps have some other monitoring on the LAN to ensure that the Pi has not gone offline or crashed
  • Back up this Linux image someplace that people can find it easily if needed
  • Document the HTTP endpoint
  • Get old Python & C code into endpoint