Volumio v3 with PeppyMeters

A friend recently mentioned he used Volumio on his Raspberry Pi and was hoping to get PeppyMeter running in order to display meters whilst playing music through Volumio. I have used Volumio myself for a number of years, though on a now discontinued Odroid C2. I had also not heard of PeppyMeter before, but it looked interesting, and threads on the Volumio forums and elsewhere indicated it was possible to use PeppyMeter with Volumio.

While it does turn out to be possible, the process turned out to be more challenging than I thought and took longer then expected even though I had factored in Hofstadter’s Law from the start.

What follows are my notes on the process I went through to get it working.

Summary

This is a long post, so I will start with a summary of the steps before getting into the details. :w

  • The path of least resistance for me was to do this a Raspberry Pi, in my case a pi-top Ceed.
  • I used Volumio 3 Buster Beta which at the time writing this was v3.074-2021-05-17.
  • As a result of using a beta version of Volumio for this, plugins required need to be installed manually at the command line.
  • Getting PeppyMeter working with Volumio 3, requires two Volumio plugins be installed:
    1. Touch_display (I was working with v1.3.0).
    2. PeppyMeter (I used version from balbuze’s alsa_modular branch)

Base Volumio Setup

Not going into too much detail here as there are many detailed guides available on how to install Volumio for use. Step 2., below, is dangerous and there are other ways to achieve the same end.

  1. I downloaded the compressed volumio image and unzipped it.
  2. I dumped the image to a microSD card using dd command, being extra careful to make sure the of= drive specification was truly that of the microSD card and not one of the other drives in my machine. Be really careful, as sending image to wrong drive usually is a catastrophic event.
  3. Removed microSD from my workstation, placed in Raspberry Pi, and powered it on.
  4. When booted, I connected to the Raspberry Pi over the network via a web browser and completed configuration via the First Config Wizard.
  5. Visited the /dev page of the Volumio device and made sure Test Mode and SSH were both set by clicking on the True and Enabled buttons for each.
  6. I then returned to the Settings System page for the volumio in the browser, checked for updates and applied what was offered.
  7. Finally I rebooted the device and played some music to be sure the device was working as expected with a base image and no plugins.

In general the process for installing plugins is:

  1. Make ssh connection to device running Volumio, connecting as the volumio user.
  2. Download the needed plugin.
  3. Make a directory to expand the plugin downloaded.
  4. Expand plugin into the created directory.
  5. Enter the directory and run command to install plugin.
  6. When plugin shows on Installed Plugin view in the Volumio web interface, press at the command line to end the plugin install script as it will not exit on its own.
  7. Exit the install directory, delete the install directory and the downloaded plugin.

Volumio Plugin Install Overview

This plugin is required by the PeppyMeter plugin or simply to convert Volumio from a headless device to one which will drive a display device displaying the Volumio browser GUI in kiosk mode. Install this first.

Touch Screen Plugin Installation Details

  • wget https://github.com/volumio/volumio-plugins/raw/gh-pages/plugins/volumio/armhf/miscellanea/touch_display/touch_display.zip
  • mkdir touch_display
  • miniunzip touch_display.zip -d touch_display
  • cd touch_display
  • volumio plugin install
  • Press Ctrl-C when activity in shell has ceased, and web GUI Settings>Plugins>Installed Plugins shows Touch Display as installed.
~ $ ssh volumio@volumiopi
volumio@volumiopi's password:
                       ___
                      /\_ \                        __
         __  __    ___\//\ \    __  __    ___ ___ /\_\    ___
        /\ \/\ \  / __`\\ \ \  /\ \/\ \ /' __` __`\/\ \  / __`\
        \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \
         \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/
          \/__/   \/___/ \/____/ \/___/  \/_/\/_/\/_/\/_/\/___/

             Free Audiophile Linux Music Player - Version 2.0

          © 2015-2020 Michelangelo Guarise - Volumio Team - Volumio.org

Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Welcome to Volumio for Raspberry Pi (5.4.83-v7+ armv7l)
Last login: Tue Jun  1 11:32:22 2021 from 192.168.100.96
volumio@volumiopi:~$

volumio@volumiopi:~$ wget https://github.com/volumio/volumio-plugins/raw/gh-pages/plugins/volumio/armhf/miscellanea/touch_display/touch_display.zip
--2021-06-01 11:33:10--  https://github.com/volumio/volumio-plugins/raw/gh-pages/plugins/volumio/armhf/miscellanea/touch_display/touch_display.zip
Resolving github.com (github.com)... 140.82.114.3
Connecting to github.com (github.com)|140.82.114.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/volumio/volumio-plugins/gh-pages/plugins/volumio/armhf/miscellanea/touch_display/touch_display.zip [following]
--2021-06-01 11:33:11--  https://raw.githubusercontent.com/volumio/volumio-plugins/gh-pages/plugins/volumio/armhf/miscellanea/touch_display/touch_display.zip
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.108.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 845369 (826K) [application/zip]
Saving to: ‘touch_display.zip’

touch_display.zip                           100%[=========================================================================================>] 825.56K  --.-KB/s    in 0.1s

2021-06-01 11:33:11 (7.06 MB/s) - ‘touch_display.zip’ saved [845369/845369]

volumio@volumiopi:~$

volumio@volumiopi:~$ mkdir touch_display

volumio@volumiopi:~$ miniunzip touch_display.zip -d touch_display
MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant
more info at http://www.winimage.com/zLibDll/unzip.html

touch_display.zip opened
extracting: index.js
extracting: uninstall.sh
extracting: package.json
extracting: install.sh
extracting: requiredConf.json
...
extracting: node_modules/write-file-atomic/LICENSE
extracting: node_modules/write-file-atomic/index.js
extracting: node_modules/write-file-atomic/README.md
extracting: node_modules/write-file-atomic/package.json
extracting: node_modules/yeast/LICENSE
extracting: node_modules/yeast/index.js
extracting: node_modules/yeast/README.md
extracting: node_modules/yeast/package.json
extracting: package-lock.json
extracting: gitignore
extracting: UIConfig.json
volumio@volumiopi:~$ cd touch_display
volumio@volumiopi:~/touch_display$ volumio plugin install

This command will install the plugin on your device

Compressing the plugin
Plugin succesfully compressed
Progress: 10
Status :Downloading plugin
Downloading plugin at http://127.0.0.1:3000/plugin-serve/touch_display.zip
Progress: 30
Status :Creating install location
Downloading plugin at http://127.0.0.1:3000/plugin-serve/touch_display.zip
END DOWNLOAD: http://127.0.0.1:3000/plugin-serve/touch_display.zip
Creating install location
Progress: 40
Status :Unpacking plugin

...

update-alternatives: using /usr/bin/chromium to provide /usr/bin/gnome-www-browser (gnome-www-browser) in auto mode
Setting up libfile-mimeinfo-perl (0.29-1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for dbus (1.12.20-0+deb10u1) ...
Processing triggers for mime-support (3.62) ...
Installing japanese, korean, chinese and taiwanese fonts
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
  fonts-arphic-gbsn00lp fonts-arphic-ukai fonts-unfonts-core
0 upgraded, 3 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B/24.9 MB of archives.
After this operation, 57.2 MB of additional disk space will be used.
Selecting previously unselected package fonts-arphic-gbsn00lp.
(Reading database ...(Reading database ... 51595 files and directories currently installed.)
Preparing to unpack .../fonts-arphic-gbsn00lp_2.11-15_all.deb ...
Unpacking fonts-arphic-gbsn00lp (2.11-15) ...
Selecting previously unselected package fonts-unfonts-core.
Preparing to unpack .../fonts-unfonts-core_1%3a1.0.2-080608-16_all.deb ...
Unpacking fonts-unfonts-core (1:1.0.2-080608-16) ...
Selecting previously unselected package fonts-arphic-ukai.
Preparing to unpack .../fonts-arphic-ukai_0.2.20080216.2-4_all.deb ...
Unpacking fonts-arphic-ukai (0.2.20080216.2-4) ...
Setting up fonts-unfonts-core (1:1.0.2-080608-16) ...
Setting up fonts-arphic-gbsn00lp (2.11-15) ...
Setting up fonts-arphic-ukai (0.2.20080216.2-4) ...
Processing triggers for fontconfig (2.13.1-2) ...
Creating Kiosk data dir
Creating chromium kiosk start script
Creating Systemd Unit for Kiosk
Allowing volumio to start an xsession
Finalizing installation
^C
volumio@volumiopi:~$ 

If all went well,the web GUI under installed plugins should look something like this.

Touch Display Installed Plugin

Activate the plugin by clicking on the switch to toggle from off to on, red indicator in GUI should turn green, and if Volumio device has an attached screen, the Volumio web gui should appear on it.

Review the settings for the touch display plugin, and set as appropriate.

Touch Display Plugin Settings

PeppyMeter Plugin Instalation Details

  • wget https://github.com/balbuze/volumio-plugins/raw/alsa_modular/plugins/miscellanea/peppyMeter/pipe.zip
  • mkdir pipe
  • miniunzip pipe.zip -d ./pipe
  • cd pipe
  • volumio plugin install
  • Press Ctrl-C when activity in shell has ceased, and web GUI Settings>Plugins>Installed Plugins shows PeppyMeter for Volumio as installed.
$ ssh volumio@volumiopi
volumio@volumiopi's password:
                       ___
                      /\_ \                        __
         __  __    ___\//\ \    __  __    ___ ___ /\_\    ___
        /\ \/\ \  / __`\\ \ \  /\ \/\ \ /' __` __`\/\ \  / __`\
        \ \ \_/ |/\ \L\ \\_\ \_\ \ \_\ \/\ \/\ \/\ \ \ \/\ \L\ \
         \ \___/ \ \____//\____\\ \____/\ \_\ \_\ \_\ \_\ \____/
          \/__/   \/___/ \/____/ \/___/  \/_/\/_/\/_/\/_/\/___/

             Free Audiophile Linux Music Player - Version 2.0

          © 2015-2020 Michelangelo Guarise - Volumio Team - Volumio.org

Volumio Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Welcome to Volumio for Raspberry Pi (5.4.83-v7+ armv7l)
Last login: Wed Jun  2 11:02:35 2021 from 192.168.100.96

volumio@volumiopi:~$ wget https://github.com/balbuze/volumio-plugins/raw/alsa_modular/plugins/miscellanea/peppyMeter/pipe.zip

--2021-06-02 11:26:27--  https://github.com/balbuze/volumio-plugins/raw/alsa_modular/plugins/miscellanea/peppyMeter/pipe.zip
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/balbuze/volumio-plugins/alsa_modular/plugins/miscellanea/peppyMeter/pipe.zip [following]
--2021-06-02 11:26:28--  https://raw.githubusercontent.com/balbuze/volumio-plugins/alsa_modular/plugins/miscellanea/peppyMeter/pipe.zip
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 62850 (61K) [application/zip]
Saving to: ‘pipe.zip’

pipe.zip                                    100%[=========================================================================================>]  61.38K  --.-KB/s    in 0.01s

2021-06-02 11:26:31 (4.01 MB/s) - ‘pipe.zip’ saved [62850/62850]

volumio@volumiopi:~$ mkdir pipe

volumio@volumiopi:~$ miniunzip pipe.zip -d ./pipe

MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant
more info at http://www.winimage.com/zLibDll/unzip.html

pipe.zip opened
 extracting: UIConfig.json
creating directory: arm/
 extracting: arm/libpeppyalsa.so.0.0.0
creating directory: asound/
 extracting: asound/volumioPeppyalsa.postPeppyalsa.5.conf
 extracting: config.json
 extracting: config.txt.tmpl
creating directory: i18n/
 extracting: i18n/strings_en.json
 extracting: index.js
 extracting: install.sh
 extracting: package.json
 extracting: peppy.service
 extracting: peppy.service.tar
 extracting: peppymeterinvolumio.png
 extracting: readme.md
 extracting: uninstall.sh

volumio@volumiopi:~$ cd pipe

volumio@volumiopi:~$ volumio plugin install

This command will install the plugin on your device

Compressing the plugin
Plugin successfully compressed
Progress: 10
Status :Downloading plugin
Downloading plugin at http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
Progress: 30
Status :Creating install location
Downloading plugin at http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
END DOWNLOAD: http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
Creating install location
Progress: 40
Status :Unpacking plugin
Downloading plugin at http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
END DOWNLOAD: http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
Creating install location
Unpacking plugin
Progress: 45
Status :Checking that the plugin is suitable for this version of Volumio The plugin has no node version dependency information. The plugin has no Volumio version dependency information. The plugin may not work on this version of Volumio
Downloading plugin at http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
END DOWNLOAD: http://127.0.0.1:3000/plugin-serve/peppyMeter.zip
Creating install location
Unpacking plugin
Checking that the plugin is suitable for this version of Volumio The plugin has no node version dependency information. The plugin has no Volumio version dependency information. The plugin may not work on this version of Volumio
Progress: 0

...

rm -f "libpeppyalsa.so.0" && ln -s "libpeppyalsa.so.0.0.0" "libpeppyalsa.so.0")
libtool: link: (cd ".libs" && rm -f "libpeppyalsa.so" && ln -s "libpeppyalsa.so.0.0.0" "libpeppyalsa.so")
libtool: link: ar cru .libs/libpeppyalsa.a  src/peppyalsa.o src/meter.o src/spectrum.o
libtool: link: ranlib .libs/libpeppyalsa.a
libtool: link: ( cd ".libs" && rm -f "libpeppyalsa.la" && ln -s "../libpeppyalsa.la" "libpeppyalsa.la" )
make[1]: Entering directory '/tmp/peppyalsa'
 /bin/mkdir -p '/usr/local/lib'
 /bin/bash ./libtool   --mode=install /usr/bin/install -c   libpeppyalsa.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libpeppyalsa.so.0.0.0 /usr/local/lib/libpeppyalsa.so.0.0.0
libtool: install: (cd /usr/local/lib && { ln -s -f libpeppyalsa.so.0.0.0 libpeppyalsa.so.0 || { rm -f libpeppyalsa.so.0 && ln -s libpeppyalsa.so.0.0.0 libpeppyalsa.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libpeppyalsa.so.0.0.0 libpeppyalsa.so || { rm -f libpeppyalsa.so && ln -s libpeppyalsa.so.0.0.0 libpeppyalsa.so; }; })
libtool: install: /usr/bin/install -c .libs/libpeppyalsa.lai /usr/local/lib/libpeppyalsa.la
libtool: install: /usr/bin/install -c .libs/libpeppyalsa.a /usr/local/lib/libpeppyalsa.a
libtool: install: chmod 644 /usr/local/lib/libpeppyalsa.a
libtool: install: ranlib /usr/local/lib/libpeppyalsa.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/sbin" ldconfig -n /usr/local/lib

----------------------------------------------------------------------

Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------

make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/tmp/peppyalsa'
Finalizing installation
^C
volumio@volumiopi:~$ 

If all went well,the web GUI under installed plugins should look something like this.

Peppy Meter and Touch Display Plugins Installed Plugin

Activate the plugin by clicking on the switch to toggle from off to on, red indicator in GUI should turn green, and if Volumio device has an attached screen, PeppyMeter should appear overlaying the Volumio web GUI.

Review the settings for the touch display plugin, and set as appropriate.

PeppyMeter Plugin Settings

Final Notes

Volumio with PeppyMeter 10" Screen

  • PeppyMeter Plugin is best suited for 7” screens where it can better overlay the Volumio GUI. Image above is from 10” screen.
  • Not all PeppyMeters are available at all resolutions.
  • Once plugin is installed, it is fine to remove the downloaded zip file and the directory it was unzipped to.
  • If when playing music an ALSA error appears, as root, try issuing a modprobe snd_dummy. If that does not resolve the error, you can disable or uninstall the PeppyMeter plugin to return to a Volumio setup, albeit without PeppyMeter. This is where I ran into a full stop setting this up on Odroid C2, as the dummy sound card driver is not a module or built in to the current Volumio image for C2. Once I get a UART adapter, I will pursue building a new kernel
  • Once set up and working it probably makes sense to create an image from the microSD card as backup to speed recovery if ever needed. I find dd the best tool for this, but there are other options.
  • The reasons I went with Volumio 3 Beta setup are ALSA architecture is significantly improved and the current Volumio 2 image at time of this writing has a library from a newer version of Debian injected into it making it impossible to add some required components using apt or dpkg.