pi-rfid-jukebox/README.md

2.0 KiB

Rasperry Pi RFID Jukebox

Disclaimer: this is a perpetual work in progress!

This is a personal project of Annika Backstrom for using a Raspberry Pi as an RFID-controlled "jukebox". Given an RPi with attached MFRC522, UIDs from 1K MIFARE tags can be associated with media (MP3 files) and actions (currently, STOP and PAUSE).

Components

  • Jukebox app with web frontend (node.js)
  • RFID tag reader (Python)
  • MP3 player (mpg321, not included)

Setup

This section is incomplete (of course) and parts are tuned to my setup and for my own convenience:

  1. Clone project
  2. Copy config.json.sample to config.json
  3. Edit config.json for your setup
  4. Install Node.js
  5. npm install (node.js dependencies)
  6. virtualenv lib # make a python virtualenv
  7. lib/bin/pip install -r requirements.txt

Development

This project supports Vagrant, if you don't want to install the packages locally:

vagrant up
vagrant ssh -c 'cd /vagrant && npm run watch'

You can also just run from the checkout if your environment supports it.

npm run watch will use nodemon to restart the server when any file changes.

Dummy versions of mpg321 and the tag reader are available in the bin directory. These are node scripts, so you would include them in your config.json like so:

{
    "tag_reader": ["node", "./bin/tag-reader-dummy"],
    "mpg321": ["node", "./bin/mpg321-dummy"]
}

config.json

The following keys are available:

  • port -- web server port

  • tag_reader -- path to tag reader script. jukebox expects the tag reader to spit out a unique string for each tag (e.g. 10 character hex UID)

  • mpg321 -- path to mpg321 executable. should be run in "remote control" mode (-R), reading commands from stdin.

  • stop_id -- id of the card that stops playback

  • pause_id -- id of card that pauses playback

  • debug -- true to enable some extra logging