Just received my TinyGS kit! Where should I start?

Hi everyone!

My TinyGS hardware kit just arrived today (Heltec LoRa 32 board, antenna, case, and accessories). I’m very excited to set it up, but looking at the parts spread out on my desk, I’m a bit overwhelmed on where to begin.

Should I start by flashing the firmware via the web installer, or assemble the hardware and antenna connections first?

Any advice, tips, or “lessons learned” for a beginner starting with TinyGS would be greatly appreciated!

73!

1 Like

just flash… im not patient. but at least connect the antenna first

2 Likes

Thank you for all the great advice!

I just ordered a USB Type-A to Type-C data cable. Once it arrives, I’m ready to start flashing the firmware and assembling the hardware.

I’ll keep you posted on how it goes. Thanks again!

73!

Hi, it is very important NOT to use the inluded so called “antenna” :slight_smile: - this does not work at all. you find a lot of stuff about TinyGS on my QRZ-page OE6ISP - Callsign Lookup by QRZ Ham Radio , and in case you are not familiar with this topic – a short description how to build a groundplane-antenna, which is not only the best point to start, but in my opinion the best antenna for this purpose.

When you are familiar with visual code, you should compile the firmware yourself, which gives a lot of flexibility. The sources are available from github GitHub - tinygs/tinyGS: 📡 Open Ground Station Network 🛰 · GitHub, where you can pull the latest betas with new functionality as well as the stable releases.

73,

Stefan/OE6ISP

4 Likes

Hi Stefan,

Thank you so much for the fantastic advice and the reference to your QRZ page!

I checked out your page (OE6ISP) and was really impressed by your setup and the groundplane antenna guide. I will definitely keep that in mind and look into upgrading from the stock antenna.

My USB cable is on its way, and I’m getting more and more excited to dive into this project. Thanks again for sharing your expertise!

73!

1 Like

幸夫さん、Read this first.

1 Like

Update on the Heltec V3 (ESP32-S3) setup:

Following up on the earlier Wi-Fi/MQTT tests, I’ve completely bypassed wireless dependencies to achieve maximum stability for satellite signal monitoring.

  • Hardware/Wired Bridge: Connected the Heltec V3 directly via USB-C to my main Debian 13 server (the NEC machine), which runs parallel alongside its primary role as my SatNOGS server.

  • Data Flow: The device runs in a minimal serial-output mode (Serial.println()), streaming JSON payloads straight through /dev/ttyUSB0.

  • Backend Processing: A robust Python bridge script (serial_to_mqtt.py) on the server captures the serial stream in real-time and publishes it locally to the Mosquitto MQTT broker.

No more router dropouts or AP isolation issues—just a rock-solid, hardwired data pipeline feeding right into the heart of my station setup, perfectly primed for serious LoRa satellite tracking!

Status Update: Stepping back for today! :sweat_smile:

  • What went right: Successfully built the wired direct connection to the NEC Debian host and got the serial data pipeline nicely structured.

  • Where it went wrong: But wait—the Heltec V3 is refusing to cooperate properly, and after diving head-first into a pointless troubleshooting rabbit hole with AI, I am officially stuck in the mud and unable to move an inch!

Bailing out for today and calling it quits. Time to step away before things get worse!

1 Like

Hello everyone!

I would like to share my setup for tracking and receiving LoRa satellite downlinks using a low-cost, compact node.

1. Hardware Stack

  • MCU/Radio: Heltec WiFi LoRa 32 (V3) featuring ESP32-S3 and onboard SX1262.

  • Host Machine: Linux (NEC machine running Python, MQTT broker, and Skyfield).

  • Connection: USB Serial (/dev/ttyUSB0 via CP210x, 115200 bps).

2. Key Hardware Gotchas & Fixes (for Heltec V3)

Getting the SX1262 on the Heltec V3 to initialize properly required a few specific configurations in RadioLib:

  • Power: Vext (GPIO 36) must be pulled LOW to supply power to the RF section.

  • TCXO: Voltage must be explicitly set to 1.8V.

  • RF Switch: DIO2 must be enabled as an RF switch (radio.setDio2AsRfSwitch(true)).

  • Explicit SPI Initialization: SPI.begin(9, 11, 10, 8); with module pins mapped to (8, 14, 12, 13).

3. Software Architecture

  • Orbit Calculation (sat_commander.py): Uses Skyfield with local TLE data (CelesTrak amateur group) to calculate pass events (Rise, Culmination, Set) for target satellites (e.g., NETSAT-1) based on observer location (Hirosaki, Japan).

  • MQTT & Serial Bridge (mqtt_serial_bridge.py): Listens to the heltec/control MQTT topic and translates target parameters into serial commands (SET,FREQ:<val>,BW:<val>,SF:<val>).

  • Firmware (sketch.ino): Parses incoming serial commands dynamically and applies real-time frequency adjustments (crucial for tracking Doppler shifts) using RadioLib while continuously monitoring for downlink packets with RSSI/SNR feedback.

4. Arduino Firmware Snippet

C++

#include <RadioLib.h>

SX1262 radio = new Module(8, 14, 12, 13);

void setup() {
  Serial.begin(115200);
  while(!Serial);
  delay(1000);
  
  // Power up Vext and initialize SPI
  pinMode(36, OUTPUT);
  digitalWrite(36, LOW);
  delay(100);
  SPI.begin(9, 11, 10, 8);

  // Initialize RadioLib with 1.8V TCXO
  int state = radio.begin(435.6, 125.0, 9, 5, 0x34, 10, 8, 1.8);
  if (state == RADIOLIB_ERR_NONE) {
    radio.setDio2AsRfSwitch(true);
    radio.startReceive();
  }
}

void loop() {
  if (Serial.available() > 0) {
    String command = Serial.readStringUntil(10);
    command.trim();
    if (command.startsWith("SET")) {
      // Parse and apply frequency/BW/SF dynamically for Doppler tracking
      parseAndApplyCommand(command);
    }
  }

  // Packet reception check
  if (radio.getPacketLength() > 0) {
    String recvStr = "";
    if (radio.readData(recvStr) == RADIOLIB_ERR_NONE) {
      // Log packet, RSSI, and SNR
    }
    radio.startReceive();
  }
  delay(10);
}

This setup bridges orbital calculation directly down to a low-cost embedded LoRa receiver, enabling smooth real-time parameter tuning for satellite passes. Feedback or suggestions are always welcome!

73!

:warning: Current Status Note: Please note that this is an interim report. While I have successfully verified the hardware initialization, MQTT-to-serial bridging, and dynamic parameter tuning, I have not yet confirmed actual reception or decoding of live LoRa satellite downlinks in the field. I hope to share a follow-up report once I successfully capture a pass!

1 Like

Mini Update:

Managed to get the virtual environment and skyfield sorted out on the Linux host (Debian), and finally booted up both the MQTT-to-serial bridge and the orbit commander script!

As you can see in the terminal screenshot below, the bridge is successfully hooked up to /dev/ttyUSB0 listening on heltec/control, and the tracker has successfully pulled the TLE data, showing upcoming passes (like AO-7 starting around 16:55 JST).

Fingers crossed—I’m hoping to test out actual live tracking. To be honest, I’m a bit skeptical if that tiny stock antenna bundled with the kit can actually pull in a signal, but I’m excited to find out!

Any thoughts or advice as I step into the live test phase are always welcome. 73!

so in this thread you trying to build your lora receiver firmware that connected to your pc to decode. right?

2 Likes

Hi bali!

Yes, exactly! I’ve just updated and modified my Python script on the PC (handling orbit calculation via Skyfield and MQTT bridging) into a persistent monitoring loop, and I’m currently waiting for the next pass to test it out live.

Fingers crossed it works—I’ll be sure to share how the live test goes soon! 73!

Update: Success! :tada:

After some troubleshooting with the firmware and flashing, the display is finally alive and showing “LoRa Gateway” correctly!

I’ve now integrated it with an automated Linux server pipeline (using Skyfield for satellite pass calculation, an MQTT-serial bridge, and SQLite logging) running persistently via systemd. Everything is fully automated now—ready to track AO-7 passes without manual terminal intervention!

Thanks for all the inspiration, and good luck with your setups! 73!

2 Likes

nice progress

1 Like

What antenna are you using for your TinyGS setup? (TinyGSのセットアップにはどんなアンテナを使っていますか?)

  • Stock antenna (tiny rubber duck) (付属のアンテナ/小さなホイップ)
  • Upgraded rubber duck / Mobile whip (少し大きめのホイップ・モービルアンテナ)
  • DIY Dipole / Wire antenna (自作ダイポール/ワイヤーアンテナ)
  • Yagi / Directional antenna (八木アンテナ/指向性アンテナ)
  • Collinear / Omnidirectional base antenna (コリニア/無指向性基地局用アンテナ)
  • Other (please comment below) (その他:コメント欄へどうぞ)
0 voters

just follow the best advice from one of our great tinygs master. 1/4 GP is awesome antenna

1 Like

Exactly this one!

:backhand_index_pointing_right: How to Build a 1/4 Wave DIY Ground Plane Antenna for 433MHz

Thanks for the great tip! I’m definitely going to check it out and upgrade from the stock rubber duck.

Even though there are many different antennas in my station overview, most of them are experimental or for very specific purposes, where they provide the best performance. For general purpose applications, the groundplane is by far the best. It offers pretty the same performance as the j-pole, but I cannot recommend the j-pole, because it is difficult to tune and decouple from the feed-line, as it has no ground-plane as reference. The 165mm groundplane based on a N-connector (SMA and PL are not waterproof!) is easy to assemble and does not need any tuning, because its SWR is usually below 1.5 after assembly. Circular polarized omnidirectional antennas like QFH, turnstile or eggbeater are working to a certain degree, but with a permanent 3dB loss, as the satellites are usually linear pol.

https://tinygs.com/station/OE6ISP_2 - 400MHz - 460MHz, LoRa priority, collinear antenna, sometimes groundplane

https://tinygs.com/station/OE6ISP_1 - 400MHz - 460MHz, LoRa priority, eggbeater antenna shared with SatNogs

https://tinygs.com/station/OE6ISP_3 - 137MHz, LoRa priority, groundplane antenna

https://tinygs.com/station/OE6ISP_6, 400MHz - 460MHz, FSK priority RHCP crossyagi, 18.4dBi shared with SatNogs

https://tinygs.com/station/OE6ISP_8, 400MHz - 460MHz, FSK priority RHCP crossyagi, 18.4dBi shared with SatNogs

https://tinygs.com/station/OE6ISP_868_2, 868MHz and 915MHZ bands, Lora only, yagi, 10dBi

by clicking on the links, you can see the different performance data and radiation heat-maps

2 Likes

Thank you so much for the detailed explanation and sharing your station links!

It’s super helpful.

For now, I’ve detached the tiny stock antenna and attached a telescopic whip antenna adjusted to 165mm as a temporary setup.

Of course, I’m planning to build a proper ground plane antenna and swap it out as soon as possible!

Thanks again for all the great advice.

2 Likes

Hello everyone,

I’m having an issue with my Heltec V3 module running TinyGS. The display is stuck indefinitely on the “LoRa Gateway” screen, and I cannot seem to get any serial output from it.

My setup:

  • Hardware: NEC server (running Debian) connected via USB to a Silicon Labs CP210x UART Bridge (Heltec V3) and an RTL-SDR Blog V4.

  • The device is correctly recognized as /dev/ttyUSB0 (lsusb shows the CP210x bridge), and the orange LED on the board is slowly blinking.

  • However, when I try to read the serial port using screen or cat (even after stopping any background services that might conflict), no data flows, or it immediately terminates.

Has anyone experienced a similar issue where the board gets stuck on the “LoRa Gateway” screen with no serial logs? Any advice on how to troubleshoot this would be greatly appreciated!