Add instructions, fix systemd unit
This commit is contained in:
parent
3feeca4e6d
commit
f59a38e506
@ -4,10 +4,10 @@ After=network.target
|
||||
After=mpd.service
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/home/music/mpdlisten
|
||||
ExecStart=/home/music/mpdlisten/mpdlisten.py
|
||||
WorkingDirectory=/home/%u/mpdlisten
|
||||
ExecStart=/home/%u/mpdlisten/mpdlisten.py
|
||||
KillSignal=SIGINT
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
WantedBy=default.target
|
||||
|
127
readme.md
Normal file
127
readme.md
Normal file
@ -0,0 +1,127 @@
|
||||
# mpdlistenpy
|
||||
|
||||
This python script is supposed to run on a rpi and has the following features :
|
||||
|
||||
* Relay trigger : Watches a MPD instance for play/pause/stop states and activates a relay via GPIOs accordingly ; the usecase for this is powering on/off a pair of speakers only when something is running.
|
||||
* OLED display : Drives a 0.96" OLED display (ssd1306) to display MPD status (volume, current artist, album, title...)
|
||||
* Button input : watches GPIOs for button input ; I'm using 5 push buttons for controlling playback (previous, next, toggle playback, stop, menu) or browse the database and add stuff to the playlist.
|
||||
* Potentiometer input : Watches a GPIO for estimating the resistance of a rotary potentiometer and set volume accordingly.
|
||||
|
||||
## Setup
|
||||
|
||||
### Software
|
||||
|
||||
1. Install the latest **light** version of Raspberry Pi OS and run it on the RPI model of your choice.
|
||||
2. Install the following dependencies
|
||||
|
||||
### Hardware
|
||||
|
||||
#### Overall GPIOs usage
|
||||
|
||||
| FUNCTION | GPIO # |
|
||||
| OLED | GND, 3.3V, 2(SDA), 3(SCL) |
|
||||
| 5 BUTTONS | GND, 7, 8, 9, 11, 25 |
|
||||
| POTENTIOMETER | GND, 3.3V, 23 |
|
||||
| RELAY | GND, 5V, 17 |
|
||||
|
||||
You can check these here : [https://pinout.xyz/](https://pinout.xyz/)
|
||||
|
||||
#### Oled screen
|
||||
|
||||
Using the SSD1306 OLED screen involves a few steps described here :
|
||||
|
||||
[https://luma-oled.readthedocs.io/en/latest/hardware.html](https://luma-oled.readthedocs.io/en/latest/hardware.html)
|
||||
|
||||
and here :
|
||||
|
||||
[https://luma-oled.readthedocs.io/en/latest/software.html](https://luma-oled.readthedocs.io/en/latest/software.html)
|
||||
|
||||
Once you've gone through these steps, you should be good to go.
|
||||
|
||||
#### Relay circuit
|
||||
|
||||
We're using the circuit described on projects-raspberry.com :
|
||||
|
||||
##### Components
|
||||
|
||||
* 5V DC coil relay
|
||||
* BC337 NPN transistor
|
||||
* 1N4002 [diode](https://en.wikipedia.org/wiki/1N400x_general-purpose_diodes)
|
||||
* 1KΩ resistor
|
||||
|
||||
##### Diagram
|
||||
|
||||
![https://web.archive.org/web/20240217011938im_/https://projects-raspberry.com/wp-content/uploads/2015/04/Raspberry-Pi-%E2%80%93-Driving-a-Relay-using-GPIO2.jpg](https://web.archive.org/web/20240217011938/https://projects-raspberry.com/raspberry-pi-driving-a-relay-using-gpio/)
|
||||
|
||||
*source: [https://projects-raspberry.com/raspberry-pi-driving-a-relay-using-gpio/](https://web.archive.org/web/20240217011938/https://projects-raspberry.com/raspberry-pi-driving-a-relay-using-gpio/)*
|
||||
|
||||
#### Buttons circuit
|
||||
|
||||
Dead simple way described here, using a common GND, and 1 GPIO/button :
|
||||
|
||||
[http://razzpisampler.oreilly.com/ch07.html](https://web.archive.org/web/20240121074741/http://razzpisampler.oreilly.com/ch07.html)
|
||||
|
||||
The only difference is the addition of a resistor on the GND rail.
|
||||
|
||||
If you're short on GPIOs, there is a way to use a single GPIO for multiple buttons based on resistance described here :
|
||||
|
||||
[https://www.instructables.com/RaspberryPi-Multiple-Buttons-On-One-Digital-Pin/](https://www.instructables.com/RaspberryPi-Multiple-Buttons-On-One-Digital-Pin/)
|
||||
|
||||
#### Potentiometer circuit
|
||||
|
||||
Using the 'step response' method described [here](http://razzpisampler.oreilly.com/ch08.html#Discussion) (It's the same principle as in the link above),
|
||||
we can use an analog potentiometer to control volume.
|
||||
|
||||
The solution described in the previous link is not very accurate though, so we'll be using an alternative solution offered by abyz.me.uk :
|
||||
|
||||
[https://abyz.me.uk/rpi/pigpio/examples.html#Python_pot_cap_py](https://abyz.me.uk/rpi/pigpio/examples.html#Python_pot_cap_py)
|
||||
|
||||
##### Components
|
||||
|
||||
* 100nf Ceramic capacitor
|
||||
* 5KΩ Potentiometer
|
||||
|
||||
##### Diagram
|
||||
|
||||
```
|
||||
3V3 ----- Potentiometer --+-- Capacitor ----- Ground
|
||||
|
|
||||
+-- GPIO 23
|
||||
```
|
||||
|
||||
Instructions for use are in the source file. The library ('pot_cap.py') is included in this project for convenience.
|
||||
|
||||
You might have to install the 'pigpio' library though :
|
||||
|
||||
```
|
||||
sudo apt install python3-pigpio
|
||||
```
|
||||
|
||||
You can find out more about installing 'pigpio' here :
|
||||
|
||||
[https://abyz.me.uk/rpi/pigpio/download.html](https://abyz.me.uk/rpi/pigpio/download.html)
|
||||
|
||||
## Optional steps
|
||||
|
||||
### Installing the systemd service
|
||||
|
||||
* Copy the provided service file 'mpdlistenpy.service' to '~/.config/systemd/user/mpdlistenpy.service'.
|
||||
* Update, enable and start the service as a user :
|
||||
|
||||
```
|
||||
# If you need to edit the path to the script
|
||||
# systemctl --user --full edit mpdlistenpy.service
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable mpdlistenpy.service
|
||||
systemctl --user start mpdlistenpy.service
|
||||
```
|
||||
|
||||
### Automounting Samba shares on startup
|
||||
|
||||
[](gist)
|
||||
|
||||
*source :* [https://root.nix.dk/en/utility-scripts/mount-samba-share-as-user](https://root.nix.dk/en/utility-scripts/mount-samba-share-as-user)
|
||||
|
||||
### Automounting USB
|
||||
|
||||
[https://gist.github.com/zebrajaeger/168341df88abb6caaea5a029a2117925](https://gist.github.com/zebrajaeger/168341df88abb6caaea5a029a2117925)
|
Loading…
Reference in New Issue
Block a user