Skip to content

Instantly share code, notes, and snippets.

@aenniw
Last active July 17, 2018 20:04
Show Gist options
  • Save aenniw/e7ab4f6649fef496738b5b5985fed0ad to your computer and use it in GitHub Desktop.
Save aenniw/e7ab4f6649fef496738b5b5985fed0ad to your computer and use it in GitHub Desktop.
Show Volumio2 album thumbnail on ILI9341 based display.
#!/bin/bash
# DEPENDENCIES
# apt-get -y install fbi curl
# PINOUT: Display -> Raspberry Pi Zero
# BL -> pin 12 (GPIO 18)
# SCK -> pin 23 (GPIO 11)
# MISO -> pin 21 (GPIO 9)
# MOSI -> pin 19 (GPIO 10)
# CS -> pin 24 (GPIO 8)
# RST -> pin 22 (GPIO 25)
# D/C -> pin 18 (GPIO 24)
# VIN -> pin 17 (3.3v)
# GND -> pin 20 (GND)
# PINOUT: Display -> Orange Pi Zero
# BL -> pin 15 (GPIO 3)
# SCK -> pin 23 (GPIO 14)
# MOSI -> pin 19 (GPIO 15)
# CS -> pin 24 (GPIO 13)
# RST -> pin 11 (GPIO 1)
# D/C -> pin 13 (GPIO 0)
# VIN -> pin 2 (3.3v)
# GND -> pin 20 (GND)
VERBOSE=${VERBOSE:-false}
VOLUMIO_HOST="http://localhost:3000"
ALBUM_ART_FILE="/tmp/albumart.image"
DEFAULT_ALBUM_ART_FILE="${ALBUM_ART_FILE}.default"
FB=/dev/fb1
function hasBinary() {
for arg in $@; do
hash ${1} || ( echo "Missing binary ${1}"; exit 1);
done
}
function restApiGet() {
curl "${VOLUMIO_HOST}/api/v1/getstate" 2> /dev/null | jq -r "${1}"
}
function downloadAlbumArt() {
curl ${1} > ${2} 2> /dev/null
}
hasBinary fbi curl
lsmod | grep -q fbtft_device || \
modprobe fbtft_device custom name=fb_ili9341 gpios=reset:1,dc:0,led:3 speed=16000000 fps=25 rotate=90 busnum=1
# opi-zero modprobe fbtft_device custom name=fb_ili9341 gpios=reset:1,dc:0,led:3 speed=16000000 fps=25 rotate=90 busnum=1
# rpi-zero modprobe fbtft_device custom name=fb_ili9341 gpios=reset:25,dc:24,led:7 speed=16000000 bgr=1 rotate=90
LAST_TRACK='none'
test -f ${DEFAULT_ALBUM_ART_FILE} || \
downloadAlbumArt "${VOLUMIO_HOST}/albumart" ${DEFAULT_ALBUM_ART_FILE}
fbi -d ${FB} -T 1 -noverbose -a ${DEFAULT_ALBUM_ART_FILE} 2> /dev/null
while [[ true ]]; do
sleep 1
CUR_TRACK=`restApiGet '.title,.artist,.album'`
if [[ "${LAST_TRACK}" == "${CUR_TRACK}" ]]; then
[ "${VERBOSE}" == "true" ] && echo -e "$(date)\tSkipping no change."
continue
else
LAST_TRACK=${CUR_TRACK}
fi
STATUS=`restApiGet '.status'`
if [[ "${STATUS}" == "play" ]] || [[ "${STATUS}" == "pause" ]]; then
[ "${VERBOSE}" == "true" ] && echo -e "$(date)\tDownloading current albumart."
ALBUM_ART_URI=`restApiGet '.albumart'`
echo ${ALBUM_ART_URI} | grep "^/albumart?" && ALBUM_ART_URI="${VOLUMIO_HOST}${ALBUM_ART_URI}"
downloadAlbumArt ${ALBUM_ART_URI} ${ALBUM_ART_FILE}
fbi -d ${FB} -T 1 -noverbose -a ${ALBUM_ART_FILE} 2> /dev/null || LAST_TRACK=''
else
[ "${VERBOSE}" == "true" ] && echo -e "$(date)\tChanging to stock albumart."
fbi -d ${FB} -T 1 -noverbose -a ${DEFAULT_ALBUM_ART_FILE} 2> /dev/null
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment