-
Flash the image to an SD card (https://etcher.balena.io/#download-etcher): (The device already includes a freshly flashed SD card — you can skip this step and go straight to step 2.)
https://storage.googleapis.com/rf-guru/rpi-images/hotspot-2025-12-09.img.gz
-
Insert the SD card into the Raspberry Pi Zero 2W and power it with a stable 5V supply (usb port on the far right of the device).
-
Wait for it to boot up. While waiting for boot you can subscribe to our RF Guru's Analog Hotspot mailinglist. https://listmonk.rf.guru/subscription/form
-
Connect to the Wi-Fi AccessPoint of the Hotspot SSID:
AccessPopup
Password: 1234567890 -
Open the dashboard:
http://192.168.50.5/ (or http://hotspot.local) -
Open Shell → log in:
- Username:
hotspot - Password:
hotspot
- Username:
-
Configure Wi-Fi (add as many networks you want, but do not remove AccessPopup):
sudo nmtui(YouTube how-to) https://youtu.be/EJn0JkStWuY
Note: When you save a new Wi-Fi network, the hotspot may immediately connect to it and disable the AccessPopup access point. Your PC will then lose the AccessPopup Wi-Fi connection (this is normal). Just connect your PC to your own Wi-Fi network, then reopen the portal via: http://hotspot.local (or use the announced IP address if mDNS is not available) login hotspot/hotspot and go to step 12.
-
Reboot:
sudo reboot -
After reboot, connect via:
- http://hotspot.local
or - the spoken IP address announced over RF (434.925 MHz — FM Narrow | 145.925 MHz — FM Narrow)
- If this does not work, check whether the AccessPopup network is still being broadcast over Wi-Fi. If it is, something went wrong while entering your network details. Go back to point 6 and repeat the setup.
- Start configuration:
Use your own email adress ! And use real coordinates, some reflectors do not like hotspots info to be hidden ! Look at the local AUP!
sudo hotspot-config(video demo https://youtu.be/bKF9JRo0ORM?t=125)
-
For Belgian users, set the domain:
be.svx.link is the domain, the portal of this domain is https://portal.be.svx.link
-
After initial configuration, your SVXReflector sysop must sign your certificate.
Once signed, your hotspot is fully operational. -
Continue setup:
We encourage everyone to leave Temperature tuning on !
Some people find the callsigns announcements in QSO's ennoying, you can turn this on or off here!
sudo hotspot-options- Belgian users can update talkgroups + button presets:
sudo hotspot-on-webportal- You are now ready to rumble 🎙️📡
for the 4G version install the module via: (it's default configured for the https://alwaysconnected.eu/ provider)
sudo install-4gmoduleConfigure another provider
sudo hotspot-4g-config- RF.Guru Analog Hotspot/Transceiver
https://shop.rf.guru/collections/hotspot
300–500 mW Output Power
Supports UHF and VHF on Raspberry Pi Zero 2W.
- 434.925 MHz — FM Narrow
- CTCSS Input: 88.5 Hz
- CTCSS Output: 250.3 Hz
- 145.925 MHz — FM Narrow
- CTCSS Input: 88.5 Hz
- CTCSS Output: 250.3 Hz
https://storage.googleapis.com/rf-guru/rpi-images/hotspot-2025-12-09.img.gz
https://listmonk.rf.guru/subscription/form
-
Connect to:
- SSID: AccessPopup
- Password: 1234567890
-
Open:
http://192.168.50.5/ -
Choose Shell.
- Username:
hotspot - Password:
hotspot
sudo nmtui
Reboot:
sudo reboot
If your router supports mDNS:
If not:
The hotspot announces its IP address over RF on the default frequency. (434.925 MHz — FM Narrow | 145.925 MHz — FM Narrow)
Tutorial video:
https://www.youtube.com/watch?v=bKF9JRo0ORM
D911#— Speaks IP address over RFhotspot-frequency— Quick frequency setuphotspot-options— Thermal + announcementshotspot-talkgroups— Talkgroup/CTCSS mappinghotspot-volume— Audio control
- Raspberry PI4
- Raspberry PI5
- Raspberry PiZero 2W
- Raspberry Compute Module 4
- Raspberry Compute Module 5
- Pin 3 → GPIO2
- Pin 6 → GPIO3
- Pin 35 → GPIO19
- Pin 8 → TX
- Pin 10 → RX
- Pin 12 → CLK
- Pin 32 → GPIO12 (COS input)
- Pin 36 → GPIO16 (PTT)
- Pin 38 → GPIO20
- Pin 40 → GPIO21
- Pin 31 → GPIO6
- Pin 33 → GPIO13
- Pin 25 → GPIO7
- Pin 29 → GPIO5
iOS does not broadcast the hotspot SSID continuously.
Open Settings → Personal Hotspot to force visibility.
sudo tail -f /var/log/svxlinkTo activate a talkgroup, send the corresponding CTCSS tone from the mapping while in TG0.
You’ll hear a bleep tone 15 seconds after a QSO. This will instantly open the talkgroup – no need for double presses like before. You can start speaking immediately!
Alternatively you can use:
DTMF 91<TALKGROUP>#
To get the current IP address of the hotspot, send:
DTMF D911#
To set up multiple talkgroups for monitoring, configure them in hotspot-config using this format:
8++, 23+, 50, 51, 52, 53, 54, 55
The TX CTCSS tone remains the same across all talkgroups. The plus signs (+) indicate priority levels.
Temporarily monitor (for one hour) another talkgroup:
DTMF 94#
Example for TG23:
9423#
You can map talkgroups via CTCSS tones using the following format:
tone:talkgroup, tone:talkgroup, …
Example default mapping:
67.0:8400, 69.3:8, 71.9:23, 74.4:9000, 77.0:50, 79.7:51, 82.5:52, 85.4:53, 88.5:54, 91.5:55
Mapping a single default talkgroup:
88.5:8
This maps CTCSS tone 88.5 to talkgroup 8.
You can access the local dashboard:
- Via hostname (if your network supports mDNS)
- Or via the hotspot’s IP address
We advise selecting a frequency not used by nearby repeaters. Do not use the ISM frequency 433.000 MHz.
Recommended defaults we use:
- 70 cm: 439.100 MHz
- 2 m: 145.250 MHz
- CTCSS: 88.5 Hz
Use a tone/frequency not locally used.
For the CTCSS TX tone best to pick on between 67 and 85.4 (best audio quality)
Enables a BLE GATT service so a phone or laptop can drive the hotspot (send DTMF, restart SVXLink, toggle 4G, watch live state) without SSH.
Install on the hotspot:
sudo /usr/sbin/install-bluetoothAfter install, the device advertises over BLE as its hostname. Pair from the companion app — no PIN, the hotspot auto-accepts on first connect.
If you're on the Belgian reflector, use SvxPortalApp:
https://github.com/Guru-RF/SvxPortalApp/releases
Currently available for macOS / Windows / Linux; iOS and Android will follow.
For everybody else: the portal app integrates deeply with the reflector and needs extra software running on the reflector side. If there's interest in deploying it on your own reflector, please get in touch.
There is also a standalone companion app that talks to any hotspot over BLE without any reflector-side dependency:
https://github.com/Guru-RF/Analog-HotSPOT-App/releases
Available for macOS / Windows / Linux; iOS and Android will follow. It has no map and you need to define the talkgroups manually.
Edit base talkgroups:
sudo vi /var/www/html/include/tgdb.phpEdit talkgroup buttons:
sudo vi /var/www/html/include/config.inc.php sudo rm -f /var/lib/svxlink/pki/*
sudo systemctl restart svxlinkConnect remotely to your hotspot.
https://connect.raspberrypi.com
Update the system:
sudo apt -y update
sudo apt -y upgrade
sudo rebootInstall rpi-connect
sudo apt -y install rpi-connect-lite
loginctl enable-linger
rpi-connect on
rpi-connect signinThe second USB port can be used for ethernet, or to attach an AMBE dongle for Bridging to DMR !
Extras useful when you're running the box as an actual repeater rather than a personal hotspot.
Watches GPIO16 (PTT) once per second. If the PTT line stays asserted (LOW) for more than 150 seconds, it assumes SVXLink is stuck in a keyed state and runs systemctl restart svxlink. While the pin is LOW, the script logs a countdown every 5 seconds.
Follow it live with:
sudo journalctl -t svxlink-watchdog -fInstall (no clone, no hotspot-config needed):
wget -qO- https://raw.githubusercontent.com/Guru-RF/Analog-HotSPOT-SVXLink/master/install-svxlink-watchdog.sh | sudo bashThe installer pulls the script + systemd unit, enables svxlink-watchdog.service, and starts it.
