Here are the parts I used on this project:
Background on the project:
I found this Pioneer PL-J2500 record player in the garbage, and all it needed was a new needle. I played some records on it, then it sat for a year or two. Now I've decided to mod it to make it more useful, or at least a little more fun.
I decided pretty quickly on adding the ability to rip records and play those recordings all from within the record player. I didn't want any external computers involved. Of course transcoding beyond what is available with my audio codec card will require a computer, but the files are all saved to SD, so that makes it pretty easy. With the codec card I can encode OGG files or WAV files. I can play back just about everything, and I was hoping for FLAC encoding, but I guess I can always "archive" the SD card into FLACs every now and then. I did consider that all of this could have been done with a raspberry pi, but I think that would have complicated things and increased the cost of the mod. Plus, not having the overhead of a large OS means that things will take less time to boot, and should be a bit more reliable. Even with a Pi, I would still need some sort of audio card since the built-in audio on a Pi is considered quite low quality.
Below you'll find some photos of the project that I took as I'm building it. I have some rough plans mapped out as well. I have already wired up the audio codec card, but I don't have photos of that yet. The very first thing I did was make the ESP32 easier to program without needing to unscrew everything everytime I want to update the firmware.
Update 3/8/2021: I spent most of my free time over the last weekend finishing up the hardware part of the project. I've got everything soldered and working with the example mp3 playing program, but I still have a few loose connections and some wire organizing to work on. I'm not sure which wires are loose yet, but if you tilt some parts, the music plays or crackles out. I'll retouch each solder joint soon and then get to work on the software. I've been doing some preliminary coding like getting all my libraries and variables set up, so I'll finish that soon I hope.
Problems along the way:
The Geeektech board is an Arduino shield. There are other boards that use the same chip to do similar jobs, but this board has more broken out, like sockets for stereo sound out and 2 different microphone/line-in connections. This was a bit of a double edged sword. Let me set the stage. On the one hand, I don't have to solder lots of little wires to the IC. On the other hand, most of those shield pins were just passing through the board. They didn't connect to anything along the way. That includes Vin and 3V. Both Vin and 3V don't go anywhere, so putting 5V in Vin did nothing. Hoping for a regulated 3V from 3V provided nothing. This was a little confusing at first. I assumed (assuming was my real problem) the Vin would at least be connected so that it can take the power it needs from the source. I already knew it had voltage regulators on it. Why wouldn't it do that? Connecting the 5V pin to a 5V source fixed all of that. Ground was fine. 3V still wasn't connected even to it's onboard 3.3V regulator. That was annoying, but it was an easy fix. The 3.3V regulator was super easy to find and it provided a nice clean power supply with a very easy wire soldered between the regulator and my improvised 3.3V rail. For future reference, remember: shields sometimes don't connect to pins that you might think they should.
The next problem that took a bit of hacking (I still need to lengthen one wire a bit) was the line-in. This board has 2 microphones on it. The onboard mic is the little aluminum can type. It's clearly mono and only connects to 2 pins. The stereo sockets (in and out) have 3 connections L/R/GND (from front to back along the component). Well, technically only the out socket has 3 connections. The line-in socket (mic) has 3 pins, but only 2 of them go anywhere. It has L/GND (with the middle pin not connected beyond being soldered in). I checked the datasheet for the chip, and sure enough, there are 2 line-in channels, but it seems they were seperated on the board to provide 2 mics instead of a stereo line-in. So I had to stretch the right channel wire over to the now unpopulated microphone pads. It managed to reach, but now it's a little tight. I haven't checked this yet, but I'm quite sure it will work. This is surely something to remember for anyone working with this board. Stereo IN is possible with some hackery. If you wanted to use the stereo in socket as it is on the board, you could do that simply by running a bodge wire to the middle pin of the socket from the clearly labeled positive side of the onboard aluminum can mic. I recommend removing the mic unless you want ambient noise invading your recordings.
Update 3/10/2021: I went back and reflowed my esp32 on the breakout board and I reflowed each end of every wire to make sure that all of my connections were tight, and now I can officially say that nothing works at all. I think I must have made everything look better superficially, but there are demons hiding in there somewhere. I'll have to recheck each wire to make sure it's attached to what I think it is attached to, and ONLY that. Hopefully my problems will go away with a bit more hardware troubleshooting. I've done pretty much everything I can on the software side including falling back to the very simplest example programs, and it doesn't help at all. However! That having been said, I do get some messages on the serial monitor that I wasn't getting before, so even if it has some trouble, it seems to be working better than it was.
WTF moment:
The SD card and the audio sockets are on opposite facing sides of the board. Unless your case is exactly the width or length of those 2 sides, you can't enclose this board without moving something. I recommend the audio sockets. Moving and securing a micro SD card reader would be a pain in the ass. They really should and could have just put them on the same side. WTF?
Future plans:
I hope to add in some basic web based control so recording and playback can be done from any device with wifi. This would make the recording process a little less noisy as I expect kerchunks to be picked up by the needle whenever the rotary encoder is used.
When I finally finish the project, I'll be sure to post my code here as well.
Photos:
References: