No description, website, or topics provided.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


I want to test this on a desktop

This is pretty easy to do on any common desktop platform:


Recommended - Install the full Visual Studio IDE for a nice development experince

Get the installer here:

Be sure to select the .Net Core cross-platform development workload.

Alternate - Just install the necessary SDKs

Get the installer for the .Net Core 2.1 SDK here:


Get the installer for the .Net Core 2.1 SDK here:

Install the SDL2 library:

brew install sdl2


Instructions good for anything Debian/Ubuntu based. Translating for other package managers of your choice should be trivial:

Install .Net Core 2.1 SDK:

Directions from here:

wget -qO- | gpg --dearmor > microsoft.asc.gpg
mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q
mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
chown root:root /etc/apt/sources.list.d/microsoft-prod.list

apt-get update
apt-get install dotnet-sdk-2.1

Install the SDL2 library:

apt install libsdl2-2.0-0

Now lets run the damn thing already

Use the command line (good for any of the above platforms):

Checkout the repository to a folder on your machine:

git clone

Switch to the project directory:

cd MilwaukeeMakerspacePiFobReader/MmsPiFobReader

Build the project:

dotnet build

And run the project:

dotnet run

You'll probably get this message the first time it runs:

Reader Id is not

To fix this you need to give this install an integer reader id, that corresponds to one on the authentication server that it will be connecting to. You do this by setting it in a simple text file named readerid.txt saved in the working directory. This is the only machine side configuration that is done on the reader. Everything else gets configured by the API server upon first connection. As an example, lets use 5, which is conviently configured as Test Reader at Milwaukee Makerspace.

echo '5' > readerid.txt

Now lets try again:

dotnet run

If it loaded correctly, you are ready to test and develop! Otherwise proceed:

"You stupid fuck, it's still broken!" - You probably see this error:

Cannot reach

If you aren't working inside the actual Milwaukee Makerspace building, you'll need to be running your own copy of the API server on your local network for the reader to connect to. That is beyond the scope of this tutorial. Find out about that project and over here:

Now that you have an API server to connect to, The reader is designed to use the SSDP to find it automatically, so it should connect all on its own within a few seconds of the API becoming available. If it does not, your network may have firewalls in place that block this. You can override the SSDP by creating another text file named server.txt with a DNS name or an IP address to connect directly to. We'll use the address of the API server at Milwaukee Makerspace.

echo '' > server.txt

Or use Visual Studio on Windows:

If you elected to install Visual Studio you can just open the MmsPiFobReader.sln solution file and run from within the IDE. You'll still need to set the readerid.txt file and have access to an instance API server.

I want to setup an actual hardware reader using a Raspberry Pi

Parts List

There is a spreadsheet here containing parts, quantities, prices, and links to parts for purchase

Custom Circuit Board

This is the schematic and layout for an interface board to go link the various hardware components


TODO: Add plans for housing

Install OS

Write Raspbian Lite onto Micro SD card using your desktop computer as documented here:

Configure OS for headless operation

Before you install the SD card into the Pi for the first time, we need to configure a few things.

Open up the root directory of the just created boot partition on the card.

Create a blank text file called ssh. This will enable the ssh server so that you can control the OS without a keyboard attached.

Next create a text file called wpa_supplicant.conf. Add this text to the file, substituting in the SSID and Password of your WiFi Network. This will automatically connect the WiFi on boot.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev


Next we have to configure the 3.5" screen as a device and point the console at it.

Open up the cmdline.txt file. Locate the quiet arguement:


Replace quiet with the following arguements:

fbcon=map:11 consoleblank=0 vt.global_cursor_default=0

Next, open the config.txt file. Go to the bottom of the file. Change dtparam=audio to off


Add the following lines to the bottom of the file:

# Limit power consumption and improve stability

#Driver for screen

Now you can insert the SD card into your Raspberry Pi.


TODO: Document assembly

Install Client Software

When you first power on the reader it should boot up, displaying a bunch of status messages on the screen, and one of the last messages on the screen should be:

My IP address is x.x.x.x

Using this address you should use SSH to connect to the Pi from your desktop

ssh x.x.x.x

Default user/password should be:

User: pi
Password: raspberry

Download and run the install script:

chmod +x
sudo ./

Follow the directions on screen. This install will take a LONG time, probably over 10 minutes. Once you've successfully made one reader, I highly suggest cloning the SD card to make subsequent readers, it will go much faster. All you need to change is the readerid.txt file for every new reader.

If everything went to plan, you just need to reboot the Pi and the reader will start working on bootup.

I want to setup an actual hardware reader using an Orange Pi

This is possible, saves you quite a bit of cash on the most expensive component.

TODO: Document/automate armbian configuration (it's quite a bit more involved than RPi)

I want to develop on a desktop machine, and deploy to a reader easily

TODO: Flesh this out a wee bit more :)

This is fun, start by setting up a desktop development environment as described above.

Then install PuTTY

Use the deploy.bat script to push out new builds.