How to build a WiFi picture frame with a Raspberry Pi

DIY a digital photo frame that streams photos from the cloud.
Register or Login to like
Vector, generic Raspberry Pi board

Digital picture frames are really nice because they let you enjoy your photos without having to print them out. Plus, adding and removing digital files is a lot easier than opening a traditional frame and swapping the picture inside when you want to display a new photo. Even so, it's still a bit of overhead to remove your SD card, USB stick, or other storage from a digital picture frame, plug it into your computer, and copy new pictures onto it.

An easier option is a digital picture frame that gets its pictures over WiFi, for example from a cloud service. Here's how to make one.

Gather your materials

  • Old TFT LCD screen
  • HDMI-to-DVI cable (as the TFT screen supports DVI)
  • Raspberry Pi 3
  • Micro SD card
  • Raspberry Pi power supply
  • Keyboard
  • Mouse (optional)

Connect the Raspberry Pi to the display using the cable and attach the power supply.

Install Raspbian

Download and flash Raspbian to the Micro SD card by following these directions. Plug the Micro SD card into the Raspberry Pi, boot it up, and configure your WiFi. My first action after a new Raspbian installation is usually running sudo raspi-config. There I change the hostname (e.g., to picframe) in Network Options and enable SSH to work remotely on the Raspberry Pi in Interfacing Options. Connect to the Raspberry Pi using (for example) ssh pi@picframe.

Build and install the cloud client

I use Nextcloud to synchronize my pictures, but you could use NFS, Dropbox, or whatever else fits your needs to upload pictures to the frame.

If you use Nextcloud, get a client for Raspbian by following these instructions. This is handy for placing new pictures on your picture frame and will give you the client application you may be familiar with on a desktop PC. When connecting the client application to your Nextcloud server, make sure to select only the folder where you'll store the images you want to be displayed on the picture frame.

Set up the slideshow

The easiest way I've found to set up the slideshow is with a lightweight slideshow project built for exactly this purpose. There are some alternatives, like configuring a screensaver, but this application appears to be the simplest to set up.

On your Raspberry Pi, download the binaries from the latest release, unpack them, and move them to an executable folder:

wget https://github.com/NautiluX/slide/releases/download/v0.9.0/slide_pi_stretch_0.9.0.tar.gz
tar xf slide_pi_stretch_0.9.0.tar.gz
mv slide_0.9.0/slide /usr/local/bin/

Install the dependencies:

sudo apt install libexif12 qt5-default

Run the slideshow by executing the command below (don't forget to modify the path to your images). If you access your Raspberry Pi via SSH, set the DISPLAY variable to start the slideshow on the display attached to the Raspberry Pi.

DISPLAY=:0.0 slide -p /home/pi/nextcloud/picframe

Autostart the slideshow

To autostart the slideshow on Raspbian Stretch, create the following folder and add an autostart file to it:

mkdir -p /home/pi/.config/lxsession/LXDE/
vi /home/pi/.config/lxsession/LXDE/autostart

Insert the following commands to autostart your slideshow. The slide command can be adjusted to your needs:

@xset s noblank
@xset s off
@xset -dpms
@slide -p -t 60 -o 200 -p /home/pi/nextcloud/picframe

Disable screen blanking, which the Raspberry Pi normally does after 10 minutes, by editing the following file:

vi /etc/lightdm/lightdm.conf

and adding these two lines to the end:

[SeatDefaults]
xserver-command=X -s 0 -dpms

Configure a power-on schedule

You can schedule your picture frame to turn on and off at specific times by using two simple cronjobs. For example, say you want it to turn on automatically at 7 am and turn off at 11 pm. Run crontab -e and insert the following two lines.

0 23 * * * /opt/vc/bin/tvservice -o
0 7 * * * /opt/vc/bin/tvservice -p && sudo systemctl restart display-manager

Note that this won't turn the Raspberry Pi power's on and off; it will just turn off HDMI, which will turn the screen off. The first line will power off HDMI at 11 pm. The second line will bring the display back up and restart the display manager at 7 am.

Add a final touch

By following these simple steps, you can create your own WiFi picture frame. If you want to give it a nicer look, build a wooden frame for the display.

Manuel completed his studies in applied computer science with a Master's degree in 2013 in Heidelberg, Germany and started working as a software developer shortly thereafter. He is interested in working with and combining all kinds of technology to build new cool things, striving to make lives (including his own) easier.

9 Comments

Thanks for article and pointing out NextCloud. How safe and reliable is their software?

Hi Manuel,

Thanks for your share of the picture frame build. I've been looking for a secure way to do this for a while.

That said, I'm stuck on the auto-start for the slideshow. Any troubleshooting suggestions you might be able to offer would be appreciated.

Thanks, Quantz

Hi,

great to see you're trying it out! What is the issue you are seeing?
What operating system are you using on the Raspberry Pi? Mine is running on raspbian stretch with the configuration described in the article.

Kind regards,
Manuel

In reply to by Quantz

Hi Manuel,

Thanks for your response and your willingness to help. I am running a RPi 3 Model B with this Stretch image installed from NOOBS 3.0.0:

Linux picframe 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

I have followed all of the instructions in your tutorial with the exception of configuring the Power-On Schedule. Also, I have verified the presence of the Autostart file in the appropriate directory:

/home/pi/.config/lxsession/LXDE/autostart

The main issue is that on reboot, the slide show does not start. The slide show does, however, work if I enter either the command or the command in Terminal.

Thank you again! -Quantz

In reply to by Manuel Dewald

Manuel,

The slide show commands I tried to post earlier are:

DISPLAY=:0.0 slide -p /home/pi/nextcloud/picframe

slide -p -t 60 -o 200 -p /home/pi/nextcloud/picframe

-Quantz

In reply to by Quantz

Please make sure the contents of /etc/lightdm/lightdm.conf and /home/pi/.config/lxsession/LXDE/autostart look as described in the article. Also, please ensure no xscreensaver is installed.
If this doesn't help, try using /home/pi/.config/lxsession/LXDE-pi/autostart instead of /home/pi/.config/lxsession/LXDE/autostart

As a fall-back you can use the following script in a cronjob every minute or so to start the slideshow: https://github.com/NautiluX/slide/blob/master/sbin/run_once.sh
The parameters should be the same as for the slide binary.

In reply to by Quantz

Hi again Manuel,

Changing the directory name to LXDE-pi did the trick. Thank you again very much for all of your assistance. I've learned a lot through the process of getting this project up and running.

Cheers, Quantz

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.