NavIt!

Created by [DynamicWhiteHat] • Started on July 17, 2025

An ESP-32 Powered Bicycle Navigation Display

Total Time Spent: 15 Hours

JUNE 17th: Selected Parts And Worked On PCB

To start, I decided to select a powerful MCU with wireless connectivity, as I wanted to show map information from both an SD card and from an API. I chose the ESP-32 S3 Wroom since it has lots of GPIO pins and lots of PSRAM. It was my first time designing an ESP-32 based board, so I followed this tutorial, which served as a good starting point for my design. This is what I had after I finished the tutorial:

ESP-32 USB BOOT & RESET
image image image

After that, I looked on AliExpress for a good and cheap eink display. I found this eink from Goodisplay that was $24 and used ffc cables for connection. This display also has touchscreen. However, I do need to buy an adapter that allows the ESP-32 to connect to the display using header pins. I found a footprint online and added this for the display:

image

Next, I added in a MEMS I2S microphone using a custom footprint I designed and found a NEO-6M GPS for cheap on AliExpress and added that too. The GPS will allow me to add map functionality using IceNav, a library for ESP-32 based navigation. I can also get the current time, date, and calculate speed. Wiring those to the ESP-32 looks like this:

image

Finally, I attempted to add a speaker to the ESP-32. One major problem that I had a difficult time with was that the ESP-32 doesn't have a built in DAC, so I would need to add a DAC before sending audio data to an amp. I initially decided to use a PCM5102A for DAC and a PAM8403D amp, but I just couldn't figure out how to wire the DAC, especially since it had analog gnd and digital gnd signals and multiple different setting pins. I am also new to I2S communication, so that also didn't make much sense. This was as far as I got before I gave up using the two chips:

Screenshot 2025-07-16 080923

Afterwards, I searched online for other projects where people used an ESP-32 to play audio and I found that many people used a MAX98375 breakout to play audio, as it included a DAC and amp. The reason I didn't use this earleir was becuase I was looking for easier to solder tht ics to avoid reflow soldering. I later realized that since I'm using an ESP-32 and TP4056 IC, I will eventually need to reflow solder, so I decided to switch. Once I was done wiring, the speaker portion looked like this:

image

I added in a quick TP4056 charging circuit and SPI SD card reader and now this is my final schematic:

image

Time Spent: 8 Hours (I didn't know what I was doing at all)

JUNE 20th: Worked On PCB

Today I worked on the PCB. I imported the component footprints from the schematic and started placing them in good spots. I checked the size of the E-ink display, which had an active size of 99x53 mm. I decided to make the PCB a bit smaller than that, at 90x50 mm. I started by placing the ESP-32 down and the corresponding buttons. Then I placed the larger modules on the back, such as the GPS, E-Ink adapter, and the microphone, although I did place the sd card reader on the front as I thought it would be better there. I then placed the various capacitors and resistors around the board, trying to keep the trace lengths to a minimum to avoid difficult routing. After I placed all the components, this is what my layout looked like: image

I first started routing my USB C connector, as those have specific requirements like short trace lengths that must be routed as differential pairs. After a couple attempts and some moving of surrounding components, I was able to get a routing that I liked:

image
The highlighted traces are for USB

Next, I went on to route various resistors, capacitors, and other components like the AMS 1117. I made sure to keep the traces on the front side of the board at most times to make it easier to route the components that are on the back side of the board. This was relatively easy at first, but then I started running into space constraints and had to move components around.

Then, I finally routed the larger components and modules on the back. Once again, at first, this was relatively easy, but as I started adding more traces and more vias, space began getting constrained again. I had to move components around and place lots of vias for the ground pour, but I eventually routed all the traces. I ran DRC and found this error: rear solder mask aperture bridges items with different nets for this footprint:

image

I decided to change the footprint and reroute, which fixed the issue. This is my final PCB:

image image

Time Spent: 3 Hours

JULY 25th: Work on CAD

I started the CAD model (final step) by importing the 3D model of my PCB. When designing my PCB, I made sure to include mounting holes to fit it in my case. I was only able to fit 2 holes however, as my tracks took up most of the room. After importing my model and placing it in my design, I created a box to serve as my screen, whose dimensions I was able to find online.

image

Using these dimensions, I created a 53 x 92.99 x 1.48 mm box. I then created another rectangle with a 3 mm extra offset to serve as the starting point for my case.

image

I extruded this to a total height of 15 mm, which was the thinnest I could get it without having PCB intersection. I chamfered the top and filleted the edges to make it look better. Then I got started on the SD card reader. I decided that instead of making the whole case ~2-3 mm thicker, I would just have the SD card reader stick out of the bottom. I got to work on modeling the surrounding case for this. I first started by projecting the outline of the reader module onto a sketch and I offset it by 0.2 mm for tolerance. Then I extruded the sketch, filled in some gaps, and shelled out the inside to make the module fit. This is what it looks like:

image

Then, I found this speaker on AliExpress, and modeled it using its dimensions. The best location I found for it without having to add a sidebar was to put it right under the screen and add some holes in the side for the sound to go through. I created a box and used the combine feature with cut selected to create a cavity for the speaker. I added four 1 mm holes on the side. This is how it looks:

image

I added the same hole feature near the microphone in an attempt to allow sound in, though I'm not sure how well it will work. Next, I quickly made a textured cap for the switch, as it was currently too deep inside the case to be switched on or off. I made some standoffs for the screws and added a mounting piece on the bottom, consisting of 3 extruded rectangles with a 3 mm hole for an m3 screw. This is my final top design:

image

Next, I used the same mount sketch to make 2 interweaving mount pieces that complemented the 3 connected to the case. I added a base and a cylinder to wrap around a bicycle handlebar. This was my first time successfully using the loft tool, and I think it worked well. This is how the loft creation looks:

image

Finally, I used the box extrusion tool to add a clip on the end of the clamp, once again adding a m3 hole. That was the final step of my design. This is the whole design:

image

Time spent: 4 hours