A Retro Internet Radio

This is a Philco model 46-200 AM radio, built starting in the mid-40’s around a very common five-tube design. This US company, founded in 1892 in Philadelphia, got into radio manufacturing in the late ’20’s and became a leading maker within a decade. I really like the look of this little radio, and because so many were made, it was easy to find one on eBay.


The most inexpensive examples you’ll find on eBay probably won’t work. They can be restored and if you’re interested in that, here’s a book on Amazon that will walk you through the process of troubleshooting and repairing radios made around a very common design used during this period.

I decided not to try to restore the radio but instead to convert it to an Internet radio while preserving the external appearance. This project is actually fairly simple, built around a Raspberry Pi (RPi) Model 3, an external amplifier, speaker, and a few other components that I’ll cover later. Here’s what the radio’s internals looked like before I started:


The first step was to remove the original circuitry. Fortunately this is easy to do, as the radio was designed to be easy to service (tubes needed to be replaced eventually). Pull the tuning and volume knobs off the shafts on the front of the radio, undo a couple screws on the bottom, and the entire assembly comes out of the radio. IMG_0011

The clear plastic shield that covers the tuning dial was cracked, an easy repair using 1/16″ inch clear acrylic available from Amazon for a few dollars. Often these radios have cases made from bakelite (handle carefully) or early types of plastic, as I believe this case is. Superglue worked fine for attaching a new shield.

My next step was to assemble the actual replacement hardware for an internet radio, built around these components:

  1. Raspberry Pi Model 3, which has onboard Wifi, eliminating the need for a separate wifi USB adapter. This isn’t critical, but it is convenient. You’ll also need a microSD (I’d get at least 16GB capacity) card to serve as the RPi’s “hard drive” and a power adapter. Powering both the RPi and the audio amplifier requires around 2.5 amps of current, so you won’t be able to power this radio from a standard USB port. I’d recommend using an external power adapter like this one.
  2. An 5V audio amplifier with integrated volume control, like this one available from Amazon for ~ $9. 5V is key as that makes powering both the Raspberry Pi and the amplifier from a single 5V power supply easy.
  3. A rotary encoder like this from Amazon for ~ $3. This device converts the turning of the tuning knob shaft to a signal we can read on the RPi as the user changing stations, which preserves the original functionality of the radio.
  4. One relatively low power speaker. I used a larger speaker than was necessary (or even desirable) because I had it lying around, but you’ll get better results by matching the speaker’s rating to the amplifier you’re using. Something like this speaker from Amazon is ideal.
  5. A momentary pushbutton switch like this. Amazon sells them in bulk but you can find smaller quantities on eBay for less. If Radio Shack still existed, that’d be a great place to get most of these components in one go!

That’s it for parts. All together, this project cost me around $100. You could probably find a vintage radio for much less at garage sales, but I really liked the design of this model.

If you’ve got the RPi, microSD card and power adapter you can start by loading the software. I followed this excellent tutorial by Giles Booth with only a few minor changes to incorporate the rotary encoder and shutdown button. Follow this tutorial to get the RPi working as an Internet radio with the following changes:

    1. Connect the rotary encoder to the RPi using as follows: CLK -> GPIO 17 (pin 11),  DT ->GPIO 18 (pin 12), +3V -> Pin 1, GND -> Pin 6.
    2. Connected the momentary pushbutton switch to RPi pins GPIO 23 (pin 16) and ground (pin 25).
    3. Modified source code for the radio.py Python app. Note the NUMSTATIONS constant. You’ll want to change this to reflect the number of stations you’ve added to the mpc playlist.
!/usr/bin/env python
# Bare bones simple internet radio
# www.suppertime.co.uk/blogmywiki
import RPi.GPIO as GPIO
import time
import os

clk = 17
dt = 18

GPIO.setup(clk, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(dt, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# setup pin for shutdown button on GPIO 23 (pin 16)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)

def Shutdown(channel):
     os.system("sudo shutdown -h now")

GPIO.add_event_detect(23, GPIO.FALLING, callback = Shutdown, bouncetime = 2000)

counter = 0
clkState = 0
dtState = 0
clkLastState = GPIO.input(clk)

# read station number from text file
f = open('/home/pi/station.txt', 'r')
station = int(f.read())

os.system("mpc play " + str(station))

     while True:
         #take a reading from the rotary encoder
         clkState = GPIO.input(clk)
         #if the last reading is different, user turned the dial
         if clkState != clkLastState:
             station += 1
                 if station > NUMSTATIONS:
                     station = 1
             os.system("mpc play " + str(station))
             f = open('/home/pi/station.txt', 'w')
             f.write('%d' % station)
         #update previous rotary encoder setting
         clkLastState = clkState
         #slight pause to debounce the rotary encoder 

Following Giles’ tutorial and using the modified code above, your Internet radio should be functional. Here’s what mine looked like with everything wired together:


It’s a bit of a mess, but that will get sorted out once the new hardware is installed in the case. Note that I used a mini audio jack and a stereo patch cable to attach the RPi audio out to the amplifier input. The rotary encoder and shutdown button connect directly to the RPi’s GPIO pins. Not shown here, but later, I attached an LED, with a 300 ohm resistor in series, powered off a GPIO pin, to illuminate the tuning dial. Using a clear LED, with enough resistance, creates a nice, vintage yellow glow.

I cut a 1/4″ thick piece of plywood to serve as a base for mounting the components. The board is sized for fit inside the case and to not move around. 3D-printed brackets are used to attach the original turning dial display, rotary encoder, audio amplifier and speaker to the base.


With everything installed in the cabinet, here’s the final result:



And here’s what inspired this project in the first place!


Any questions please hit me up in the comments.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.