TinyGS SDR Ground Station
TinyGS
TinyGS is an open network of Ground Stations distributed around the world to receive and operate LoRa satellites, weather probes and other flying objects, using cheap and versatile modules.
Currently, the project is based on ESP32 boards and it is compatible with sx126x and sx127x LoRa modules.
In this tutorial, you will build your own SDR based ground station and connect it to the tinyGS network, expanding the network.
Ground Station Setup
The archeicture is heavly inspired from the SatNOGS project; any linux PC attached to a SDR and RF frontend can act as a ground station.
Hardware
Assuming you do not already have a running ground station. All you need is a linux PC (a raspberry pi is a good choice) along with a SDR of your choice a cheap rtl sdr will suffice and finally a antenna tunned to the band of your choice.
LoRa satellites primarily operate across sub-GHz ISM (Industrial, Scientific, and Medical) bands.
- 70-Centimeter Band (430–440 MHz)
- MetSat Band (401–403 MHz):
- 33-Centimeter Band (902–928 MHz)
- ISM Band Some sutiable antennas are the QFH, Egg beater, Turnstile; read more about them in the SatNOGs antennas section.
Software
On your linux PC make sure to install
- Python 3.9–3.13 and
pip. -
SoapySDR with the driver module for your SDR (this project uses the system
python3-soapysdrbindings, not a pip package). On Debian/Ubuntu:sudo apt install python3-soapysdr soapysdr-tools # plus the module for your device, e.g.: sudo apt install soapysdr0.8-module-rtlsdr # RTL-SDR # soapysdr0.8-module-hackrf soapysdr0.8-module-airspy ...If your SDR is an RTL-SDR, the kernel
rtlsdrdriver andrtl-sdruserspace tools are handy for sanity checks but not required:sudo apt install rtl-sdrNote: Because
SoapySDRisn’t on PyPI, the venv needs to see the system bindings:- either create the venv with
python -m venv --system-site-packages .venv, or - add the system
dist-packagesto the venv via a.pthfile (.venv/lib/python3.13/site-packages/soapysdr.pthcontaining/usr/lib/python3/dist-packages).
- either create the venv with
- Optional but highly recommended: a 0.5–0.4 s spectrum/decoder sanity tool,
rtl_test(ships withrtl-sdr) orgqrxfor a live waterfall.
TinyGS Python Library
TinyGS-SDR is a UNOFFICIAL REIMPLEMENTATION of the ESP32 TinyGS firmware source code at github.com/G4lile0/tinyGS (commit at time of analysis). The library handles MQTT-TLS connection to mqtt.tinygs.com allowing it to receive satellite assignments and publish packets to the server.
Install it from PyPI:
python -m venv .venv && source .venv/bin/activate
pip install tinygs # the station library + softlora decoder
pip install 'tinygs[sdr]' # the RTL-SDR Python backend
The tinygs package pulls in the softlora dependency, a complete Python implementation of the LoRa physical layer (PHY) decoder (source).
Get TinyGS credentials (Telegram bot)
Credentials come from the TinyGS Telegram bot, not from the website:
- Open Telegram and message @TinyGS_bot (the official TinyGS bot).
- Send
/mqttto the bot. - The bot replies with your MQTT username and password for
mqtt.tinygs.com. Keep both, they are yourTINYGS_USER/TINYGS_PASSWORD.
Sanity Check before going live
With the SDR plugged in, confirm SoapySDR sees it:
SoapySDRUtil --find # lists every attached device
SoapySDRUtil --probe="driver=rtlsdr" # (adjust driver) — shows gains, ranges
Register Station with CLI
Run
tinygs-create
to create your station, you will be prompted to enter the following:
- MQTT username — from the TinyGS Telegram bot /mqtt
- MQTT password — same place; hidden as you type
- Device MAC — 12 hex chars (e.g. AABB11223344); becomes the MQTT client id (cli.py:118) use
ip linkon linux to get your mac adress - Station name — shown on portal + used in MQTT topics (e.g. my_sdr_station)
- Latitude / Longitude / Altitude — required for pass geometry & map
- Auto-Tune weblogin URL on connect? — answer Y
- RTL-SDR settings — sample rate (250000), gain (30), device index (0), chunk size (65536); blanks use defaults
Check your station
Once you run the create command you should receive a welcome message from tinygs telegram bot, if you request a weblogin link you can see your dashboard
By defualt the station is set to offline until you set it to run. In order to receive satellite assignments and observations, you need to do 2 things
- Run
tinygs-run, which activates the station - Enable auto tune from dashboard. Click on your station> operate > enable auto tune. the number next to enable is the frequency your station is tuned too.
Enjoy Reading This Article?
Here are some more articles you might like to read next: