Tag: DIY

  • Making a Digital Photo Frame out of an old Laptop LCD, Rasperry Pi and FrameOS

    Making a Digital Photo Frame out of an old Laptop LCD, Rasperry Pi and FrameOS

    I had an old Asus laptop that I was about to throw out, but it had a pretty decent 15.6″ FHD LCD panel that I thought would be useful, so I decided to turn it into a digital photo frame. I’m writing this blog post due to popular request, but this was done after I had already completed the frame, so not every step has photographs, regrettably.

    Bill of materials (in Singapore Dollars):

    1. Old LCD panel from a laptop, preferably 15.6-16″ – Recycle
    2. LCD driver board – $20-30
    3. 12V 2A power supply – $4-5
    4. IKEA RÖDALM Frame 40x30cm – $10.90
    5. Rapsberry Pi (3B is enough) – $60
    6. Short USB cable and HDMI cable for the Raspberry Pi – <$10
    7. Some competency/knowledge of Linux – Priceless
    8. Software: FrameOS – https://frameos.net/
    9. A server somewhere, or your laptop to run the FrameOS server
    10. (Optional) Some 3D printing design skills, and a 3D printer

    Total cost should be less than $120 to make this happen.

    Sourcing the LCD panel from an old laptop

    This project wouldn’t be financially feasible without an old LCD panel, so you’ll definitely need an old laptop to pull it out from.

    The first step is to remove the frame/bezel around the LCD panel. Unfortunately I no longer have the laptop to photograph this, but it is fairly simple: on most plastic laptops, you can either find small screw covers that when removed would expose screws that allow you to pry the bezel off, or some laptops rely fully on clips around the bezel so just start prying slowly – usually from the bottom works better.

    Once you remove the frame/bezel, you will see the LCD panel itself held by more screws. Carefully unscrew them – the panel is fragile, so be careful – and look behind the panel to identify the make and model of the panel. This is usually printed on a sticker or on a barcode.

    Back of an LCD panel. You can usually find the make and model on a sticker/label.

    Sourcing the Controller Board for the LCD

    Once you’ve identified the make and model, search on sites like AliExpress for a controller board for your panel. You’ll want a board that:

    1. Accepts HDMI input
    2. Has a USB port (this is needed to power the Raspberry Pi later)
    3. Accepts a standard 12V barrel jack power input

    These boards are fairly cheap, and typically run for around $20.

    The controller board I bought for my LCD panel.

    Power Supply

    To drive the controller board and LCD, you’ll also need a 12V power supply. I have a bunch of these lying around at home, and sometimes you might be able to get one off an old router or home security camera. I pulled mine off an old TP-Link camera.

    As for current rating, 12V x 1A (12W) is more commonly found and would work, but if you’re going to buy one, get at least 12V x 2A (24W).

    Example 12V 2A Power Supply with a Barrel Jack you can find on AliExpress.

    These cheap one from AliExpress can sometimes have questionable quality and ratings, so if you find one from an old reputable brand appliance – it would be better. A typical LCD panel takes about 7-10W & Rapsberry Pi takes around 2-5W, so unless everything is running at full load all the time, you should be keeping under 12W.

    The IKEA RÖDALM Frame 40x30cm

    I picked this specific frame because of its thickness to enclose the LCD panel, and this specific size because the height of the matboard matches the LCD panel (~20cm).

    For information, the 15.6″ 16:9 LCD’s viewable area measures roughly 34.5×19.4cm. Your panel might not be the same size, so please measure it.

    The width of the matboard is only 30cm, so it needs to be cut a little (~2.3cm more on each side).

    IKEA RÖDALM Frame 40x30cm with inner cutout of matboard measuring 30x20cm.

    I also learned later that there are special matboard knives to cut the 45 degree bevel, but I already used a regular penknive. Not that pretty though, but probably easy enough to just replace the frame in future.

    Mount the LCD on the Matboard

    Using a double-sided tissue tape (this works better than regular double sided tape), apply it around the perimeter of the LCD panel and adhere it to the matboard. This should keep it secure. The LCD panel is rather light, so it shouldn’t fall off.

    (Pics TBD)

    Connecting the Controller Board

    The next step is to connect the controller board to the LCD panel, and test it. Once you’ve confirmed the board works, it’s time to tape everything down and secure it.

    (Pics TBD)

    Printing a base for the Controller Board

    Frankly it’s rather hard to mount the controller board with all the solder pins sticking out of the bottom, so I made a simple 3D printed base for the controller board.

    3D Design of the Controller Board Base in Autodesk Fusion

    If you don’t have a 3D printer or don’t know how to design one, generous amount of foam tape might probably work.

    Mounting Components

    The controller board is attached to the 3D printed base with two M2.5 screws, and then the 3D printed base is attached to the back of the frame with double-sided tissue tape.

    I also attached the buttons – menu, power, up/down, left/right for the OSD to control screen brightness, contrast, etc. to the back of the frame.

    Back of frame showing attachments.

    Here, you’ll also see me holding the Raspberry Pi with my fingers because it’s not yet mounted. The white USB cable is short and tidy, but the HDMI cable is too long. I’ve ordered a short 15cm HDMI cable on AliExpress as well, for another few dollars. Once that is in, I’ll mount the Raspberry Pi too.

    Software Selection

    After experimenting with a bunch of software, including commercial with free plans and Open Source ones like DAKboard, Anthias, OpenFrame, etc. I settled on FrameOS. I won’t deep dive into why I picked it but quick summary is: DAKboard is powerful and nice, but you’ll really need to pay to get any proper use out of it. I found FrameOS (Open Source) the easiest and best for my purpose.

    How FrameOS Works

    FrameOS software comes in to parts: Server (aka Backend) and Client (aka Frame).

    The Backend can be deployed anywhere — your laptop, a NAS, a Proxmox VE server, a Mac Mini, etc. For the more technically inclined, it’s a Docker container running a Python3 web app & Redis.

    The Client is your frame which runs on regular Raspberry Pi OS. If you have ESP32 devices, it gets more interesting but that’s not covered here.

    Installing the FrameOS Backend

    Decide where you want to run the server. For this, I used my Proxmox VE server.

    Important: If you’re using a Linux VM, allocate at least 16GB of disk space because the Docker containers need disk headroom to extract. You’ll run out of disk space with something like 8GB.

    Run this command to install the FrameOS backend (in Linux):

    apt update && apt install curl
    bash <(curl -fsSL https://frameos.net/install.sh)

    This basically installs Docker, pulls and runs the container frameos/frameos.

    If you prefer other deployment methods, such as directly running the Docker container, you can read their documentation.

    Once your FrameOS is installed, you should be able to reach it at http://<FrameOS IP>:8989 from your browser. I’ll call this the FrameOS Web UI. Now, create your first user account via the Web UI, then come back to it later.

    Setting up the Rapsberry Pi

    The Rapsberry Pi needs nothing but a fresh install of Raspberry Pi OS Lite. DO NOT install the full OS with the GUI. You don’t need it.

    When flashing your microSD with the Raspberry Pi Imager, remember to configure your Wifi and SSH settings during the process to reduce the need to configure it again later.

    Once you’ve flashed the microSD, boot your Raspberry Pi, get its IP address and verify you can SSH to it.

    Then via SSH, run:

    sudo raspi-config

    Go to System Options > Admin Password, and disable sudo password. This will prevent issues later.

    Deploying the FrameOS Client

    From your FrameOS Web UI, add a new frame.

    1. Select Install over SSH.
    2. Enter SSH connection details for your Raspberry Pi.
    3. Select HDMI / Framebuffer as display driver.
    4. Click Add Frame.
    5. Click Full Deploy.

    The FrameOS Backend will SSH to your Rapsberry Pi and run the necessary shell commands to install the Client packages and turn your Rapsberry Pi into a digital frame.

    At this point, you might encounter some errors like I did – for some reason the SSH password needs to be entered again. Click on Settings on the left, and update the SSH password, then perform a Full Deploy again. You might still see an error, but don’t flip out. Click on Logs (on the left) and watch the installation progress.

    Once the deployment completes, the Raspberry Pi automatically reboots.

    You will see your frame boot up and show a black screen that says no active scene. This is when you’ll set up a scene.

    Set up a Scene

    From the FrameOS Web UI, select your newly deployed frame, and add a Scene to it. I picked the provided SD card image scene. Tweak the settings as necessary, then activate/deploy it to your frame. Also click on the kebab menu (3 vertical dots) and make it the boot scene.

    You can manage your assets by clicking on Assets on the left, and uploading photos into the folder specified when setting up the scene. The default is /srv/assets but it can contain a ton of other junk so I like to create a new subdirectory /srv/assets/photos and upload my photos there.

    Done!

    And that’s it – you have a working digital frame that can be remotely managed. One last point to note: you can turn off/shutdown the FrameOS server once the settings have been deployed. Have fun!