As my use case is slightly different, I have a justboom amp hat connected to a Pi which also controls a Magic Mirror, I changed a bit of the functionality:
- The button turns the screen on/off (via MQTT)
- Changes via the rotary encoder are communicated over MQTT, and the program also listens on MQTT
MQTT commands supported:
- 'Mute', 'Unmute' and 'Toggle mute'
- 'Change volume' and 'Set volume'
This is implemented by making the already existing 'EasyMixer' a subclass of the paho.mqtt.Client. I also edited some files to work with python 3
The mute topic just takes a word (MUTE, UNMUTE or TOGGLE): mosquitto_pub -h localhost -t magicmirror/justboom/set/MUTE -m 'TOGGLE'
The volume topic takes a json object: mosquitto_pub -h localhost -t magicmirror/justboom/set/VOLUME -m '{"COMMAND": "SET", "VALUE": 55}'
Negative changes are supported: mosquitto_pub -h localhost -t magicmirror/justboom/set/VOLUME -m '{"COMMAND": "CHANGE", "VALUE": -5}'
The default rotary turn increment is used if not specified: mosquitto_pub -h localhost -t magicmirror/justboom/set/VOLUME -m '{"COMMAND": "CHANGE", "DIRECTION": "DOWN"}'
jb-rotary enables control of volume level via the rotary encoder and mute/unmute function via its push button.
- Login via SSH or via the console.
- Update the list of available software packages:
sudo apt-get update
- Run the following command and the JustBoom rotary and push button code will be configured and installed:
curl -sSL https://pisupp.ly/jb-rotarycode | sudo bash
The default settings for the script are:
- Start Volume = 0
- Volume increment/decrement steps = 1
- Rotary pins = 16,18 (Board notation)
- Button pin = 10 (Board notation)
Script usage:
Usage: jb_rotary [-sirtbv]
jb_rotary {-h|--help} Script usage information
-s --startvol start volume level
-i --volinc volume increments/decrements
-r --rotary rotary encoder pins
-t --type rotary encoder type ['standard', 'keyes']
-b --button button pin
Example:
sudo python jb-rotary.py -s 20 -i 5 Changes the starting volume and step increments
sudo python jb-rotary.py -r 19,21 -b 15 Remaps the rotary and the button pins
sudo python jb-rotary.py -t keyes Configure the rotary encoder as Keyes
Note that the default setting for the button requires that you disable the onboard UART. This is mostly required when using the rotary encoder with the JustBoom Amp HAT via the P2 connector. Check our main site JustBoom.co for the full pinout.
Since the Digi boards haven't got a volume control we need to create one for the script to work.
sudo nano /etc/asound.conf
Add the following contents:
pcm.justboom-softvol {
type softvol
slave.pcm "plughw:0"
control.name "SoftMaster"
control.card 0
}
pcm.!default {
type plug
slave.pcm "justboom-softvol"
}
Run this command which will test and CREATE the mixer control:
speaker-test -D justboom-softvol -c 2 -twav -l 1
Note that due to the fact that SoftMaster isn't a real control the mute doesn't behave as for the Amp and DAC cards. In the case of the Digi the volume will be set to zero on mute and will NOT go back to where it was before after pressing the button once again.
If you are using MPD you should change the configuration to the following one.
sudo nano /etc/mpd.conf
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
music_directory "/var/lib/mpd/music"
playlist_directory "/var/lib/mpd/playlists"
db_file "/var/lib/mpd/tag_cache"
log_file "/var/log/mpd/mpd.log"
pid_file "/run/mpd/pid"
state_file "/var/lib/mpd/state"
sticker_file "/var/lib/mpd/sticker.sql"
user "mpd"
bind_to_address "localhost"
input {
plugin "curl"
}
audio_output {
type "alsa"
name "JustBoom"
device "justboom-softvol"
mixer_type "software"
mixer_device "SoftMaster"
}
on the command line execute these two commands:
sudo systemctl stop [email protected]
sudo systemctl disable [email protected]
reboot the system.
on the command line execute these two commands:
sudo systemctl stop [email protected]
sudo systemctl disable [email protected]
and remove the following line from /boot/cmdline.txt
console=serial0,115200
reboot the system
Both the rotary pins and the button are configured to pull down. For example in the default configuration the pins will have to be connected as follows:
Rotary Left pin -> pin 16
Rotary Middle pin -> GND (pin 14)
Rotary Right pin -> pin 18
Button one pin -> pin 10
Button other pin -> GND (pin 9)
The rotary pins are configured to pull up and the button is configured to pull down. For example in the default configuration the pins will have to be connected as follows:
Rotary CLK -> pin 16
Rotary DT -> pin 18
Rotary SW -> pin 10
Rotary + -> 3V3 (pin 1)
Rotary GND -> GND (pin 14)
You can find the assembly steps for the standard rotary encoder on our website. You can find the standard rotary encoder on our site.
If you are planning on installing the rotary encoder on the JustBoom DAC HAT, check the FAQ on the website for additional details.
This is the configuration file for the JustBoom IR Remote to be used in conjunction with LIRC. A tutorial that guides you through the whole installation of LIRC and the remote configuration can be found via this link.
The smart remote appears to the OS as a normal HID device. If the distribution you are using already makes use of such devices like for the Kodi ones than the remote is entirely plug and play. Should you want to integrate it in your applications or create a plugin for a specific OS these are the hex codes for the various buttons:
Function Code Keymap
Power 0x30 KEY_POWER
Home 0x223 KEY_HOMEPAGE
Mute 0xE2 KEY_MUTE
Up 0x42 KEY_UP
Left 0x44 KEY_LEFT
OK 0x41 KEY_SELECT
Right 0x45 KEY_RIGHT
Down 0x43 KEY_DOWN
Menu 0x40 KEY_MENU
Back 0x224 KEY_BACK
Vol- 0xEA KEY_VOLUMEDOWN
Vol+ 0xE9 KEY_VOLUMEUP
The mouse mode is activated by pressing the button in between Vol-
and Vol+
. The pointer is controlled by the built in gyroscope.
In this mode the OK button changes function and becomes a mouse left button.
Function Code Keymap
OK 0x90001 BTN_LEFT
X <Range> REL_X
Y <Range> REL_Y
The remote will revert back to keyboard emulation by pressing one of the arrow buttons.
There are some issues with the OK and Menu buttons no longer working on Kodi based distros like LibreELEC. This is apparently caused by a kernel problem and can be fixed with the following workaround based on a forum post in LibreELEC by HiassofT.
Run the following script
curl -sSL https://pisupp.ly/smartremotefix | bash
then reboot the system
Create the following file
cat > /storage/.config/hwdb.d/70-local-keyboard.hwdbe << EOF
evdev:input:b0003v2252p0120*
KEYBOARD_KEY_c0041=enter
KEYBOARD_KEY_c0040=c
EOF
and run this command
udevadm hwdb --update && udevadm trigger -s input
finally reboot the system
JustBoomDigi.conf
enables passthrough DTS for surround systems. The file needs to be saved under /usr/share/alsa/cards
The pinout for the boards can be found on the JustBoom website or on Pinout.xyz
This list shows the various chips used and the I2C address where applicable: