The project is a lightweight handheld digital radio (walkie-talkie) with push-to-talk audio streaming, quick on-device controls via an encoder + PTT button, and several utility modes (scanner, beacon, parrot, SOS) for field use.
- Push-to-Talk (PTT) Audio Streaming: Live RF audio TX/RX over NRF24L01+.
- Adjustable RF Data Rate:
250 kbps,1 Mbps,2 Mbpsselectable from the device. - Adjustable RF Channel: Cycles through predefined channels (
90,100,110). - Adjustable TX Power:
MIN / LOW / HIGH / MAX. - Volume Control: Local speaker playback volume adjustment.
- Beacon Mode: Periodic tone transmission with adjustable interval.
- Parrot Mode: Measures received audio burst duration and re-transmits it after cooldown.
- Scanner Mode: Scans channel + data rate combinations and detects stable incoming signals.
- SOS Messaging: Sends/receives a small command packet (
SOS) and plays an alert tone when received. - Roger Beep: Optional confirmation beep after RX stream ends.
- Encoder + PTT Controls: Single-device control without screen.
- LED Feedback System: Multi-pattern blink codes for battery level, mode changes, and status.
- Battery Monitoring: Voltage measurement via
Arduino_Vccwith low/mid battery indication. - EEPROM Settings Persistence: Saves channel, volume, data rate, TX power, and roger-beep state.
- PTT Lock: Lock/unlock transmit flow directly from controls.
The device is built around a few key parts:
- MCU: LGT8F328P
- 2.4 GHz Radio: NRF24L01+
- Audio Input: Electret / analog microphone front-end (to
A0) - Audio Output: Speaker / amplifier driven from PWM audio pin
- Controls: Rotary encoder with push switch + separate PTT button
- Indicator: Single status LED
- Power: Battery-powered handheld design with voltage monitoring
| Function | Pin |
|---|---|
| PTT button | D2 |
| Encoder A | D4 |
| Encoder B | D3 |
| Encoder switch | D5 |
| Status LED | D6 |
| Speaker (PWM audio out) | D9 |
| Analog audio input | A0 |
| Function | Pin |
|---|---|
| CE | D7 |
| CSN | D8 |
| SPI | Hardware SPI pins of the board |
Notes:
D8is used asNRF24 CSN; keep this in mind when wiring the encoder/speaker section.D9is used by audio tone/PWM output (speaker / buzzer path).
- PTT hold: start transmitting audio (push-to-talk)
- PTT release: return to receive mode (with short release debounce)
- Encoder turn (idle RX): adjust volume
- Encoder press + turn (idle RX): change RF channel
- PTT hold + encoder turn: change TX power
- 1 click: toggle data rate (
250k / 1M / 2M) - 2 clicks: enter Scanner mode
- 3 clicks: toggle Roger Beep
- 4 clicks: enter Beacon mode
- 5 clicks: toggle Parrot mode
- PTT held + encoder click(s): enables PTT lock behavior
- Encoder held while in Beacon / Scanner / Parrot: exit that mode
- Encoder held + PTT triple-click: send SOS command packet
- Startup: The radio is initialized in receive mode, settings are loaded from EEPROM, and LED blinks indicate battery level.
- Receive by Default: The device listens for incoming NRF24 audio payloads or command packets.
- PTT Transmit: Holding PTT switches to TX mode and streams microphone audio over NRF24.
- Local Controls: Encoder actions adjust volume, channel, data rate, TX power, and utility modes.
- Utility Modes: Scanner/Beacon/Parrot reuse the same radio/audio path with mode-specific behavior.
- Persistence: Changed settings are saved to EEPROM after a short delay.
src/main.cpp— application loop, input handling, mode switchingsrc/functions.h— feature logic, settings, modes, LED/battery/audio helperslib/DataTransfer/— NRF24 audio streaming + command packet transportlib/Tone/— timer-free tone generation helperslib/Arduino_Vcc/— battery voltage measurement3D Model/— enclosure/mechanical files
For Educational & Research Use Only Use this hardware and software responsibly and only on frequencies and systems you are legally allowed to operate on. The author accepts no liability for misuse, damage, data loss, or legal consequences. All actions are at your own risk. Always comply with local laws and regulations.