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:
- push-to-talk voice communication
- 20 logical channels
- OLED user interface
- link detection
- battery monitoring
- signal indicator
- volume control
- menu-based apps and settings
- onboard diagnostic logging
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:
- audio compression so voice fits efficiently into ESP-NOW packets
- jitter buffering so received audio plays more smoothly
- packet-loss concealment to reduce harsh dropouts
- heartbeat packets for link detection
- weak-link redundancy that sends duplicate frames when signal conditions get worse
- onboard telemetry logging for range testing and diagnostics
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:
- SSD1306 OLED display
- I2S microphone
- I2S speaker amplifier
- internal speaker
- potentiometer for volume
- six push buttons
- LED
- 3.3 V laser module
- battery voltage monitoring
- lithium battery power system
- custom 3D-printed enclosure
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:
- embedded firmware
- wireless protocol work
- digital audio handling
- power and battery integration
- user interface design
- 3D enclosure design
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:
A typical path to building your own version would be:
- Review the wiring and hardware layout.
- Print or modify the enclosure design.
- Assemble and test each subsystem outside the case first.
- Wire the buttons, display, microphone, amplifier, battery system, and outputs.
- Select the correct board profile in firmware.
- Flash the ESP-IDF project to each walkie.
- Test voice transmission at short range first.
- Tune audio, channel behavior, and antenna placement.
- Expand the platform with your own apps or control modes.
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:
- more range testing in different environments
- more apps that use the walkie as a controller
- cleaner and more standardized internal wiring
- more polished enclosure and mounting hardware
- further audio tuning
- better battery and power optimization
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
Aditya Verma