SERVET XII: following a stratospheric balloon live up to 34 km with LoRa, SSDV and Telegram

Paracaídas amarillo y azul extendido sobre el rastrojo, con la línea de cápsulas de Servet XII tendida detrás

On 25 October 2026, around 12:20 local time, we launched SERVET XII from Lumpiaque (Zaragoza, Spain). It climbed for 83 minutes up to 33,933 m and landed a little over 2 hours after launch. Meanwhile, one of its capsules put LoRa radio image transmission with SSDV to the test, besides sending its position and altitude. Everything could be followed live, from any phone, on a public Telegram channel.

This post describes one of the Servet XII capsules (the one with the LoRa radio transmitter), how the receivers work, how the flight went, what results we got from the radio link and what we learned.


1. The idea

The main idea was to test image transmission over LoRa radio with SSDV from the stratosphere: how many photos get through, at what distance and with what link quality, using the SF9 setting (125 kHz, 17 dBm). One of the capsules carried a LoRa transmitter with a GPS; on the ground, two receivers listened and published what they received on the Internet, so that anyone could watch it live.

How we followed SERVET XII One of the balloon capsules transmits by LoRa radio at 869.525 MHz. Two ground receivers, one at home on WiFi and one in the car on mobile data, receive it and upload it to the public Telegram channel, which can be viewed from any phone. Servet Capsule LoRa + GPS transmitter LilyGO T-Beam LoRa radio 869.525 MHz Receiver 1 At home (balcony) LilyGO T3-S3 WiFi Receiver 2 In the car LilyGO T3-S3 Mobile data Internet Internet Telegram channel public and live t.me/sondaservet Position, altitude, speed, battery and SSDV photos Viewable from any phone Telemetry every 30 s · one photo every 5-8 min (255-byte SSDV packets)
How we followed SERVET XII: one of the capsules transmits by radio, the ground receivers pick it up and publish it on Telegram.

Telegram channel: Servet HAB (https://t.me/sondaservet).


2. One of the Servet XII capsules: the transmitter

PartDetails
BoardLilyGO T-Beam V1.2: ESP32 microcontroller, u-blox GPS module, LoRa SX1276 radio, AXP2101 power management
PowerOne 18650 battery (4.10 V at the start, 3.85 V, 73%, when tracking ended)
GPSu-blox in “Airborne” mode (<1 g), the mode that keeps working above ~12 km. Ceramic patch antenna, connected with a u.FL cable
Radio869.525 MHz (the European 868 MHz licence-exempt band), LoRa SF9, 125 kHz, 17 dBm (50 mW). Vertical antenna hanging below this capsule
CameraNone on board. The images were 8 test photos stored in the microcontroller’s memory and sent in a loop
MountingThe suspension cord runs through this capsule from top to bottom; the radio antenna hangs below it and the GPS antenna sits on top, facing the sky

What it transmits, and how often

  • Telemetry every ~30 s (38 bytes): position, altitude, vertical and horizontal speed, heading, satellites, battery, power-manager temperature, UTC time and image counters.
  • Images as SSDV packets (255 bytes each), one every ~13 s. A 256×192-pixel photo takes 21 to 37 packets, that is, 5-8 minutes per photo.
  • That pace is not arbitrary: in the 869.4-869.65 MHz band you can transmit at most 10% of the time, and SF9 takes ~1.3 s per large packet.

Every photo carries an overlay: name, altitude, date, UTC time and coordinates. That way each pass of the same image is different, and any screenshot tells you when and where it was received.

Image 19, received at 6,648 m at 11:37:20 UTC
Image 19 received during the ascent (complete). The bottom bar is the overlay added by the transmitter: SERVET XII, altitude 6,648 m, date, UTC time and coordinates.

3. The receivers

  • Board: LilyGO T3-S3 (ESP32-S3, SX1262 radio and OLED display).
  • What they do: they listen, rebuild the SSDV images packet by packet and upload everything to Telegram through a bot.
  • Two receivers during the flight:
    • Rx #1 (🏠 home): on a balcony, on the home WiFi.
    • Rx #2 (🚗 car): in the car, using the phone’s hotspot.
  • What each one publishes: a message at start-up, a status message that is edited every minute (whether it sees the balloon, signal, packets), a new message with every telemetry packet (one value per line, with a map link), the live position and every photo that gets completed, or a partial one if packets are missing.
  • OLED display: five pages (flight, position, link, image and battery) that cycle automatically.
  • Each receiver has its own icon so they can be told apart at a glance in the channel.

4. How the flight went

The launch was prepared in the Lumpiaque sports hall, with participants checking their capsules and experiments until the last moment.

Photos: Alejandro Suarez and Adolfo Amella.

And the lift-off, on video:

The Servet XII lift-off. Video: Adolfo Amella.

Times are UTC; local time was UTC+1.

Time (UTC)What happened
~11:20:50Launch (estimated: the signal at the car receiver drops suddenly and the board starts to cool down)
11:32First GPS fix, at 4,722 m
11:32-12:43Steady climb at 6.3-6.8 m/s. Strong wind between 8 and 10 km, up to 131 km/h. At 10 km, on the way down, the sensor read -22 °C
12:43:56Official maximum altitude: 33,933 m, about 53 km from the home receiver. The balloon burst at that altitude (the last thing our transmitter received before the burst was 33,902 m)
12:45-13:05Fast descent, with peaks of -34.6 m/s at about 25 km, slowing down as it reached denser air
13:05:22Last data received: 8,610 m altitude, 72.5 km from the receiver, with an RSSI of -114 dBm
13:27 (14:27 local)Landing in Chiprana (Zaragoza province, Bajo Aragón-Caspe county), at 41.22827 N, 0.18506 W: about 21 km beyond the last position received

Tracking figures:

  • Telemetry reached Telegram throughout the flight, with 3 to 12 GPS satellites and good HDOP even at 34 km. The Airborne mode worked.
  • Distance flown: about 97 km from Lumpiaque to the last position received (83 km in a straight line), and about 119 km including the final stretch to the landing site.
  • Link quality: RSSI between -104 and -122 dBm and SNR down to -13 dB, right at the limit of what SF9 can decode (-12.5 dB). Even so, telemetry got through almost every time.
  • Losses: during the ascent about 7% of the image packets were lost. Near the maximum altitude, with the weakest signal, it rose to a third.
  • Images: 15 different images in flight, 24 uploaded to the channel. Three arrived complete (17, 19 and 21) and the rest partial; some with 90% of the packets (image 22: 34 of 37). In total the channel stored 389 images, counting earlier tests.
  • The car receiver (Rx #2) powered off at 11:29 UTC (it did not stop receiving data), so the home receiver covered almost the whole flight.
  • Landing: in the municipality of Chiprana (Zaragoza), about 103 km in a straight line from Lumpiaque, and about 21 km after the last data received. No receiver saw the last kilometres of the descent.

This is what the equipment looked like at the landing site, near Chiprana:

Photos: Alejandro Suarez and Adolfo Amella.

Interactive flight map

Flight path, every telemetry point (coloured by signal quality) and the photos placed where they were received, with the average signal quality for each one. Click a point or a photo for details. Dashed points are approximate positions (interpolated, or estimated before the first GPS fix). Use the full-screen button to enlarge it, or open the map in a new tab.

3D view, with altitude to real scale: the vertical curtain links the flight path to the ground, and you can play the flight back with the button at the top right. Open the 3D map in a new tab.


5. Results and what we learned

What we measured on the LoRa link (SF9, 17 dBm) – Range: up to 72 km from the receiver with the balloon at 8.6 km altitude (last data received, RSSI of -114 dBm). With the balloon at its ceiling, at 34 km altitude and about 53 km from the home receiver, telemetry kept coming in with an RSSI of -120 to -122 dBm. – Link quality: RSSI between -104 and -122 dBm and SNR down to -13 dB, at the limit of what SF9 can decode (-12.5 dB). Near the ceiling only a few dB of margin were left. – Losses: during the ascent about 7% of the image packets were lost; near the ceiling, with the weakest signal, a third. – Images: 15 different images and 24 uploads to the channel. Three arrived complete and several had more than 90% of the packets (image 22: 34 of 37; image 26: 34 of 35). With SF9 and the 10% airtime limit, a 256×192-pixel photo takes 5 to 8 minutes. – Telemetry: it got through almost every time, even at the edge of the link, because its packets are much shorter (38 bytes versus 255) and tolerate weak signals better. – A worst case: the home receiver was on a balcony between buildings and the car receiver powered off early. We suspect that with an antenna in a clear spot the margin would have been larger.

Conclusion: SF9 at 17 dBm is enough to follow the balloon’s telemetry beyond 50 km and to receive photos, although with losses when the signal approaches the limit. To receive complete photos at the very top, more margin is needed.

Also worked well: the GPS Airborne mode (3 to 12 satellites even at 34 km), telemetry every 30 s, the automatic upload to Telegram and using two receivers at once.

What gave us trouble (and how we fixed it) 1. Very slow Telegram uploads (10-23 s per request). It was the ESP32’s WiFi power saving. Turning it off (WiFi.setSleep(false)) brought it down to ~1 s. 2. No GPS fix during a test walk. It was a bad contact in the u.FL connector of the ceramic antenna. Reseating it, securing the cable and placing the ceramic face up fixed it. 3. Stale position: the transmitter repeated the last position when it lost the fix, because the GPS library treats a position as valid forever. The age of the data is now checked. 4. SNR is misleading with a strong signal: it stays at ~11 dB at both -10 and -60 dBm. The real margin has to be read from the RSSI. 5. Street-level range is short (about 340 m, with the receiver on a balcony between houses), but in the air, with line of sight, it is a different story.

Next time – More link margin: SF10 (+2.5 dB, photos take twice as long), antennas on the car roof, and a transmitter antenna that works better with the balloon almost overhead, where our vertical antennas have less gain. – A real camera (ESP32-S3-CAM) with the same overlay system. – More receivers spread along the route, some with a different connection (mobile coverage runs out too).


6. Technical details for the curious

  • Software: PlatformIO with Arduino-ESP32; SSDV by fsphil (quality 4); JPEG encoded on the ESP32 itself with stb_image_write and decoded with JPEGDEC; a separate task uploads to the Telegram API over HTTPS.
  • Link: LoRa 869.525 MHz, SF9, BW 125 kHz, CR 4/5, 17 dBm (≈ 80 mW EIRP with a 2 dBi antenna, below the band’s 500 mW limit).
  • Flight data: 4,564 messages in the channel, 3,476 of them telemetry, and 389 images.

Want to follow the next flights? Telegram channel: Servet HAB.

Scroll to Top