A Python + Node.js music player driven by NFC or RFID tags.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Annika Backstrom a6a9050afc Fix Vagrant dev environment 7 months ago
bin Update project for new NFC-EXPLORE build 1 year ago
init Add systemd init file with hardcoded path 3 years ago
jukebox Add support for scripting directory 7 months ago
static attempt client reconnection of closed websockets 3 years ago
templates Let templates handle their own dependencies 3 years ago
.gitignore Move media player path into config 3 years ago
LICENSE Add MIT License 3 years ago
README.md Fix Vagrant dev environment 7 months ago
Vagrantfile Fix Vagrant dev environment 7 months ago
config.json.sample Add support for scripting directory 7 months ago
config.json.vagrant Filter out @F messages from mpg321 3 years ago
nodemon.json Fix Vagrant dev environment 7 months ago
package-lock.json Move nodemon back to a dev dependency 7 months ago
package.json Fix Vagrant dev environment 7 months ago
player.js Add support for scripting directory 7 months ago
requirements.txt Update project for new NFC-EXPLORE build 1 year ago

README.md

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