The Origin Story
The foundations for this project were laid several years ago. It began as a remote Push-to-Talk (PTT) tangent controller for amateur radios. A colleague of mine designed a few hardware prototypes and handed them over to our team for firmware development.
The first implementation was built on Arduino. It quickly grew in complexity, becoming difficult to maintain and hitting several technical limitations. During this time, our focus also shifted—away from simple radio control and towards direct device-to-device communication over IP.
We managed to build an MVP that worked not only on a local network but also via a custom server on the global internet (WAN). We even had minimal transceiver control working. However, circumstances forced us to shelve the project for a while.
The Rebirth (v2.0)
Even though it was on the shelf, we constantly returned to the project in our thoughts and conversations. So this year, I decided there was no better time than the present to resurrect it.
I started a complete refactoring of the entire codebase. I migrated everything to the ESP-IDF framework and designed a more flexible, modern architecture. My hope is that this new foundation will allow us (and the community) to easily and painlessly adapt the project to newer, simpler, or just different hardware in the future. Most importantly, I decided to take the project fully open-source.
Current Working Components (The MVP)
As of today, these are the key, functional parts of the project:
- Network:
- A smart Wi-Fi connection manager. On boot, it tries to connect to a network saved in NVS. If no network is found, it launches an HTTP server in AP (Access Point) mode. You can connect to this portal to scan for available networks, enter credentials, and set a custom name for your device.
- All audio and discovery packets are sent via UDP using LwIP sockets.
- Audio Pipeline: We are using a TLV320AIC3120 codec. This is admittedly overkill for the current task, but it was part of the original hardware design. It's fully configured and handles the analog microphone input and speaker output. The entire audio pipeline is controlled by the PTT button: when pressed, you transmit; when released, you listen.
- Display & UI: We're using a 240x240 pixel display with the LVGL library. To simplify my life, the UI was generated in SquareLine Studio under a Personal License, so it's perfect for all hobbyists. You can find the SquareLine project file right in the repo at
components/hal_display/uito modify it yourself. - Controls: Input is handled by a magnetic rotary encoder and a custom-built keyboard. These hardware solutions are a bit specific to our prototype and will probably need their own documentation later on.
What the MVP Does (Summary)
The stray device connects to your Wi-Fi network. It actively pings other units to maintain a live "presence" list of who is online. When you press the PTT button, it streams audio to the selected channel (either Broadcast to all or Unicast to one). When an incoming call is received, the UI automatically focuses on the speaker, making it easy to see who is talking and to reply.
Future Plans & Roadmap
- WAN Communication: I want to implement true peer-to-peer (P2P) communication for global use, without relying on a central server. This looks very promising.
- LoRa & Codec2: I've already compiled and successfully tested Codec2 for audio compression. The ultimate goal is to move away from Wi-Fi and use LoRa for audio transmission. My initial tests with this are ambiguous and simply need more time.
- A Simpler "stray v2": I plan to design a simpler, more accessible hardware version based on the ESP32-S3. This version would have simpler controls and, most importantly, support for a 1W LoRa module (like the E22-400M30S).
- Crowd Supply: If there is enough genuine community interest in this project, I would love to explore launching this "v2" hardware on Crowd Supply.
So, keep in touch!
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.