Control Jivelite by rotary encoders and buttons

mini11 13 July 2022 pCP 7.0.0 Projects  •  •  •

Your display has no touch function and you want to control jivelite by hardware? Here is the solution.

How to control Jivelite by rotary encoders and pushbuttons.

Thanks to chill for the sbpd-script.sh script (pirate-audio amp).

rotary

pushbutton

  • You can simply control jivelite by adding rotary encoders and/or pushbuttons to the GPIO’s of your Raspberry Pi.

What we need

  • A running piCorePlayer with Jivelite installed and a display connected to your Raspberry Pi
  • Some pushbuttons (normally open)
  • One or two rotary encoders (for this purpose, do not use encoders with power supply!)
  • Some jumper wires (female to bare wires)
  • Soldering iron, solder
  • Some heat shrink tubes

Preparation

  • The sbpd-script.sh handles with Jivelite key commands. Knowledge of these commands is an advantage.
Info

For a complete list of Jivelite key commands—see Jivelite key commands.

  • Solder the jumper wires to rotary encoders and/or pushbuttons. Use some heat shrink tubes to get a stable connection and avoid short circuit.

connections

Wiring

  • Wire pushbuttons and rotary encoders as shown here. This example matches with the sbpd-script.sh below.

connections

Info

If you have connected an I2S DAC, do not use the blue coloured GPIO’s. The red GPIO’s are reserved if there is an SPI display on CE1. Do not use one GPIO for multiple purposes!

Steps

Step 1 - Install extensions
  • Bring up the pCP web interface.
    • On [Main Page] scroll down to “Additional functions” and click on the [Extensions] button. Wait for green ticks.

extensions

  • Click on the [Available] tab, in the “Available extensions in the piCorePlayer repository” section.

available

  • Load the nano.tcz extension.
  • Load the pcp-sbpd.tcz extension.
  • Check if the pigpio.tcz is installed. If not, load the pigpio.tcz extension.
Step 2 - Make a spbd-script.sh
  • Login to your RPi via ssh (software=putty – user: tc, password: piCore) and enter the following command:
sudo nano /home/tc/sbpd-script.sh
  • Copy the following text and paste it into an empty file:

#!/bin/sh

# start pigpiod daemon
pigpiod -t 0 -f -l -s 10

# wait for pigpiod to initialize - indicated by 'pigs t' exit code of zero

count=10 # approx time limit in seconds
while ! pigs t >/dev/null 2>&1 ; do
	if [ $((count--)) -le 0 ]; then
		printf "\npigpiod failed to initialize within time limit\n"
		exit 1
	fi
#	printf "\nWaiting for pigpiod to initialize\n"
	sleep 1
done
printf "\npigpiod is running\n"

# load uinput module - required to be able to send keystrokes
# then set the permission to group writable, so you don't need to run sbpd with root permissions
sudo modprobe uinput
sudo chmod g+w /dev/uinput

# The full list of Jivelite key commands can be found here:
# https://github.com/ralph-irving/tcz-lirc/blob/master/jivekeys.csv

# button 1						# button-section, defines the GPIO and key-commands
SW1=5 							# GPIO (BCM, not Board)
SH1=KEY:KEY_1					# key-command for SHORT press (here: preset 1)
LO1=KEY:KEY_2					# key-command for LONG press (here: preset 2)
LMS1=250 						# milliseconds for long press

# button 2
SW2=6
SH2=KEY:KEY_3
LO2=KEY:KEY_4
LMS2=250

# button 3
SW3=13
SH3=KEY:KEY_5
LO3=KEY:KEY_6
LMS3=250

# button rotary 1
SW4=17
SH4=KEY:KEY_SPACE				# key-command for SHORT press(play/pause)
LO4=KEY:KEY_LEFTBRACE			# key-command for LONG press(special menu)
LMS4=250

# button rotary 2
SW5=12
SH5=KEY:KEY_ENTER				# key-command for SHORT press(enter, OK)
LO5=KEY:KEY_ESC					# key-command for LONG press(back)
LMS5=250

# CMD="sbpd -v -f /home/tc/sbpd_commands.cfg \
CMD="sbpd -v \
b,$SW1,$SH1,2,0,$LO1,$LMS1 \	# b=button, $SW1=switchnumber of button-section
b,$SW2,$SH2,2,0,$LO2,$LMS2 \
b,$SW3,$SH3,2,0,$LO3,$LMS3 \
b,$SW4,$SH4,2,0,$LO4,$LMS4 \
b,$SW5,$SH5,2,0,$LO5,$LMS5 \
e,22,27,VOLU,2 \				# e=encoder, 22 and 27 are GPIO
e,23,24,KEY:KEY_UP-KEY_DOWN,4 "	# e=encoder, 23 and 24 are GPIO

echo $CMD
$CMD > /dev/null 2>&1 &
  • Save your changes and exit nano (Ctrl+X and confirm by pressing y).
  • Make sbpd-script.sh executable:
sudo chmod +x /home/tc/sbpd-script.sh
Step 3 - User command in pCP web-gui
  • Go to pCP web interface and click [Tweaks] tab.
  • Scroll to section User commands and add
/home/tc/sbpd-script.sh
  • to user command #1 (bottom of the ‘Tweaks’ page), then click [Save].

usercommand

  • That’s it. After a reboot, your rotary encoders and pushbuttons should work as expected.

Additional hints

  • The script is an example. You can change the GPIO’s in “button sections” for your purpose.
  • For rotary encoders, edit the GPIO’s in the command section of the sbpd-script.sh.
  • If your rotary encoders work in wrong direction, swap the GPIO wiring.
  • Most rotary encoders have a pushbutton. You can use it to trigger a key command.
  • The numbers after SW1 – SW 5= are the GPIO of your RPi (see wiring table above).
  • Every button triggers two jive actions (short and long press, SH and LO).
  • The quantity of buttons is only limited by quantity of available GPIO’s.
  • The key command KEY:KEY_1 triggers a preset. For that purpose, you need to add presets in LMS Web interface for this player (settings/player/presets).
  • Only commands by rotary? Do not use Grid Skins. They need additional left/right key commands.

More information

The Software and Information is provided "as is" without warranty of any kind, either express or implied, including without limitation any implied warranties of condition, uninterrupted use, merchantability, fitness for a particular purpose, or non-infringement.
Raspberry Pi is a trademark of the Raspberry Pi Foundation.