Go to file
Dominique Barton 72b76cde56
Merge pull request #21 from hayribakici/master
Add shuffle functionality
2021-04-14 11:17:17 +02:00
mopidy_pummeluff FEATURE: Add shuffle functionality 2021-04-13 13:41:06 +02:00
.gitignore MISC: Ignore .venv/ directory in git 2019-02-24 22:55:25 +01:00
.pylintrc TEST: Add pylint 2019-02-22 20:41:31 +01:00
.travis.yml TEST: Use python 3.7 in Travis 2020-02-09 02:45:43 +01:00
LICENSE MISC: Add MIT license 2019-02-24 22:36:39 +01:00
README.rst DOC: Fix link to development guidelines 2021-04-13 11:28:43 +02:00
requirements.txt MISC: Export requirements into separate files 2019-02-23 19:09:47 +01:00
requirements_dev.txt TEST: Upgrade to pylint 2.4.4 2020-02-09 02:51:29 +01:00
setup.cfg TEST: Add pycodestyle 2019-02-22 20:41:31 +01:00
setup.py REFACTOR: Update setuptools script for py3k 2020-02-08 19:09:54 +01:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Mopidy Pummeluff
================

Pummeluff is a `Mopidy <http://www.mopidy.com/>`_ extension which allows you to control Mopidy via RFID tags. It is as simple as that:

- Register an action to an RFID tag
- Touch that tag on the RFID reader and the action will be executed 

Thus, the Mopidy Pummeluff extension adds the following features to Mopidy:

- A radically simple web UI which can be used to manage the RFID tags
- A daemon which continuously reads RFID tags in the background and executes the assigned actions

There are several actions included, such as replacing the tracklist with a desired URI, setting the volume to a specific level or controlling the playback state.

Hardware
========

Requirements
------------

To get the whole thing working, you need at least the following hardware:

- A Raspberry Pi 3 Model B
- An ``RC522`` RFID module (`RC522 on AliExpress <https://www.aliexpress.com/wholesale?SearchText=rc522>`_ for approx. *USD 1*)
- RFID tags (``ISO 14443A`` & ``Mifare`` should work, `14443A tags on AliExpress <https://www.aliexpress.com/wholesale?SearchText=14443A+lot>`_ for approx. *0.4 USD* per tag)
- Female dupont jumper wires (`female dupont jumper cables on AliExpress <https://www.aliexpress.com/wholesale?SearchText=dupont>`_ for approx. *1 USD*)

Optionally you can also add two buttons to the RPi, which can be used for power & playback control:

- Two momentary push buttons (`momentary push buttons on AliExpress <https://www.aliexpress.com/wholesale?SearchText=momentary+push+button>`_ for approx. *USD 1-2*) 

Pummeluff also supports a status LED, which lights up when Pummeluff (i.e. Mopidy) is running. You can go with a separate LED, just make sure it can handle 3.3V or add a resistor. There are also push buttons with integrated LED's available, for example `these 5V momentary push buttons on AliExpress <https://www.aliexpress.com/item/16mm-Metal-brass-Push-Button-Switch-flat-round-illumination-ring-Latching-1NO-1NC-Car-press-button/32676526568.html>`_.

.. note::

    The project will probably run on other RPi models, but I've only tested it on the ``3B``. The RPi ``3B+`` should also work fine, as the GPIO pins are identical. I don't know about RPi ``1`` or ``2``, but you can give it a shot.

Connecting the RC522 module
---------------------------

Please connect the ``RC522`` RFID module to the RPi as follows:

- ``RC522 pin 1 [SDA ]``  ``RPi pin 24 [SPI0 CE0 ]``
- ``RC522 pin 2 [SCK ]``  ``RPi pin 23 [SPI0 SCLK]``
- ``RC522 pin 3 [MOSI]``  ``RPi pin 19 [SPI0 MOSI]``
- ``RC522 pin 4 [MISO]``  ``RPi pin 21 [SPI0 MISO]``
- ``RC522 pin 5 [IRQ ]``  ``RPi pin 18 [ GPIO 24 ]``
- ``RC522 pin 6 [GND ]``  ``RPi pin 20 [   GND   ]``
- ``RC522 pin 7 [RST ]``  ``RPi pin 22 [ GPIO 25 ]``
- ``RC522 pin 8 [3.3V]``  ``RPi pin 17 [3.3V PWR ]``

Please have a look at the `Raspberry Pi SPI pinout <https://pinout.xyz/pinout/spi>`_ if you want to have a graphical view of the RPi GPIO pins. 

.. note::
    
    This connections are only valid for the RPi model ``3B`` and ``3B+``. If you want to use another RPI model, make sure you're using the correct pins.

Connecting the buttons (optional)
---------------------------------

You can connect two buttons to the RPi:

- ``RPi pin 5`` - Power button: Shutdown the Raspberry Pi into halt state & wake it up again from halt state
- ``RPi pin 29`` - Playback button: Pause and resume the playback
- ``RPi pin 31`` - Stop button: Stops the playback
- ``RPi pin 33`` - Previous button: Changes to the previous track in the playlist
- ``RPi pin 35`` - Next button: Changes to the next track in the playlist

The buttons must shortcut their corresponding pins against ``GND`` (e.g. pin ``6``) when pressed. This means you want to connect one pin of the button (i.e. ``C``) to RPI's ``GND``, and the other one (i.e. ``NO``) to RPi's pin ``5``, ``29``, ``31``, ``33`` or ``35``.

Connecting the status LED (optional)
------------------------------------

If you want to have a status LED which is turned on when the RPi is running, you can connect an LED to a ``GND`` pin (e.g. pin ``6``) & to pin ``8``.

Installation
============

Prepare Raspberry Pi
--------------------

Before you can install and use Mopidy Pummeluff, you need to configure your Raspberry Pi properly.

We want to enable the ``SPI`` interface and give the ``mopidy`` user access to it. This is required for the communication to the RFID module. Enter this command:

.. code-block:: bash

    sudo raspi-config

In the configuraton utility, **Enable the SPI** under ``5 Interfacing Options  P4 SPI``. 

After that, add your ``mopidy`` user to the ``spi`` and ``gpio`` group:

.. code-block:: bash

    sudo usermod -a -G spi,gpio mopidy

If you're planning to use a button or RFID tag to shutdown the system, you also need to create a sudo rule, so that the ``mopidy`` user can shutdown the system without a password prompt:

.. code-block:: bash

    echo "mopidy ALL = NOPASSWD: /sbin/shutdown" > /etc/sudoers.d/mopidy

Install via pip
---------------

The recommended way to install Mopidy Pummeluff by using ``pip`` and thus by executing the following command:

.. code-block:: bash

    sudo pip install mopidy-pummeluff

.. hint::

    If you get an error that ``spidev`` could not be found, run ``pip install spidev`` first. This is an issue related to the ``pi-rc522`` Pypi package.

Install from source
-------------------

Alternatively, you can also install Mopidy Pummeluff from source, by running this command:

.. code-block:: bash

    sudo su -
    cd /usr/src
    git clone https://github.com/confirm/mopidy-pummeluff.git
    cd mopidy-pummeluff
    python setup.py install

.. hint::

    If you get an error that ``spidev`` could not be found, run ``pip install spidev`` first. This is an issue related to the ``pi-rc522`` Pypi package.

Configuration
=============

Activate and configure the `Mopidy HTTP <https://docs.mopidy.com/en/latest/ext/http/>`_ extension and make sure you can connect to the Web UI. The minimal config looks like this:

.. code-block::

    [http]
    enabled = true
    hostname = 0.0.0.0

Usage
=====

Open the Mopidy Web UI (i.e. ``http://{MOPIDY_IP}:6680/``).
You should see a ``pummeluff`` web client which can be used to regsiter new RFID tags.

Contribution
============

Please follow `these development guidelines <https://development-guidelines.confirm.ch/>`_ when contributing to this project.