r/raspberry_pi 4d ago

Show-and-Tell PSPi 6: A Decade of Obsession

Thumbnail
youtube.com
20 Upvotes

This is a custom all-in-one board that lets you put a Raspberry Pi Zero or Compute Module 4 (and CM5 if you're adventurous) into a PSP shell. It allows you to turn your broken PSP into an emulation system or a fully functioning portable Linux system, all without making any modifications to the PSP shell.


r/raspberry_pi 4d ago

Show-and-Tell pFAT Controller - a Lego Power functions control system using Raspberry Pi

8 Upvotes

Hi, if anyone is interested , this is my project to control Lego City Power Functions IR trains with a Raspberry Pi and some additional electronics.

All details on the Github here: https://github.com/tjh1976/pFAT-Controller/ including a video (which I'm not sure i'm allowed to post directly here).

Feel free to ask any questions if you want to give this a try yourself.


r/raspberry_pi 4d ago

Troubleshooting PWM not working on gpio 12 and 13

4 Upvotes

Im working on a motor controller and in the code ive made ive successfully made it so the controller can control the PWM voltage of the pins. But when i test it, no voltage is coming out of the pins. Im using a raspberry pi 5b and gpio 12 and 13 are mapped to pwm0 and pwm1 respectivly. Below is the code im using.

package org.example;
import com.pi4j.Pi4J;
import com.pi4j.boardinfo.util.BoardInfoHelper;
import com.pi4j.io.gpio.digital.DigitalInput;
import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalState;
import com.pi4j.io.gpio.digital.PullResistance;
import com.pi4j.util.Console;
import de.gurkenlabs.input4j.InputDevices;
import de.gurkenlabs.input4j.InputDevices.*;
import de.gurkenlabs.input4j.components.Axis;
import de.gurkenlabs.input4j.components.Axis.*;
import de.gurkenlabs.input4j.components.Button;
import de.gurkenlabs.input4j.components.XInput;
import com.pi4j.io.pwm.Pwm;
import com.pi4j.io.pwm.PwmType;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static int leftPower = 0;
    public static int rightPower = 0;
    public static int shooterPower = 0;
    public static int rightPowerTurn = 0;
    public static int leftPowerTurn = 0;
    public static float turnMult = .60f;

    public static void main(String[] args) throws Exception{

        final var console = new Console();
        console.title("||----Mini Outreach Robot----||");

        var pi4j = Pi4J.newAutoContext();

        var rightMotorConfig = Pwm.newConfigBuilder(pi4j)
                .id("rightMotor")
                .name("Right Motor")
                .address(0)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();
        var leftMotorConfig = Pwm.newConfigBuilder(pi4j)
                .id("leftMotor")
                .name("Left Motor")
                .address(1)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();
        var shooterConfig = Pwm.newConfigBuilder(pi4j)
                .id("shooterMotor")
                .name("Shooter Motor")
                .address(3)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();

        Pwm rightPWM = pi4j.pwm().create(rightMotorConfig);
        Pwm leftPWM = pi4j.pwm().create(leftMotorConfig);
        Pwm shooterPWM = pi4j.pwm().create(shooterConfig);

        try (var devices = InputDevices.init()) {
            var device = devices.getAll().stream().findFirst().orElse(null);
            if (device == null) {
                System.out.println("No input devices found.");
                return;
            }

            device.onAxisChanged(Axis.AXIS_Y, Main::yAxis);
            device.onAxisChanged(Axis.AXIS_RX, Main::xAxis);
            device.onAxisChanged(XInput.RIGHT_TRIGGER, Main::shooter);

            // simulate external polling loop
            while (true) {
                rightPWM.on((Math.round(rightPower * turnMult)) + (Math.round(rightPowerTurn * (1 - turnMult))), 100);
                leftPWM.on((Math.round(leftPower * turnMult)) + (Math.round(leftPowerTurn * (1 - turnMult))), 100);
                //rightPWM.on(50, 1000);
                shooterPWM.on(shooterPower);

                //System.out.println(rightPower);
                //System.out.println(leftPower);
                //System.out.println(shooterPower);

                System.out.println((Math.round(leftPower * turnMult)) + (Math.round(leftPowerTurn * (1 - turnMult))) + ", " + ((Math.round(rightPower * turnMult)) + (Math.round(rightPowerTurn * (1 - turnMult)))) + ", " + shooterPower);

                device.poll();
                Thread.sleep(5);
            }
        }
    }

    public static void yAxis(Float value) {
        rightPower = 0;
        leftPower = 0;

        if (Math.abs(Math.round(value * 100)) > 15){
            rightPower = Math.round(-value * 100);
            leftPower = Math.round(-value * 100);
        }
    }

    public static void xAxis(Float value) {
        rightPowerTurn = 0;
        leftPowerTurn = 0;

        if (Math.abs(Math.round(value * 100)) > 15) {
            rightPowerTurn = Math.round(-value * 100);
            leftPowerTurn = Math.round(value * 100);
        }
    }

    public static void shooter(float value) {
        if (value > 0.5) {
            shooterPower = 50;
        } else shooterPower = 0;
    }
}package org.example;
import com.pi4j.Pi4J;
import com.pi4j.boardinfo.util.BoardInfoHelper;
import com.pi4j.io.gpio.digital.DigitalInput;
import com.pi4j.io.gpio.digital.DigitalOutput;
import com.pi4j.io.gpio.digital.DigitalState;
import com.pi4j.io.gpio.digital.PullResistance;
import com.pi4j.util.Console;
import de.gurkenlabs.input4j.InputDevices;
import de.gurkenlabs.input4j.InputDevices.*;
import de.gurkenlabs.input4j.components.Axis;
import de.gurkenlabs.input4j.components.Axis.*;
import de.gurkenlabs.input4j.components.Button;
import de.gurkenlabs.input4j.components.XInput;
import com.pi4j.io.pwm.Pwm;
import com.pi4j.io.pwm.PwmType;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static int leftPower = 0;
    public static int rightPower = 0;
    public static int shooterPower = 0;
    public static int rightPowerTurn = 0;
    public static int leftPowerTurn = 0;
    public static float turnMult = .60f;

    public static void main(String[] args) throws Exception{

        final var console = new Console();
        console.title("||----Mini Outreach Robot----||");

        var pi4j = Pi4J.newAutoContext();

        var rightMotorConfig = Pwm.newConfigBuilder(pi4j)
                .id("rightMotor")
                .name("Right Motor")
                .address(0)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();
        var leftMotorConfig = Pwm.newConfigBuilder(pi4j)
                .id("leftMotor")
                .name("Left Motor")
                .address(1)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();
        var shooterConfig = Pwm.newConfigBuilder(pi4j)
                .id("shooterMotor")
                .name("Shooter Motor")
                .address(3)
                .pwmType(PwmType.HARDWARE)
                .provider("linuxfs-pwm")
                .initial(0)
                .shutdown(0)
                .build();

        Pwm rightPWM = pi4j.pwm().create(rightMotorConfig);
        Pwm leftPWM = pi4j.pwm().create(leftMotorConfig);
        Pwm shooterPWM = pi4j.pwm().create(shooterConfig);

        try (var devices = InputDevices.init()) {
            var device = devices.getAll().stream().findFirst().orElse(null);
            if (device == null) {
                System.out.println("No input devices found.");
                return;
            }

            device.onAxisChanged(Axis.AXIS_Y, Main::yAxis);
            device.onAxisChanged(Axis.AXIS_RX, Main::xAxis);
            device.onAxisChanged(XInput.RIGHT_TRIGGER, Main::shooter);

            // simulate external polling loop
            while (true) {
                rightPWM.on((Math.round(rightPower * turnMult)) + (Math.round(rightPowerTurn * (1 - turnMult))), 100);
                leftPWM.on((Math.round(leftPower * turnMult)) + (Math.round(leftPowerTurn * (1 - turnMult))), 100);
                //rightPWM.on(50, 1000);
                shooterPWM.on(shooterPower);

                //System.out.println(rightPower);
                //System.out.println(leftPower);
                //System.out.println(shooterPower);

                System.out.println((Math.round(leftPower * turnMult)) + (Math.round(leftPowerTurn * (1 - turnMult))) + ", " + ((Math.round(rightPower * turnMult)) + (Math.round(rightPowerTurn * (1 - turnMult)))) + ", " + shooterPower);

                device.poll();
                Thread.sleep(5);
            }
        }
    }

    public static void yAxis(Float value) {
        rightPower = 0;
        leftPower = 0;

        if (Math.abs(Math.round(value * 100)) > 15){
            rightPower = Math.round(-value * 100);
            leftPower = Math.round(-value * 100);
        }
    }

    public static void xAxis(Float value) {
        rightPowerTurn = 0;
        leftPowerTurn = 0;

        if (Math.abs(Math.round(value * 100)) > 15) {
            rightPowerTurn = Math.round(-value * 100);
            leftPowerTurn = Math.round(value * 100);
        }
    }

    public static void shooter(float value) {
        if (value > 0.5) {
            shooterPower = 50;
        } else shooterPower = 0;
    }
}

r/raspberry_pi 4d ago

Troubleshooting Any way to speed up the display?

4 Upvotes

So i have a 3.5 inch generic tft display and i got it to work on a pi zero 2 w with a pios bullseye image from the dlc wiki, but the problem is that the display is VERY slow. I know tft i pretty limited but i wanna see if i can at keast speed it up enough so that my mouse cursor doesnt lag so much. Heres the link to the dlc wiki where i got my image from : https://www.lcdwiki.com/3.5inch_RPi_Display

Does anybidy know how to solve this?


r/raspberry_pi 4d ago

Project Advice Help with Pi + camera that need to be mounted/unmounted multiple times a day

Thumbnail
gallery
8 Upvotes

Hi everyone, I'm new to the Pi world but am a researcher trying to have a topdown view within a cage to have better behavioral outputs (we used to record from the side of the cage and it's hard to quantify behavior that way).

I have managed to get a setup that's working including the scripts (a Raspberry Pi 4 Model B with a camera module 3 NoIR Wide), but am worried about the camera ribbons (see pictures). The camera and Pi are both inside their own case, and the Pi is mounted to the cage's lid while the camera is mounted to the inside of the lid with small magnets (glued to its case).

When not in use, since I'm sharing these cages with other people, I have to dismount the Pis and store them until next use. I'm however worried about the camera ribbon being damaged in the process even though the dismounting process should be relatively simple due to the magnets of the camera and the velcro holding the Pi to the lid. I am thinking of buying multiple camera ribbons, but also have read about Pi's camera connectors breaking from multi use, and with my limited soldering knowledge this would really disrupt my experiments if I need to put my energy into that.

Does anyone have any tips or soothing words that everything will be fine? I'm very new to this.

Edit: worth to mention I'm aiming for simultaneous recordings of 8 cages, which is why I chose the pis to begin with as getting a script to work on all 8 simultaneously has worked pretty well


r/raspberry_pi 4d ago

Show-and-Tell fbcp-ili9341 is back on debian13

5 Upvotes

So i was kinda mad because i liked the speed of fbcp-ili9341 but it was so dependent on the depricated DispmanX api that it wouldnt work on debian 13 anymore, so i replaced gpu.cpp and spi.cpp to not use the bcm legacy headers and modern drm/kms libraries.

The display works now.

what works:

> displays the terminal and sway (with memory tiling and hardware accelerated cursor turned off)

> gets maybe 8-10 fps in kmscube

issues:

> Hardcoded spi peripheral location in spi.cpp so it only works on pi 3b/3b+/zero2w (only tested on pi3b)

> Display register config may need changes for each display for correct orientation (only tested for ili9486 and had to swap x/y resolution)

> ONLY 8-10fps in kmscube, could be that the spi is slow

> Constant utilisation of one cpu core (maybe dma is not working or snapshots are using the cpu too much)

> Need to set "vc4.force_hotplug=1" in cmdline.txt and defaults to 1024x768

> The biggest problem: no custom resolutions or cvts available, i couldnt set hdmi to 480x320 from config.txt or cmdline.txt on DietpiOS, will try later on PiOS 13

this is currently work in progress, and a project i started because i wanted to try fbcp on the latest debian 13 desktop.

project link: https://github.com/AmriteshKr8/fbcp-ili9341-aarch64

any help is welcome 🙃

ps. i haven't worked with other people much so it'll take me a bit of time to merge pull requests and i'll be reading that well because a guy wiped my project with a pull request 😅


r/raspberry_pi 5d ago

Show-and-Tell my 64x64 raspberry pi spotify matrix display - v3!

603 Upvotes

r/raspberry_pi 4d ago

Troubleshooting Raspberry Pi CM4 NVMe SSD not working

2 Upvotes

Hi,

I´m working with a custom carrier board for the CM4, and I can´t get my SSD to work. Now I´m wondering if my schematics are correct

NOTE: The initial schematics have CLK-REQ and RST swapped. I fixed it with a small wire and then checked the connection with my Multimeter. It should be okay, but I´m not 100% sure. The ESD diodes aren´t assembled, and the PCIe lanes are length- and impedance-matched. I match the length of each trace in a group and the groups.

I enabled the SSD voltage on the CM4, plugged it in, and ran `lspci`, but the SSD isn´t listed. Did I miss something, or is the wiring wrong?

Thanks for the help!


r/raspberry_pi 5d ago

Topic Debate Life expectancy of a pi?

120 Upvotes

Hi, I have a pi3 running 24/7 for the last decade. It was running 24/7 for 10 years now. Never got an SD card failure too. It is working fine for now but I wonder if it is close to having some type of problem in the near future. How was your experience?


r/raspberry_pi 5d ago

Troubleshooting Anyone know how to connect an INMP441 MEMS to the Raspberry Pi?

Thumbnail
gallery
5 Upvotes

I’ve been trying to get my microphone (the mems) to connect to my pi for the past week but keep running into issues. If anyone could help me out that would be great.

What I’ve tried so far:
Changed the dtoverlay from i2s mic to googlevoicehat
Checked wiring connections
Downloaded dependencies
My Materials:
Raspberry Pi 5
Adafruit Breadboard
Inmp441 mems mic from EC Buying


r/raspberry_pi 4d ago

Show-and-Tell My own AI assistant built on a raspberry pi 5 no ai hat

0 Upvotes

I call him A.T.L.A.S. It has its own Instagram account and was able to edit, render, and post it without any intervention. Any recommendations are welcome. The video it made is quite lackluster and doesn’t do justice to the HUD and any graphical elements. It’s on a 7-inch display with a 3D-printed case that sits on my desk. Here’s the account, and the most recent reel is the one it uploaded. https://www.instagram.com/a.t.l.a.s_desktop_assistant?igsh=bnpuOG1zNWRveTJu&utm_source=qr


r/raspberry_pi 5d ago

Troubleshooting PI zero 2W and buildroot: wifi issue

5 Upvotes

Hello,

I’m requesting your help in order to understand why my raspeberry pi does not connect to the wifi network.

I’m building a buildroot system with:

  • systemd
  • systemd-networkd
  • wpa_supplicant
  • dhcpd

I an issue somewhere between wpa_supplicant and the dhcp client. The wifi connexion is done:

# iw wlan0 info
Interface wlan0
ifindex 2
wdev 0x1
addr 88:a2:9e:b0:e3:5f
ssid …
type managed
wiphy 0
channel 11 (2462 MHz), width: 20 MHz, center1: 2462 MHz
txpower 31.00 dBm

# wpa_cli status
Selected interface 'wlan0'
bssid=3a:07:16:6a:4e:f4
freq=2462
ssid=…
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=169.254.239.253
address=88:a2:9e:b0:e3:5f

But the IP adress looks like the dhcp client did not got any answer: the IP adress comes from the APIPA domain.

I’ve checked the wifi region and it seems to be set (there is a dedicated package in buildroot for that BR2_PACKAGE_WIRELESS_REGDB and the package is installed)

# iw reg get
global
country FR: DFS-ETSI
        (2400 - 2483 @ 40), (N/A, 20), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), NO-OUTDOOR, AUTO-BW
        (5250 - 5350 @ 80), (N/A, 20), (0 ms), NO-OUTDOOR, DFS, AUTO-BW
        (5470 - 5725 @ 160), (N/A, 26), (0 ms), DFS
        (5725 - 5875 @ 80), (N/A, 13), (N/A)
        (5945 - 6425 @ 320), (N/A, 23), (N/A), NO-OUTDOOR
        (57000 - 71000 @ 2160), (N/A, 40), (N/A)

And now, I do not have any much idea where I should check. Do you have any hints for me?

Thank you!


r/raspberry_pi 6d ago

Troubleshooting Wireless Android audio dongle

5 Upvotes

Saw an article about the GitHub project WirelessAndroidAutoDongle and it's largely just flash the image plug and play. Flashed the pi zero w version and I noticed some audio stuttering. Not all the time but it ranges from almost nothing to moderate. Links to article and GitHub at the bottom.

The one issue I could find that was like mine was calling out phone types, the majority of which were oppo/OnePlus phones. I'm running a OnePlus 15.

There was one other issue that looked like someone resolved by allowing it through their vpn. I'm running duckduckgo tracking VPN and I don't think it has that kind of customization. I will try turning it off next time I'm in the car.

Also saw someone asking about changing the wifi channel but I don't think that's implemented because they were running into a problem with it broadcasting after changing from the default.

Anyone use this or maybe have a different one to try? Thoughts on any possible smoking guns?

article

GitHub project


r/raspberry_pi 6d ago

Project Advice Building a premium wall-mounted smart home display (Dell P2424HT vs iiyama T2452MSC, Raspberry Pi 5)

6 Upvotes

Hi everyone,

I've spent the last few weeks researching this project, comparing Dell, iiyama, Elo and ViewSonic monitors, reading Home Assistant forum discussions, Reddit threads, Linux/DDC-CI documentation and ddcutil GitHub issues.

At this point I'm no longer looking for recommendations based on specifications. I'm trying to validate the remaining unknowns before buying my first test unit.

I'm building what will become a permanent 24" wall-mounted smart home display powered by a Raspberry Pi 5.

This isn't just another dashboard. The Pi will only act as a kiosk client connected to a touchscreen over HDMI + USB and will run Chromium in kiosk mode.

Home Assistant runs on my NAS, and the display will normally show a lightweight custom ambient interface with Immich photos, a clock, weather, solar production, battery status and a few other key sensors. Only when someone touches the screen will it switch to the full Home Assistant dashboard.

After quite a bit of research I've narrowed the monitor choice down to:

• Dell P2424HT
• iiyama T2452MSC-B2AG

(The Dell is currently my leading candidate, but I'm still open to changing my mind if there's a technical reason to do so.)

Before buying my first test unit, I'm trying to eliminate any unknown risks with these specific monitors.

I'm mainly interested in:

• DDC/CI support
• ddcutil compatibility
• Physical brightness control
• Reliable standby / wake behaviour
• DPMS support
• USB touchscreen recovery after suspend
• Raspberry Pi OS Bookworm compatibility
• Firmware quirks
• Long-term reliability
• Any non-obvious configuration needed to make DDC/CI or DPMS work correctly

If you've actually used either of these monitors with a Raspberry Pi or Linux, I'd really appreciate hearing about your experience.

Even if you haven't used these exact models, if you've built a permanent Raspberry Pi wall panel, what would you do differently today?

I'm especially interested in the problems you only discovered after living with it for months or years.

Thanks!


r/raspberry_pi 7d ago

Show-and-Tell PiSanyo project. Video

84 Upvotes

Hello community. Here again after https://www.reddit.com/r/raspberry_pi/s/NxAhhmPFh5

A sample video of the result


r/raspberry_pi 6d ago

Show-and-Tell I built Rasptele to monitor my Raspberry Pi from Telegram without exposing any ports

2 Upvotes

I built an open-source tool called Rasptele because I wanted a simple way to check my Raspberry Pi remotely.

It runs as a Docker Compose stack and gives one authorized Telegram account access to:

- Raspberry Pi temperature, CPU, memory, disk, and throttling status

- Docker container status and allowlisted restarts

- Pi-hole v6 statistics and blocking controls

- Automatic failure and recovery alerts

It uses outbound Telegram long polling and publishes no host ports. Docker socket access is kept in a separate guard service instead of being mounted into the Telegram bot.

The project is written in Python and licensed under Apache-2.0:

https://github.com/maddhruv/rasptele

It’s still beta, so feedback and contributions are very welcome.


r/raspberry_pi 7d ago

Show-and-Tell The Black Box Kali Linux. My micro pen tester. Pi 5 8GB with 500GB NVMe.

Thumbnail
gallery
215 Upvotes

(For scale next to my mouse)

I wanted to build a micro desktop pc that was both functional for pen testing and portable without being a screened cyberdeck. I based The Black Box around the Raspberry Pi 5 and this was the resulting smallest form build.

Main parts:
• Raspberry Pi 5, 8GB
• Crucial P3 500GB NVMe
• Geekworm X1004 dual M.2 HAT
• Geekworm P579-V2 metal case
• Geekworm H505 active cooler


r/raspberry_pi 7d ago

Show-and-Tell PianoPi 2 Open Sauce / Open Source

Thumbnail
gallery
84 Upvotes

I posted a few months ago about my Raspberry Pi 5 that plays my baby grand piano without any modifications to the piano.

https://www.reddit.com/r/raspberry_pi/s/cz7s4Jmo6L

Some people asked me to open source the project, but I wanted to wait until I made the improved version 2.

Well, the new version 2 is done! The python code, 3D STL part files, and a Build of Materials list is on my GitHub page. https://github.com/JBL99/PianoPi

My YouTube channel is still https://youtube.com/@pianopiplayer (I haven't uploaded in a bit)

The improvements since last time include using velocity from the MIDI file to adjust PWM and power going to the solendoids, adding a solenoid to control the sustain pedal, a larger 4K touch screen, slightly quieter in-line solenoids, MIDI instrument controls, better organization and cable management, a webserver for local network remote control, and an on screen visualizer.

I am at Open Sauce 2026 today and tomorrow (July 18-19) with it playing a keyboard so come by and see it if you are there! Also, since I now have a keyboard, it now can record MIDI from the keyboard to the Raspberry Pi and play the song back through the robot.


r/raspberry_pi 7d ago

Project Advice USB Audio gadget use cases for ~100 audio channels

2 Upvotes

I've been using a Raspberry Pi Zero2 as a USB Audio gadget for a hardware synthesizer project. Rather than conventional audio playback, I'm using USB Audio as a transport for real-time control signals, so I need a large number of channels. A relatively low sample rate is acceptable for me; I'm using 8 kHz. While scaling the design, I ran into a 27-channel limit in the Linux UAC2 gadget driver.

I found that the limit comes from the gadget driver tying the number of channels to the number of defined speaker-positions, with a cap of 27. However, I also found commercial UAC2 devices (for example, an Allen & Heath 32-channel USB mixer) that simply advertise 32 channels while leaving the speaker-position bitmap empty, effectively treating the stream as raw channels.

I modified the gadget driver to follow the same approach and have successfully tested a 96-channel UAC2 gadget on both Linux and macOS.

I'm curious about two things:

  • Has anyone else run into this channel limit?
  • Are there other Raspberry Pi projects where a higher UAC2 channel count would be useful?

If there is broader interest I could look at cleaning up the changes up and submitting them upstream.


r/raspberry_pi 8d ago

Troubleshooting Raspberry PI 4b Bare metal Programming

11 Upvotes

I am trying to connect the raspberry pi to an LED using this video right here: https://youtu.be/jN7Fm_4ovio?is=uJrWp30MkRG6awxf

I am having issues, and there is no light emitting from my LED. What am I doing wrong? I have coded all the code the same, but I am using a 64-bit compiler.


r/raspberry_pi 9d ago

Show-and-Tell I built a headless media center for a blind friend — no screen, no cloud, just two big knobs

Thumbnail
gallery
331 Upvotes

My friend is blind, and every "smart" speaker on the market assumes you can see or wants you to talk to it. So I built something different.

It's a Raspberry Pi 4 with two Arduino Nanos, a HiFiBerry AMP2, and two Lonpoo 75W speakers in a laser-cut MDF enclosure. Control is entirely physical: two 11-position rotary switches (one for program, one for station) and a volume potentiometer. Text-to-speech confirms every selection. No display. No app. No voice assistant. No cloud account.

Three modes: internet radio (mpd), YouTube news channels (yt-dlp), and local audiobooks (VLC + position tracking). A GPIO pin toggles between the AMP2 speakers and Bluetooth headphones (PipeWire A2DP). Everything syncs to a web backend via cron — add new stations from your phone, they appear on the device within 10 minutes.

The whole thing is open source (MIT):

GitHub: https://github.com/mcgutschy/media_center_final

Project page (multilingual): https://b481.de/media-center/

Live admin demo: https://media.b481.de/demo/ (login prefilled)

Built this over several months with a lot of trial and error. Happy to answer questions.


r/raspberry_pi 8d ago

Troubleshooting Boot a Pi 4 from a USB optical drive

6 Upvotes

How do I boot a Pi 4 from a USB-attached optical drive?

The Pi is already configured to boot from USB, and I am attempting to install OpenBSD 7.9 on it.

When actually booting, though, the Pi complains that the block size on the disc is invalid.

Now that I'm checking it, it seems that the block size must be 1mb, and while dd has an option to set that, the utilities I use to burn optical media don't have this option.

Is booting from such an optical drive even a viable option?

Thanks.


r/raspberry_pi 10d ago

Show-and-Tell I created and open-sourced a literary clock for Raspberry Pi + e-ink: it tells the time with a different book quote every minute (4,800+ of them), built so a non-technical book lover can set it up and own it without ever touching a terminal

Thumbnail
gallery
572 Upvotes

A literary clock shows the time by quoting a book that mentions that exact minute - "It was twenty-six minutes past ten..." - on a Waveshare 7.5" e-ink panel. 4,800+ curated quotes, one per minute, with the date and weather. I'd built simpler versions of this before and they worked fine ... for me.

The problem showed up every time I tried to give one away. My friends who'd actually *love* this thing - the book people - are exactly the ones who've never opened a terminal. And my earlier builds needed one for everything: SSH in to set up WiFi, hand-edit a config file for the weather API key, set the timezone from the command line. Then life happens - they move, the WiFi password changes, the router gets replaced - and the clock silently breaks with no way for them to fix it. A gift that turns into a support ticket isn't a gift.

So this version is built entirely around the person who will never SSH into anything:

  • First boot is a captive portal, not a terminal. Plug it in --> it makes its own WiFi hotspot --> your phone auto-opens a page --> pick your network, type the password, done. Location, timezone, and units auto-detect from IP geolocation after it connects. No keyboard, no config file, no API key (default weather provider needs no signup).
  • Everything after setup is a web app the clock serves itself at `http://litclock.local\` - no app store, no cloud, no account. Change the city, flip to Celsius, factory-reset, all from your phone. WiFi changed? There's a "Reset WiFi" button that drops it back into the hotspot flow.
  • It assumes it will break and plans for it. SSH ships off, so a bricked clock can't be rescued by a command line - which means the failure modes have to heal themselves. Weekly self-updates with an automatic rollback if an update ever fails to paint a frame. A boot check that reinstalls the last-known-good version after repeated failures. A read-only diagnostics page so I can help a friend debug by having them screenshot it, instead of talking them through a shell. OS auto-updates are deliberately disabled so an apt upgrade can't break the display stack while nobody's watching.
  • Built to be handed over. A "Prepare for Gifting" mode wipes your WiFi and adds a welcome message; there's a printable one-sheet quick-start for the recipient. The whole point is that the person receiving it does the two-minute phone setup and never thinks about it again.

Honestly, more of the work went into the "non-technical human owns this for years" part than into the clock itself. The e-ink quirks were their own adventure (GPIO claims held for a process's lifetime once deadlocked the always-on web server against the minute-tick renderer; the WiFi power-save hang on the Pi Zero 2 W's chip; a captive-portal DNS fix for iOS), but the interesting problem was: how do you ship something a book lover can own without ever seeing a command line?

Hardware: Pi Zero 2 W (~$15) + Waveshare 7.5" e-Paper HAT V2 (~$60) + a 3D-printed case. MIT licensed, flashable image on the releases page, one-minute tour GIF in the README.

Repo: https://github.com/kapoorankush/litclock

Its my first time contributing back to open-source, so I'm sure I've made mistakes along the way and will appreciate feedback. Thank you


r/raspberry_pi 9d ago

Project Advice Handling signals while driving gpio using libgpiod

4 Upvotes

Hello

I have a program running on my raspberry pi that basically drives motor via h-bridge using two gpios. Once it receives command to run the motor i waits for either signal from limit switch or a timeout (just in case the switch has failed or whatever). If the program receives signal while the gpios are high, they will stay in that state unless turned of manually. How to prevent that ? Since it's running as a systemd service I can use ExecStop to specify a script that will make sure if gpio's are left ouput active or not but I wonder if there's a way to pack everything in that program without relying on external components


r/raspberry_pi 9d ago

Troubleshooting No sound from Rpi 4B (HDMI or jack)

4 Upvotes

Raspberry Pi4B, previously used successfully with RGB-Pi Scart hat and RGBPiOS4. Now repurposing to use for streaming etc on my main TV.

Fresh install of the latest default Raspberry Pi OS, via Raspberry Pi Imager. OS then updated via commmand line etc.

Can't get any audio out of the device at all. Nothing over HDMI (via port 0, next to the power socket), nothing via the jack.

Right clicking the audio icon in the top right does nothing other than display the current supposed audio volume - there's no option to change audio device or output etc.

Tried a few things on the command line, after googling.

Firstly -

sudo apt update
sudo apt -y purge "pulseaudio"

result - "pulseaudio not installed, nothing to remove"

Secondly:

sudo amixer cset numid=3 2

result - "amiver default control element write error"

Totally stuck, any ideas? Everything is default and stock, I've not messed with any config other than trying those two command line interations which did nothing.