Pocket piCorePlayer Streamer

Braklet 4 August 2025 pCP 10.0.0 Projects  •

Overview

Pocket pCP Summary, tying the setup and configuration for anyone else who’d like a small battery operated piCorePlayer streamer with a working UI.

I’m not covering pCP basics, like Wifi setup (multiply documented already). But I will cover general purpose information revealed in this thread that I couldn’t easily find via Web search.

Pocket piCorePlayer Streamer

Components

Linking USA vendors, but there are non-USA sources for all of these as well.

Assembly

Generally straightforward, but since the battery board controls and powers the RPi02W via non-spring loaded bottom contact pins, you MUST screw the RPi02W onto the board with the included screws, and/or standoffs.

I’m ass-u-ming that anybody reading this knows how to set up a micro SD card with piCorePlayer, including mandatory Wifi configuration via wpa_supplicant.conf.

The DAC shim PCB is thinner than usual, and is designed for a friction fit on the header pins. This makes it a little tricky to press onto the RPi02W header. Try to keep it straight and be careful not to bend it too much.

The button display goes on top of the RPi02W header. The female display header is thin, so it won’t press down fully on the RPi02W header, but this leaves plenty of clearance between all 3 components.

Insert a fully charged 18650 cell into the battery board holder, minding the polarity marks. You can only use flat top cells as space is extremely limited. Even the flat top cells are a very tight fit, so be very careful and be sure to press it in FLAT. If you push it in at an angle, you’ll probably break the plastic carrier.

You can now boot the RPi02W by pressing the battery board’s power button.

Info

You can turn power off by holding the button down for a few seconds.

When board power is on, note the 4 battery level LEDs on the side of the battery board.

Configuration

Use the pCP HTTP interface to enable SSH, so that you can edit configuration files directly. I prefer the default vi editor, but pCP supports a nano extension for others.

The general procedure for directly modifying configuration files is:

  1. SSH to the RPi02W.
  2. Use “m1” to write mount the boot partition.
  3. Use “c1” to change to the /mnt/mmcblk0p1 directory.
  4. Edit and save your configuration files.
  5. If you modified files in the ROOT partition (i.e. /home/tc), then back up your changes and reboot with the new configuration via “pcp br”.

Audio

It’s a good idea at this point to focus on making sure your RPi02W and DAC can stream music from your LMS. You’ll need to set up the audio device via Web interface Squeezelite Settings, select Hifiberry DAC Zero/MiniAMP. I prefer to edit config.txt as an alternative to the Web interface.

The RPi02W doesn’t support a headphone jack, so disabling onboard audio avoids worthless error reports on the boot screen.

#dtparam=audio=on
dtoverlay=hifiberry-dac

Don’t proceed with display and control setup until your audio is working.

Display

Setup the boot screen by adding the following parameters to cmdline.txt. Note that the boot directives must all be on ONE line, with spaces separating each directive. Don’t terminate the line with any carriage returns and/or line feeds.

fbcon=map:10 fbcon=font:VGA8x16

Setup the graphic display by adding config.txt driver configuration specific to your particular device. (I.e. you need to know which GPIO lines it uses!) Here’s what works with my Waveshare board:

dtoverlay=st7789v-spi,dc_pin=25,reset_pin=27,cs=0,backlight=24,rotation=90
gpio=27=op,dh

First line sets up the st7789v-spi driver, identifying each GPIO line used by the display. Second line drives GPIO 27 high at boot. The ST7789 device won’t function unless the reset line is held high.

Refer to https://www.raspberrypi.com/documentation/computers/config_txt.html for details about the gpio directive.

Refer to the driver overlay README for configuration details:

Name: st7789v-spi
Info: Overlay for ST7789V LCD via SPI using tinydrm driver.
Load: dtoverlay=st7789v-spi,<param>=<val>
Params: speed SPI bus speed (default 3200000)
          rotation Display rotation (0, 90, 180 or 270; default 0)
          width Display width (default 240)
          height Display height (default 240)
          col_offset Display column offset (default 0)
          row_offset Display row offset (default 0)
          dc_pin GPIO pin for D/C (default 9)
          reset_pin GPIO pin for RESET (Default Unused)
          cs SPI chip select 0=CE0,1=CE1 (default 1)
          backlight GPIO pin for the backlight (default 13)

You can also find that driver explanation on the pCP device:

/mnt/mmcblk0p1/overlays/README

or in the kernel code repository:

https://github.com/piCorePlayer/linux

Direct link to our current kernel:

https://github.com/piCorePlayer/linux/blob/rpi-6.6.67-pcpPatched/arch/arm/boot/dts/overlays/README

Jivelite

The display is now enabled, but won’t do anything until you use the pCP Web interface to install the Jivelite libraries.

Head to the Tweaks page, and install Jivelite or Jivelite-Vis. (Both worked for me, and appeared identical in function on this tiny screen. Jivelite-Vis is under active development, so I stuck with it.)

You’ll have to change the Frame Buffer to /dev/fb1 . Leave everything else as defaults.

Head to Main Page -> Extensions, and load the pcp-jivelite_default-qvga240squareskin.tcz package.

Once you reboot, you should see the piCorePlayer splash screen, followed by the Set Language screen.

Joystick/Button Control

Unfortunately, my Waveshare display connects two control lines to GPIO lines required for DAC audio. This means that Joystick Down and KEY1 are unavailable for use. I think I’ve come up with a reasonable UI with the controls that remain, but you can always customize your own button interface by editing the appropriate script.

Key ID Short Press Long Press
KEY1 N/A N/A
KEY2 UP Now Playing
KEY3 DOWN BACK
JS UP PAUSE/PLAY Player soft POWER
JS DOWN N/A N/A
JS LEFT LEFT Jump Rew (play previous song)
JS RIGHT RIGHT Jump Fwd (play next song)
JS PRESS ENTER BACK

All Jivelite key controls are documented here:

Head to Main Page -> Extensions, and load the pcp-sbpd.tcz package.

SSH into your RPi02W, and create a new button configuration script /home/tc/sbpd-script.sh. Make it executable:

touch /home/tc/sbpd-script.sh
chmod +x /home/tc/sbpd-script.sh

Here’s my current button script:


#!/bin/sh

# 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 as root
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

# KEY1 (SHARES GPIO WITH AUDIO!)
#SW1=21 # GPIO pin number
#SH1=KEY:KEY_UP # command for SHORT press (= up)
#LO1=KEY:KEY_SPACE # command for LONG press (= pause)
#LMS1=250 # milliseconds for long press

# KEY2
SW2=20
SH2=KEY:KEY_UP # = up
LO2=KEY:KEY_N # = go home/now playing
LMS2=250

# KEY3
SW3=16
SH3=KEY:KEY_DOWN # = down
LO3=KEY:KEY_ESC # = back
LMS3=250

# joystick UP
SW4=6
SH4=KEY:KEY_SPACE # = pause
LO4=KEY:KEY_POWER # = power
LMS4=250

# joystick DOWN (SHARES GPIO WITH AUDIO!)
#SW5=19
#SH5=KEY:KEY_DOWN
#LO5=KEY:KEY_ESC
#LMS5=250

# joystick LEFT
SW6=5
SH6=KEY:KEY_LEFT # = left
LO6=KEY:KEY_Z # = jump rew
LMS6=250

# joystick RIGHT
SW7=26
SH7=KEY:KEY_RIGHT # = right
LO7=KEY:KEY_B # = jump fwd
LMS7=250

# joystick PRESS
SW8=13
SH8=KEY:KEY_ENTER # = enter
LO8=KEY:KEY_ESC # = back
LMS8=250

# SW1 and SW5 conflict with DAC GPIO
#b,$SW1,$SH1,2,0,$LO1,$LMS1 \
#b,$SW5,$SH5,2,0,$LO5,$LMS5 \

CMD="sbpd -v \
b,$SW2,$SH2,2,0,$LO2,$LMS2 \
b,$SW3,$SH3,2,0,$LO3,$LMS3 \
b,$SW4,$SH4,2,0,$LO4,$LMS4 \
b,$SW6,$SH6,2,0,$LO6,$LMS6 \
b,$SW7,$SH7,2,0,$LO7,$LMS7 \
b,$SW8,$SH8,2,0,$LO8,$LMS8"

echo $CMD
$CMD > /dev/null 2>&1 &

Now in the Web UI, head to Tweaks -> User Commands. Add your script to one of the User Command slots:

/home/tc/sbpd-script.sh

Make sure you back up your edits to persistent storage via “pcp br” or through the Web interface!

Reboot and the buttons should now function.

Enjoy!

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.