MoppyJukebox

A Stand Alone Musical Floppy Jukebox

I saw a video of some Musical Floppies and thought “Yea, I could get in on that”.

By mashing some stuff together and with some overarching Java code here is a self contained MoppyJukebox.

What was Used:
Raspberry Pi
-Rasbian
-Java 1.8.0-b132
$ sudo apt-get update && sudo apt-get install oracle-java7-jdk
-Arduino SDK Installed
$ sudo apt-get install arduino
-pi4j
$ curl -s get.pi4j.com | sudo bash
Arduino
Floppy Disk Drives
Power Supply
-With Some Molex to Floppy Adapters
Some sort of VFD/LCD 20×2
3 x Push Buttons

My code extends and uses the MoppyDesk code provided by IAmSammy. All the source code is here: https://github.com/SammyIAm/Moppy
(What a great person!)

Unzip the source files, import the src/ directory into your eclipse workspace and attach the necessary libraries.

moppyjukebox.zip

The following libraries will need adding to the Java Build Path:

  • pi4j-core.jar
  • pi4j-device.jar
  • pi4j-gpio-extension.jar
  • pi4j-service.jar
  • RXTXcomm.jar

pi4j Version: 0.0.5
RXTX Version: 2.2pre2

I had 8 Drives available to me so I went ahead and created a 6 Drive MoppyJukebox (I killed 2 of them). Most of the information needed to get the initial drives setup can be found on SammyIAm’s site. But as a quick reference for myself here’s a recap.

Wireing:
Pin 11/12: Drive Select
Pin 17: GND
Pin 18: Direction (Green)
Pin 19: GND
Pin 20: Step (Yellow)
Moppy WireingDo this for each drive moving up the Arduino pins.

Trick the PSU into supplying power without a Motherbord (At own risk!)
Connect green to black (14/15) Reference

The Pi is wired up like this:

MoppyPi2I’m using a VFD so I have no backlight. If you are using a LCD with backlight remember to wire in the LED. Currently 20×2 is hard coded.

The buttons are in the order you would expect, from left to right: Previous,  Play/Stop, Next.

Here is a link to the jar that needs to be run on the Raspberry Pi.
Source code can be found here.

MoppyJukebox.jar

Or from the pi

$ wget https://dl.dropboxusercontent.com/u/7683699/moppyjukebox.jar

On the pi this jar needs to be run with Super User privileges to access the pi4j stuff. Also the RXTX library .so files need to be included in the library path

$ sudo java -Djava.library.path=/usr/lib/jni/ -jar moppyjukebox.jar

If you get the following error messages you need to link the RXTX .so files in the java library path.
java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

When the program starts up it will setup the com port for communication with the Arduino running SammyIAm’s code. This port can change and is configurable with config.properties file.

Next it will run away to find the midis to play. The midi files need to be named in a specific way so that both the top line is the artist and the bottom is the song.

Artist Name$$Track Name.mid

Note: for long song/artist names there is text scrolling.

The midi files should be placed in the following directory:

/opt/moppyjukebox

This directory can be made with these commands:

$ sudo mkdir moppyjukebox
$ chmod -R 0777 moppyjukebox/

I’m not worried about file security as I have no services running, you may want to be a little stricter with file permissions.

Now naturally I want this thing to be stand alone, turn it on and go. To automatically run the jar file on boot I used a cron job.

$ sudo crontab -e

and added the following line (My moppyjukebox.jar is in /opt/moppyjukeboxbin):

@reboot /usr/bin/java -classpath /opt/moppyjukeboxbin -Djava.library.path=/usr/lib/jni/ -jar /opt/moppyjukeboxbin/moppyjukebox.jar

I think that’s pretty much it.

This entry was posted in arduino, java, linux, pi, Programming. Bookmark the permalink.

3 Responses to MoppyJukebox

  1. Thomas says:

    Hey!

    I am trying to run your moppyjukebox.jar on my Raspberry pi 3, and i get the following error:

    Display Initialized
    Exception in thread “main” java.lang.NullPointerException
    at MidiRepo.LoadMidiFolder(MidiRepo.java:22) (Fails to load folder containing .mid-files?)
    at MidiRepo.(MidiRepo.java:13)
    at MoppyJukebox.(MoppyJukebox.java:18)
    at main.main(main.java:66)

    To my conclusion i have followed your tutorial to the letter, except i am using 16×2 lcd screen.

    Sorry for my inexperience, i am a noob with Java..

    • admin says:

      No problem. It sounds as though it is unable to find any midi files to read. To start with I would check that any .mid files you would like to play are in the /opt/moppyjukebox directory and that the permissions are correct for the applition to read. I can see the command in my guide might be misleading as it assumes you are already in /opt.
      Try:
      $ sudo mkdir /opt/moppyjukebox
      $ chmod -R 0777 /opt/moppyjukebox/

      • Thomas says:

        Thank you for the response.

        I did as you instructed, but the issue remains. The “moppyjukebox”-folder is at right place and the permissions have been set correctly. I have also named the .mid files according to the tutorial, for example “Tetris$$Theme”.

        I also noticed, that during the display initialization the 16×2 display doesn’t react in any way. (Black contrast bar only visible).

Leave a Reply

Your email address will not be published. Required fields are marked *