Pirrot
A radio repeater controller (supporting both simplex and duplex operation modes) for the RaspberryPi.
Install / Use
/learn @allebb/PirrotREADME

Pirrot - An Open-source Radio Repeater controller for RaspberryPi
The Pirrot project exists to offer a cheaper (and fun) alternative to buying a dedicated simplex or duplex radio repeater controller.
Pirrot also offers other operation modes and features that most off-the-shelf repeater controllers do not come with as standard such as automatic identification, and the ability to operate in "surveillance mode" (recording transmissions).
You can find a list of user projects to get inspiration from below.
Features
- Operate a Simplex or Duplex repeater system from a Raspberry Pi (Pirrot runs in Simplex mode by default)!
- Optional web admin interface to update settings, view system resource usage, access (download, play or delete) audio recordings.
- Optional automatic repeater identification broadcasts (disabled by default).
- Ability to transmit the PL/CTCSS tone as part of the repeater identification broadcast.
- Ability to transmit a custom pre-recorded (MP3 file recording) broadcast or custom repeater identification message.
- Ability to broadcast custom text-to-speech messages.
- Ability to trigger repeater transmission using VOX (voice activation) or COR (carrier signal from radio to trigger a PTT relay).
- Optional recording of received transmissions (disabled by default).
- Optional automatic nightly backups and archiving of audio recordings to a remote server (FTP and FTPS supported).
- Automatically purge old recordings from the SD card (keeping that SD card from getting full).
- Optional integration with GPS hardware for "field" or "mobile" operations, ensuring the RPi has accurate time (using the atomic clocks from GPS satellites).
- Optional weather report broadcasts for a specified location (requires an internet connection and a free OpenWeatherMap account API key)
- Optional Google Text-To-Speech functionality for translatable broadcasts and generating synthesized weather report broadcasts (requires an internet connection and a Google Cloud API Key)
- Ability to dispatch a webhook when the repeater is activated (requires an internet connection) - We call this feature "Tripwire".
- Ability to optionally delay the transmission of received simplex messages for a configurable time period.
- Ability to set a custom courtesy tone on the end of transmission.
See the full list of configuration items on the CONFIGURATION page.
Hardware requirements
The simplest hardware/software requirements are:
- A RaspberryPi - I test Pirrot on the RaspberryPi 3, 4 and the Zero W but should work on other models too!
- RaspberryPi OS 12 (bookworm) is recommended but older versions of Pirrot will run on Raspbian version 9 (stretch), 10 (buster) and 11 (bullseye) too! You can install and use either the "lite" or "desktop" versions of Raspbian (I would personally recommend the "lite" version as it uses fewer system resources especially if you intend to run it headless).
- An external USB sound card.
I will update the installer to support newer versions of Raspbian as and when they are released by the Raspberry Pi Foundation.
Assuming you wish to use this with a radio transceiver and do not wish to use "VOX mode", you will also need to wire up the transceiver's PTT button to the PTT relay pin on your RaspberryPi's GPIO pin (by default this is GPIO Pin #23, although you can adjust as required in the configuration file found at /etc/pirrot.conf).
The audio in (receive) and audio out (transmit) connectors from your radio will need to be connected to the external USB sound card using the Mic Jack (for Transmit) and Speaker Jack (for Receive).
If you plan to use the repeater in COS/COR mode you will need to connect your COR GPIO pin to the transceiver.
Installation
Pirrot can be installed using Git or by downloading the latest tarball (find the version number here), installation steps are as follows:
To install using Git (the recommended way - this supports easy future updates using 'pirrot update' command) run the following commands at the terminal:
sudo apt-get install -y git
sudo git clone --single-branch --branch latest-stable https://github.com/allebb/pirrot /opt/pirrot
cd /opt/pirrot
sudo make install
Alternatively, you can install Pirrot by downloading the latest tarball, replace the X.X.X with the latest version available from the (releases page):
cd ~
wget https://github.com/allebb/pirrot/archive/vX.X.X.tar.gz
sudo mkdir /opt/pirrot
sudo tar xf vX.X.X.tar.gz -C /opt/pirrot --strip 1
cd /opt/pirrot
sudo make install
Once installed, Pirrot will start automatically at boot up (ensure your USB audio adapter is connected though!)
Configuration options
The Pirrot configuration file is found in /etc/pirrot.conf, a full list of settings and descriptions can be found on the configuration page.
When making changes to this file please ensure that you restart the Pirrot daemon by running sudo service pirrot restart to ensure that the changes to take affect.
Sound adjustment
Using the alsamixer command in the terminal you can adjust your microphone and speaker volumes if required.
If you do adjust the volume, remember that to permanently save these settings use the alsactl store command to ensure they are kept after reboot.
Default GPIO pins
By default, the Pirrot configuration file, located in /etc/pirrot.conf has default GPIO pins configured, these are as follows:
- GPIO 18 - COR Signal (Input/Relay) - Triggered when the radio squelch is opened.
- GPIO 23 - PTT Switch (Output/Relay) - Triggers the PTT on the radio to transmit.
- GPIO 17 - Power/Ready LED (Output/LED) - Illuminates when the Pirrot daemon is running (indicating that the repeater is ready and working).
- GPIO 27 - Receive LED (Output/LED) - Receiving transmission (Illuminated when COR signal is high non-functional in VOX mode).
- GPIO 22 - Transmit LED (Output/LED) - Transmitting transmission (Illuminated when the repeater is ident-ing/playing back a transmission).
Remember: When making changes to the /etc/pirrot.conf file you must restart the daemon using the sudo service pirrot restart command.
Uninstalling
If you wish to uninstall Pirrot at a later date, you can run:
cd /opt/pirrot
sudo make uninstall
PCB Interface (for Simplex mode)
This PCB interface design and PCB schematic has kindly been designed and contributed by Peter Javorsky (@tekk); and provides a simple interface (if you don't want to build your own circuit) to connect your radio(s) to a Raspberry Pi running Pirrot.


You can find out more about the PCB and interface here.
You can edit or order the fabrication of this PCB online at: https://easyeda.com/integrac/rpi-repeater
If you use this interface board, you should configure the Pirrot output pin settings (in /etc/pirrot.conf) with the following values:
| Description | Setting Name | Value to be set |
|:----|:--------------|:------------|
| RaspberryPi PTT pin | ptt_pin_invert | false |
| RaspberryPi COR pin | cos_pin_invert | true |
Remember to restart Pirrot by running sudo service pirrot restart for the changes to take affect.
PCB Interface (for Duplex mode)
Duplex operation mode is new since v2.0.0 and as such a PCB design is not yet available.
In Duplex mode, Pirrot provides all the same features (audio recordings, weather reports, web hooks etc.) that Simplex mode does with the exception that VOX triggered transmissions are not supported.
When running in Duplex mode you should create a custom wiring loom between the RX and TX radios, the audio output from the receive radio should be connected to the audio input of the transmit radio in addition to feeding the MIC IN port on the Raspberry Pi connected USB Audio device. The AUDIO OUT (Speaker) from the USB Audio device from the Raspberry Pi should also be connected to the transmit radio's audio input; using alsamixer (more info on this above - see the "Sound adjustment" section) you can then balance the audio levels as desired.
The decision was taken not to use audio loopback in software (alleviating the need for direct connection between the TX and RX radios) given latency issues during testing (hence the need for a custom wiring loom), the result however is that Pirrot can provide all the same functionality as when it is running in Simplex mode whilst ensuring audio latency is not an issue.
We hope to provide a PCB design soon for a Duplex compatible interface.
The optional web interface
Since v2.0.0 of Pirrot, I have implemented a light-weight admin web interface that provides easy access using a remote computer or table device to update Pirrot settings, view hardware stats (temperature, CPU and RAM utilisation, and disk usage etc.) as well as access and listen to and/or download transmission recordings (if enabled in the config file too).
Pirrot is designed to run on resource restricted SBC's as well as battery operated systems in the field and therefore, by default, I have taken the decision to disable the admin web interface by default to ensure that Pirrot and your Raspberry Pi uses as little power and resources as possible out of the box.
If however system resources and power consumption is not an issue for you/your intended use, you can easily enable it; when enabled, the web interface will be available and accessible using: http://{ip-address}:8440, you will be prompted for access credentials, by defa
Related Skills
openhue
352.2kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
352.2kElevenLabs text-to-speech with mac-style say UX.
weather
352.2kGet current weather and forecasts via wttr.in or Open-Meteo
casdoor
13.3kAn open-source AI-first Identity and Access Management (IAM) /AI MCP & agent gateway and auth server with web UI supporting OpenClaw, MCP, OAuth, OIDC, SAML, CAS, LDAP, SCIM, WebAuthn, TOTP, MFA, Face ID, Google Workspace, Azure AD
