Instructables
Picture of USB RFID + Python + Pub-Sub (MQTT)
This guide will show you how to setup a USB RFID Reader that uses MQTT to broadcast scan information.

The code uses the 'RFIDIOt' RFID library to read tags and the 'Nyamuk' MQTT client library to publish the information.
 
Remove these adsRemove these ads by Signing Up

Step 1: Installing RFIDIOt

Picture of Installing RFIDIOt
Installation
Download the RFIDIOt library at https://github.com/AdamLaurie/RFIDIOt

The library has a lot of dependencies which may make installation difficult. It is therefore recommended that you use the 'Getting Started' section of the documentation as guide to installation.

Documentation: http://www.rfidiot.org/documentation.html

Testing your installation
With the reader plugged in, place a tag on the reader and run the example script 'cardselect.py' (included with RFIDIOt library). Information about the card reader and tag should be outputted. 

Step 2: Installing Nyamuk

Picture of Installing Nyamuk
wmqtt_output.png
Installation
Download the Nyamuk library at https://github.com/iwanbk/nyamuk 
or
pip install nyamuk

Testing your installation
 - Download, install and run the MQTT client 'WMQTT Utility': http://mqtt.org/wiki/doku.php/ia92
 - In the 'Broker TCP/IP address' field enter 'test.mosquitto.org' (without quotes) and click connect. The red circle on the left should now be green.
 - In the 'Subscribe Topic' field enter '/nyamuk/test' and hit the 'Subscribe' button
 - Download and run the following script and you should see the above output in the python shell and the WMQTT Utility.

Step 3: Combining what we've done

Picture of Combining what we've done
Now that we've got an RFID reader and pub-sub client working separately, it's time to combine the two functions to achieve the end result. The following code does exactly that.

Here's how it works:

 - When the script starts the 'open_reader()' function is called which opens the card reader or exits the script upon failure.
 - Displays card information
 - Connects to the MQTT server of quits upon failure.
 - Begins the main loop
 - The listen_card(card, interval) function starts a loop that checks a card is sitting on the reader. Once a card is found, the card ID,             time and date, and action (placed or removed) is published and the function returns.
 - The listen_remove(card, interval, card_id) function works the same as listen_card, however, the data is publish when the card is removed.
- The loop repeats.


TheSandman8 months ago

Being a bit of Linux newb but a big Pi Fan I'm struggling at step1, pathetic I know. I have the reader pictured above. The Pi is detecting the device a quick lsusb lists it as

Bus 001 Device 005: ID 072f:2200 Advanced Card Systems, Ltd

I've installed various libs:

libpcsclite1

libpcsclite-dbg

libpcsclite-dev

libccid

and all the various python libs using PIP (I think).

However a quick 'ls /dev/tty*' shows that I don't have a ttyUSBx, there are no devices listed here. Due to this running the test script returns there are no card readers connected.

Any suggestions as to where I'm going wrong?

were you able to solve this issue? I'm having a similar problem where I can't install pcsc-lite since it's not compatible with raspbian.

rcable21 year ago
I found the reader here...
http://nfctags.tagstand.com/products/usb-nfc-reader-writer-acr122u

I'm sure there are other places to buy it as well.
Mark.S1 year ago
This was a student project. The aim is to connect this to a gumball machine we have modified and have it deliver you a random number of gumballs when you swipe your smart card over the reader. For some of our colleagues, this could be a very, very low random number (0) most of the time. :)
bbustudent1 year ago
what type of reading device do you use?
will you use this to build something else? what are you making?