Meko Music Player

Created by [koeg] • Started on April 29, 2025

A high definition music player with bluetooth support, which has an e paper display and a physical wheel

Total time ≈ 87h

04.29: chose the soc, and usb uart switchin

  • choose the esp32-mini-1u because it has support for bluetooth audio and rust
  • this chip doesn't have an integrated usb controller, so I had to choose a chip for usb to uart

Total time: 1.5

05.05: added the dac/amp chip, added display connector

  • there is little info on high quality dac/amp chips, after many days of research and pain a choose the ES9218P, which is a really nice chip to work with, but the datasheet is a bit lackluster
  • chose a display, added the flex pcb connector for it

Total time: 2h

05.07: added the hall-effect sensor for the wheel

  • I saw a wide where a guy made a high precision scrolling device, and he used a hall-effect sensor, I chose to go down this rout because there is no rotory encoder to ware out

Total time: 1h

05.08: power, lil bit

  • Copy pasted bms and power path chip from previous project, did some calculations, changed resistor values

    Total time:1h

05.09: power and usb

  • Chose a dual output switching regulator, implemented usb to uart chip

    Total time: 1.5h

05.10: audio

  • Read the datasheet far more times than i would like to admit
  • Some things are not clear
  • implemented the things that I kinda understand
  • asked a question on stackexchange

WIP audio sheet

**Total time: 1.5h**

05.17: some Chad replied to my question on electronics stackexchange

  • Someone who has experience with this rare chip, YIPPPEEEEEE
  • I will have to use a oscillator, not a crystal, and low noise LDOs instead of switching regulators
  • Did some research on mems vs oscillator vs crystal

stackexchange reply

**Total time: 2h**

05.18: implemented to suggestion from stackexchange

  • oscillator instead of crystal
  • added low noise LDOs

    Total time: 2h

05.22: Added components, choose LDOs

  • I switched from a esp32-mini-1u to a esp32-pico-mini-02, for an integrated pcb antenna and a smaller from factor
  • Chose the micro SD slot, and added it to to the schematic
  • the same chad from electronics stackexchange replied to my other question about power delivery for this chip
  • Did a lot of datasheet reading abot LDOs and what to choose, and decided that will try to solder 1mm*1mm packages

    Total time: 3h

05.23: Power, power, POWER

  • implemented the LDOs
  • learned a lot about filters, low-pass, high-pass, etc. Interesting topic
  • again lots of reaiding

    Total time: 4h

05.24: inter chip COM

  • the esp32 has a f#$* up io multiplexer if you want to do multiple things
  • the SD card pins and the JTAG pins are the same, so if you use an SD card you cant use JTAG, or vice-versa
  • all of the pins that can output a i2s clock signal are used by uart or the boot pin
  • might need to figure something out for using the same pins for different things
  • wired up the hall-effect sensor, en and boot pins with the usb-to-uart adapter, some parts of the dac/amp chip, SD card
  • created a symbol for my display
  • read a bunch again

    Total time:5h

05.25: finishing up the schematic

  • finished display, aka copied reference design
  • turns out you can you can use gpio0 as a regular gpio0, you just need to make sure that it doesn't get pulled low on boot, so my i2s clock is on gpio0 (aka the BOOT pin)
  • chose the headphone jack, and added the footprint and 3d model
  • still need to add esd protection in some places
  • added buttons
  • routed spi for the display, added test points
  • i dont have enough gpio to controll the DACs power chips, so they will all start up at once, which is not optimal, but....
  • i need to connect up the headphone jack

    Total time: 3h

05.25: I'M ALMOST DONE WITH THE SCHEMATIC

  • added an I/O expander, because i ran out of I/O
  • added led, and haptic motor
  • since i added a io expander now i can control the boot sequence of the dac/amp
  • added more esd protection
  • researched how inline volume controls work
  • segmented schmatic

    Total time: 4h

05.28: fixing

  • fixed vibartion motor, made schematic more organized
  • added leds, jack, and esd

    Total time: 1h

05.29: fixed stuff

  • removed separate i2c line for the dac, becouse i needed one more gpio for the a ldo enable pin
  • changed pull up resistor values on the i2c line

    Total time:0.75h

05.30: added fuel gauge, 3d models

  • fixed small ERC issues
  • realised that i have no way to check the battery percentage
  • added a fuel gauge ic
  • realised that the ic that i have chosen has the same i2c address as the hall encoder
  • chose another ic, this is bga, but only 3x3 so its not that bad
  • added all the missing 3d models
  • ready for layout

    Total time: 3h

05.31: starting layout

  • realised that i still need to chose the battery connector, i went with PH2.0
  • changed footprint of sk6805
  • started the layout, it is kinda hard

    Total time:2h

06.01: mockup

  • made a mockup mockup
  • arranged the display and the hall sensor based on the mockup
  • decided to fold the flex display cable, because i had no space for the hall sensor, luckily my connector has contacts on both sides
  • i have to reorder the pins, because of the folding on the flex connector
  • reordered the pins

    Total time: 2h

06.02: layout is like a puzzle with multiple correct solutions

  • arranged the jack and power button based on the mockup
  • laid out the dac/amp chip
  • added charging led, so you know if you are charging your player

    Total time: 1h

06.03: more layout

  • arranged the button pull ups and caps
  • moved around the dac/amp
  • laid out power
  • laid out some parts of display

    Total time: 4h

06.05: finished with the layout, almost

  • realized that the BOOT pin shouldn't be pulled down, but because that way it is booted into firmware mode, so i pulled it up with a 100k resistor, so it doesn't interfere with the i2s that much
  • laid out most of the components, some placements are not final, because they will depend on the routing
  • moved the via fence around a bit
front of unrouted pcb back of unrouted pcb
**Total time: 2h**

06.06: routing started

  • routed most of the important circuits, like the usb lines and the i2s lines

    Total time: 1h

06.07: maybe chose a too small pcb size

  • I'm starting to have trouble routing some tracks, I may have made an oopsie
  • routed the short tracks, kind of a grind
  • finished the routing, time to send it of to reddit

3d view of routed pcb 2d view of routed pcb

**Total time:3h**

06.10: fixed fuel gauge

  • some chad redditor saw that i had connected my fuel gauge IC wrong, i connected SRX to the output of the batter charger, instead of connecting SRX to the batter input of the batter charger

reddit reply

**Total time: 1h**

06.11: small fixes, moved stuff around

  • flipped buttons, cuz it didnt make sense to have them on the other side
  • added vias to the bottom pad of the dac, forgot about them
  • other small fixes
  • selected some components based on the value in the schematic

    Total time: 3h

06.12: picked MPNs, stiching VIAs, 3d modeling

  • choose MPNs based on the footprints and values
  • added stiching VIAs
  • imported the bearing 3d model that i want to use
  • started modeling the e ink display, and real realised that the connector i chose for it is for 1mm thich FPCs, and the cable on the display is 0.3mm
  • i have to choose a new connector
  • turns out, 1mm, is the height of the connector and not the cable, so im fine, panic over hhuuhhh

Total time: 3h

06.13: CAAAD, fixes

  • chose a 6701 bearing
  • moved buttons and mounting holes around to make space for it
  • moved jack out to board edge, because it had interfered with the pcb

Total time:3h

06.14: CAAAAAAAAAAAAAAD

  • done with the bottom part of the case, mostly
  • the top part is also almost done
  • moved stuff around on the pcb to make the device more thin
  • player is still 16 mm thich
  • choose battery

Total time: 4h

06.17: Almost finished with the case

  • I was wrong about the to part almost being done
  • added holes to the top case for the threaded inserts that i will glue in
  • added a rim to the top case so when i tighten the screws this rim will be the main contact point with the pcb
  • added a stopper to the bearing hole, so that it will sit at known hight, and not at some random hight in the hole, also prevents the bearing from touching some components
  • figured out how to keep the display in place, will model it later
  • adding some images, I havent done this in a while, i might have to back journal, and add some more, cuz this journal is basically a wall of text top case bottom case all together

Total time: 3h

06.18: finished cad

  • Finished display retainer, it's like a plate that is held down by the pcb
    display retainer
  • modeled the button
  • I found a way to make it thinner, firstly buy leaving the battery less wiggle room, and a cutout for the battery in the case, this will reduce the thickness by like 2mm, so it will be around 13,5mm
  • choose the magnet for that hall-effect rotation encoder, here is the link

Total time: 4h

06.19: rounded tracks, cad assembly

  • created a cad assembly cad assembly
  • modeled the buttons
  • made the wheels dimensions parametric
  • i created a new branch for V1 of the PCB, so I can have rounded tracks, which are annoying to edit
  • the next thing to do is to create some renders in blender
  • in blender the transparent material i want to use for the 3d printed plastic parts, is not transparent, so i spent 1,5h on this, and still couldnt figure it out, AAAAAAAAHHHHHHHHHHHH not transparent glass shader

Total time: 4h

06.20: I'm in a love hate relationship with blender

  • turns out you need to enable raytracing for transparent things, otherwise it will be a mirror
  • all the things i looked up had the old blender ui, so I asked on reddit, and a chad responed overnight, so now i know where to enable raytracing
  • mucked around with the kicad exporter and blender importer for the pcb
  • i thought that i needed to merge all the geometries to move them at once, but after the merge you cant easily change the materials of the combined mesh, and i accidentally set the bearing material to glass, so i had to redo the whole thing again, because you cant unmerge a merged mesh, and i was out of undo states, so i had to redo the whole thing, but I was now way faster
  • made an animation of the player, that is rendering right now transparent glass shader
  • blender wasn't using my gpu, so I had to update some drives an tweek some setting in nixos

Total time: 3,5h

06.21: FINISHED

  • finished the render that i started yesterday
  • made an exploded animation blender
  • made a BOM
  • made a readme
  • converted renders to webp
  • made production files, and a github release
  • small polishing changes

Total time: 4h