Welcome to BrightShinyRadio! This is a playful and straightforward project that merges Raspberry Pi FM broadcasting with a retro-themed website to display playlist history. Think of it as your DIY mini-radio station with a web presence, all wrapped in 90s nostalgia.
What started as a proof-of-concept for AWS Lambda functions quickly spiraled into something much more fun. Inspired by quirky radio stations that play the same song repeatedly, I decided to recreate the experience with items I had lying around.
The result? A Raspberry Pi broadcasting a single song and an accompanying website to share the playlist details. Let’s dive into the details so you can build your very own BrightShinyRadio station.
- FM Transmitter: Broadcast a single
.wav
file using a Raspberry Pi. - AWS Integration: Store and retrieve playlist data with DynamoDB and Lambda.
- Retro Website: Display your station’s playlist in an eye-
burningcatching 90s design.
- The Raspberry Pi transmits a
.wav
file as an FM signal and posts the song details to AWS. - AWS Lambda stores the data in DynamoDB and serves it as a JSON response.
- The website fetches and displays the playlist details for visitors.
- FM Broadcast a single song in
.wav
format, and related RDS information. - Automatically log song details (artist, title, duration) via AWS Lambda.
- Display the last five songs played on the website.
Heads Up!
- Cost Alert: Hosting the website on AWS incurs a small cost (~$1/month in low-traffic scenarios). Ensure you’re comfortable with potential expenses before proceeding. I'm paying $0.50/month for Route53, and $0.04/month for everything else = $0.54 total/month. I pay $14/year for brightshinyradio.com domain registration as well.
- Legal Compliance: Ensure broadcasting FM signals is legal in your region.
- The installer script disables HDMI on your raspberry pi to save energy. Delete the line "/usr/bin/tvservice -o" from /etc/rc.local and reboot to turn it back on.
- Hardware:
- A Raspberry Pi (Pi 1 through Pi 4).
- MicroSD card (minimum 5GB).
- 20-40 cm solid core wire for the antenna.
- Dupont connector or similar for attaching antenna to GPIO4.
- Network connection (wired or wireless).
- Software:
- Raspberry Pi OS Lite (64-bit preferred).
- AWS with Terraform configured.
- A
.wav
file in the correct format:If usingsox my_file.mp3 -r 22050 -c 1 -b 16 -t wav > song.wav
ffmpeg
, add the-flags bitexact
option.
- Navigate to the
lambda-function
directory. - Update
main.tf
to reflect your preferred AWS region. - Run:
terraform init && terraform apply
- Note the Lambda endpoint URL.
- Test the function using
test-request.sh
and confirm it works.
- Navigate to the
html-site
directory. - Update:
terraform.tfvars
with your AWS region.dist/script.js
with your Lambda endpoint URL.
- Deploy the website with:
It should end with
terraform init && terraform apply
That you can visit in a browser.Outputs: site_url = "http://radio-RANDOMID.s3-website-us-east-1.amazonaws.com"
- Install Raspberry Pi OS Lite on the MicroSD card. Use Raspberry Pi Imager for an easy setup. Configure network (WiFi or Ethernet) and enable SSH if using a headless setup.
- Cut antenna to match your frequency at 1/4 wavelength and attach to GPIO4.
- Transfer your
.wav
file to the Pi:scp song.wav pi@<hostname>.local:
- SSH into the Pi and run the installer:
bash -c "$(curl -sL https://raw.githubusercontent.com/jasonmce/bright-shiny-radio/refs/heads/main/pi/install-pi-software.sh)"
- Customize
player.ini
as needed. - Reboot:
sudo reboot
- Tune your FM receiver to enjoy your station!
Once everything is set up, you’ll have your own mini radio station broadcasting a single song, complete with a retro-themed website to show off your playlist. Whether for fun, nostalgia, or a creative project, BrightShinyRadio is here to spread nerdy joy within a 100-meter radius. 🎵📻
Got questions or need help? Check out the documentation or open an issue in the GitHub repo. Happy broadcasting!
Whip Antenna Length And Frequency Calculator
Marcin Kondej's FM Transmitter project Christophe Jacquet's For creating an RDS enabled version
ChatGPT For the spiffy 90's Radio Station website improvements
Convertio For generating the .ico file
Thomas Vanhoutte's blog post on energy saving
Wikipedia for their RDS writeup