ESP32 ESP-NOW Walkie Talkies

For full firmware, wiring details, documentation, and project files, see the GitHub repository: github.com/GuzziFlipFlops/ESP32-Walkie-Talkie

Overview

This project is a pair of custom digital walkie talkies built around ESP32 boards with external antennas, OLED displays, I2S audio hardware, and custom 3D-printed casings. They communicate directly with each other using ESP-NOW, so they do not need a router, hotspot, or cellular connection to work.

The goal was to build a real handheld communication system, not just a desk prototype. Each unit has its own screen, buttons, battery monitoring, volume control, and a menu-driven interface. The result is a compact embedded device that combines wireless communication, real-time audio, and custom hardware design into a fully self-contained build.

What it does

These walkie talkies send voice directly from one ESP32 to another using ESP-NOW. Audio is captured through an I2S microphone, processed in firmware, compressed, transmitted wirelessly, decoded on the receiving side, and then played through a speaker amplifier and internal speaker.

The system includes:

The same hardware can also be reused as a wireless controller for other ESP32 or Wi-Fi projects. Since each unit already has a screen, buttons, battery power, and radio capability, it can be adapted for robots, RC systems, lights, or other IoT devices.

What makes it work well

A basic wireless voice demo is not that hard. Making it work like a real handheld device is harder.

To improve usability, I added several firmware features that make the system much more robust:

These details matter because wireless performance changes constantly with interference, antenna placement, and obstacles. Instead of guessing why the link gets worse, the firmware records data such as RSSI, link quality, jitter depth, duplicate packets, and missing-packet behavior.

Hardware

Each walkie talkie is built around an ESP32-U style development board with an external antenna. The supporting hardware includes:

The project has two physical versions, a black walkie and a grey walkie. They are wired slightly differently, so the firmware supports separate board profiles instead of forcing both devices to be identical. That made the system easier to maintain and much more practical to develop.

Design and build process

The electronics were first tested outside the enclosure, subsystem by subsystem. After confirming the power system, display, microphone, buttons, amplifier, and battery measurement were working, everything was arranged into the printed casing.

One of the biggest lessons from this build was that internal layout matters almost as much as the circuit itself. The second unit has cleaner routing, thinner wiring, and better internal placement than the first version. That made it easier to close, easier to debug, and much easier to improve.

This project ended up being a combination of several disciplines at once:

Challenges

Audio over ESP-NOW

ESP-NOW is fast and convenient, but it is not a complete voice-radio solution on its own. Audio had to be compressed and packed efficiently enough to fit inside packets while still sounding understandable.

Wireless reliability

Real-world range depends on interference, obstacles, antenna position, and even how the device is being held. That forced me to add link monitoring, duplicate-frame handling, and logging instead of relying on simple trial and error.

Packaging everything into a handheld device

It is much easier to make electronics work on a bench than inside a compact 3D-printed enclosure with a battery, speaker, display, buttons, and routing constraints. Getting the internals to fit cleanly was one of the hardest parts of the project.

Moving to compiled firmware

Switching from MicroPython to ESP-IDF required more low-level work, but it was the right move. It made the final build faster, more stable, and much easier to scale into a full-featured device.

Final result

The final result is a pair of handheld open-source digital walkie talkies with custom enclosures, real-time voice communication, a polished OLED interface, and firmware features that go far beyond a simple demo.

Instead of being just a one-purpose device, this project also works as a reusable wireless handheld platform for future ESP32-based tools and controllers. It combines communication, diagnostics, interface design, and expandability in one system.

You can build it yourself

This project is open source and designed so other people can study it, modify it, and build their own versions.

If you want to make one yourself, the full GitHub repository includes the firmware, wiring details, documentation, and project structure needed to get started:

GitHub Repository

A typical path to building your own version would be:

Because the firmware already supports multiple hardware profiles, it is also a good base for custom versions. You can adapt the same idea for different enclosures, different GPIO layouts, or new wireless control features without starting from scratch.

Next improvements

There is still a lot of room to improve the system further. The main areas I would continue working on are:

Why I made it

I wanted to build a more advanced ESP32 project that combined embedded systems, wireless communication, audio processing, and mechanical design into one device.

An earlier version used a Raspberry Pi Pico with an NRF24L01 radio, but that approach became difficult for real voice communication. I moved to an ESP32 with an external antenna because it offered better wireless tools, mature ESP-IDF support, and hardware much better suited for this type of real-time audio project. Moving from MicroPython to ESP-IDF also gave me much more control over timing, buffering, and overall reliability.

This project also started from the idea of turning discarded electronics into something useful. One of the prototype batteries came from a discarded vape, which helped inspire the build, but the final project quickly became much bigger: a complete open-source handheld communication platform.

Open-source direction

This project was built to be more than a finished demo. It is meant to be a platform that other people can rebuild, improve, and extend.

That is why the firmware, documentation, and hardware structure were organized so they can support future modifications, alternate board layouts, enclosure changes, and new features