archive | ||
bin | ||
init | ||
jukebox | ||
static | ||
views | ||
.gitignore | ||
config.json.sample | ||
config.json.vagrant | ||
create.sql | ||
LICENSE | ||
nodemon.json | ||
package-lock.json | ||
package.json | ||
player.js | ||
README.md | ||
requirements.txt | ||
Vagrantfile |
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:
- Clone project
- Copy config.json.sample to config.json
- Edit config.json for your setup
- Install Node.js
npm install
(node.js dependencies)virtualenv lib
# make a python virtualenvlib/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