The Problem
I go snowboarding with my brother pretty regularly, and the one thing that consistently ruins our flow is losing each other on the mountain. It happens all the time — one of us takes a different line, the other ends up on a different lift, and suddenly we’re spending 20 minutes trying to find each other instead of riding.
Cell service on the mountain is spotty at best. Sometimes you can get a text through, sometimes you can’t. Calling is unreliable. And even when it works, pulling your phone out with gloves on, in the cold, while standing on a slope is a pain.
What I actually want is a dedicated communication device that:
- Works like an open phone call when we’re in range — always-on voice, no dialing
- Switches to walkie-talkie mode when we’re out of cell/WiFi range, using long-range radio
- Is hands-free — helmet mounted with a mic and earpiece, push-to-talk button on the glove or handlebar
- Doesn’t depend on cell towers — works purely device-to-device
Initial Design Thinking
This is basically a hybrid communication system that needs to operate across two different scenarios:
Close Range (< 100m) — Full Duplex Voice
When we’re riding together or within earshot distance, I want full-duplex audio — both of us can talk and listen simultaneously, like a phone call. This could work over Bluetooth or ESP-NOW (ESP32’s peer-to-peer WiFi protocol). ESP-NOW has about 200m range line-of-sight and doesn’t require a WiFi network, which makes it interesting for this use case.
The challenge is that full-duplex audio over a wireless link requires enough bandwidth to stream voice in both directions simultaneously. Bluetooth A2DP handles this well, but standard Bluetooth range is limited. ESP-NOW could work with compressed audio (like Opus codec at 8kHz), which would keep the data rate manageable.
Long Range (up to 2-5 km) — Half Duplex / PTT
When we get separated and we’re on opposite sides of the mountain, I need something with serious range. This is where LoRa comes in — I already have experience with it from my senior capstone project. LoRa at 915 MHz can push 2-5 km in open terrain, and mountain environments with line-of-sight between peaks could actually be ideal.
The tradeoff is that LoRa has very limited bandwidth — you can’t stream real-time audio over it. So this mode would be push-to-talk: press a button, record a short voice message (maybe 3-5 seconds), compress it heavily, and transmit it as a data packet. The other device receives it and plays it back through the earpiece.
This is similar to how Meshtastic works, but optimized for voice snippets instead of text messages.
Automatic Mode Switching
The device would monitor which communication links are available and automatically select the best one:
- ESP-NOW available? → Full duplex voice mode
- ESP-NOW lost, LoRa available? → Switch to PTT walkie-talkie mode
- Neither available? → Store messages and retry when link is reestablished
Hardware Concept
- ESP32-S3 — Dual-core processor with both WiFi/BT and enough power to handle audio encoding/decoding
- SX1262 LoRa module — Same radio I used in the capstone project, 915 MHz, proven range
- I2S MEMS microphone (like INMP441) — Digital mic for clean voice capture
- I2S DAC + small speaker/earpiece — For audio output in the helmet
- Push-to-talk button — Wired to a GPIO, mounted somewhere accessible with gloves on
- LiPo battery — Needs to last a full day of riding (6-8 hours), so power management is critical
- 3D-printed enclosure — Weatherproof, mountable on helmet or jacket
Audio Compression
For the LoRa PTT mode, audio compression is the key challenge. Raw audio at 8kHz/16-bit is 128 kbps — way too much for LoRa. But with Codec2 (an open-source voice codec designed for low-bandwidth radio), you can compress voice down to 1200-3200 bps, which is transmittable over LoRa in small chunks.
A 3-second voice message at 2400 bps is about 900 bytes — well within LoRa’s capability as a single transmission. The quality won’t be studio-grade, but for “meet me at the top of Chair 6” it would be more than enough.
GPS Integration
Since I’m already building a LoRa device, adding a GPS module (like the NEO-6M from the capstone) would let us share location data too. Each device could periodically broadcast its coordinates, and the other device could show a bearing and distance — “your brother is 800m northeast.” That alone would solve half the problem.
Challenges I’m Thinking About
- Battery life — Audio processing, WiFi, and LoRa all draw significant power. Need aggressive sleep modes when not actively transmitting
- Audio latency — For the full-duplex mode, latency needs to be under ~200ms or conversation feels unnatural
- Weatherproofing — Snow, cold, moisture. The enclosure needs to be sealed, and the battery performance drops in cold temperatures
- Antenna design — LoRa antenna needs to work well when mounted on a helmet, which is a weird ground plane situation
- Codec2 on ESP32 — Need to verify the ESP32-S3 has enough processing power to encode and decode Codec2 in real time
Current Status
This is a concept I’m actively researching. The LoRa side is familiar territory from the capstone project, but the audio streaming and codec work is new ground for me. Planning to start with a basic ESP-NOW audio link between two ESP32 boards on the bench before tackling the full hybrid system.