mur mur is a small speaker with a world inside. Not a playlist or a stream, but a living soundscape you can listen to or peek into.
An experiment by oio and Mattering.
This guide helps you build the open source hardware prototype of mur mur using readily available off-the-shelf parts. It comes loaded with pre-generated soundscapes for you to enjoy. You can build it with the full feature set (display, battery, charging, and audio) or skip some features for a display-only object.
Questions while building? Join the oio Discord below:
First we need to order a bunch of stuff. The complete bill of materials is right below. The diagram shows you where things go. Filaments are sorted by the type of mur mur and print files need to be printed with the different filaments.
| ID | Name | Link |
|---|---|---|
| M1 | Lens 16mm (20mm FL) | Amazon |
| M2 | Display Module (ESP32-S3-Touch-AMOLED-1.75, 466×466) | Waveshare |
| M3 | Amplifier (PAM8403 with potentiometer) | Amazon |
| M4 | Speaker 3 watt 4 ohm / 2 watt 8 ohm | Amazon |
| M5 | DAC (PCM5102A) | Amazon |
| M6 | Headphone jack (3.5 mm extension) | Amazon |
| M7 | Battery charger (TP4057 USB-C) | Amazon |
| M8 | Battery | Amazon |
| M9 | M2 screws | Any 4-6mm M2 bolt |
| M10 | Micro SD | Any MicroSD card (at least 4GB) |
| M11 | Male Pin Header (2.54mm) | Any 2.54mm male header |
Note: Most shopping links point to Amazon Netherlands. The same parts (or close equivalents) are widely available across Europe and the US, use the product names and specs here as a search reference, then order from a local seller if that’s easier.
Note: The filaments listed below are just examples of the exact ones we used for our prototypes. Feel free to use any 3D printing filament (PLA, PETG, etc.) and color combination you like!
| Color | Block | Plot | Pond |
|---|---|---|---|
| Primary | Link | Link | Link |
| Secondary | Link | Link | Link |
Print the four parts below before you assemble. Match filament to your mur mur type (Block, Plot, or Pond) from the table above, primary for the shells, secondary for the dial and mount.
| ID | Name | Color | Link |
|---|---|---|---|
| P1 | Top shell | Primary | murmur_top_shell.stl |
| P2 | Bottom shell | Primary | murmur_buttom_shell.stl |
| P4 | Mount | Secondary | murmur_mount.stl |
Use supports on the shells (especially overhangs around the openings), and print one part at a time for cleaner surfaces. The mount (P4) holds the display and speaker. Once the parts are printed and the electronics ordered, flash the firmware, then come back here for wiring and assembly.
Plug in the board via USB-C. One-time setup:
brew install arduino-cli
arduino-cli core update-index && arduino-cli core install esp32:esp32
arduino-cli lib install JPEGDEC
arduino-cli lib install "GFX Library for Arduino"Flash the firmware:
cd firmware && ./flash.shHold BOOT while plugging in USB if the port does not appear. See [firmware/README.md](firmware/README.md) for details.
Put your .avi files on a FAT32 microSD card (root), insert it, then power on. The video loops on the round 466×466 AMOLED.
Battery: the 1.75 module has onboard AXP2101 charging (MX1.25 battery header). The separate TP4057 charger (M8) is optional if you prefer an external charge board.
For the assembly you need just a few things:
- 3D printer
- Computer
- Soldering iron
- Wire stripper
- Screwdriver (for M2 screws)
- Double-sided tape
First step is to wire up all the components. Follow the schematic diagram to solder or connect all wires in the right ways. We used male headers and female jumper wires on some parts to make it easier.
The diagram above is the pin-level wiring map.
ESP32-S3 → PCM5102A (I2S): GPIO18 → BCK, GPIO17 → DIN, GPIO16 → LCK, 3V3 → VIN, GND → GND. Also tie DAC SCK to GND.
PCM5102A → PAM8403 (analog): G → G and L → L. Do not swap those two.
Power: run both PAM8403 Power + and Power − from the TP4057 (OUT+ / OUT−). Do not take amp power from the ESP 3V3 rail, and do not use the DAC analog ground as the amp’s power ground. The TP4057 also feeds the battery (B+ / B−) and the board’s BAT + / BAT − connector.
Power the wired stack and confirm video and audio before you close anything up. When that works, put the parts together in the shell.
- Add an 8-pin male header to the ESP pinout. Then solder some female jumper cables to GPIO18, 17, 16, 3V3, and GND and connect them to the PCM5102A. Make sure to wire the SCK to GND. See photo as an example.
- Wire up the audio output from the PCM5102A to the audio input on the PAM8403: G to G, L to L. Connect PAM8403 Power + and Power − directly to the TP4057 OUT+ and OUT−.
- Insert and fasten the PAM8403 to the 3D-printed mounting plate.
- You should have everything wired up, and it should look something like this. Now is a good time to test the screen and audio. Insert the SD card with the media files and flash the firmware.
- Insert the battery at the bottom with some double-sided tape, and insert the TP4057 into its dedicated slot.
- Insert the audio jack cable, doubling as the battery locking system.
- From here on, we will attempt to fit in all the electronics (this may get tight, depending on the amount of wires and thicknesses). Carefully place the PCM5102A on or next to the battery.
- It can help to snap off the speaker tabs.
- Everything should fit inside, leaving clearance above the 3 mounting studs.
- Insert the display by aligning the mounting pins to the mounting studs.
- Screw on the top shell with the lens installed. Make sure to rotate the top until the inner opening is revealed (see photo). You may need to clean the 3D-printed edge for a good fit. When fully installed, this will lock the mount and display firmly in place.
- Plug in the 3D-printed dial, and you should be done.
Make sure a microSD card with your generated media files (e.g., city.avi, forrest.avi, water.avi) on the root is inserted, then power on. The video loops on the round display with sound through the speaker or headphone jack. Give the device a solid shake to switch between themes!
| Control | Action |
|---|---|
| Volume | Turn the potentiometer / 3D-printed dial. |
| Shake | Switch Theme — changes the current theme (e.g. from city to forest to water). |
| Turn On / Off | Option 1: Plug in the charging cable at the bottom. Option 2: Insert a needle or wire in the top right 2nd hole. Option 3: Unscrew the top shell and click the button manually. |
This project is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) License.
Stuck on wiring, flashing, or assembly? Hop into the oio Discord and ask, we are happy to help.







