Welcome to the radio amateur information page for the SERPENS mission. The satellite is composed by two separate sectors: Sector A and Sector B. All the communications, both in Sector A and Sector B, use amateur radio frequencies.

On August 16th 2015 the HTV5 Cargo Mission to the ISS correctly transported the SERPENS satellite to the ISS. The deployment into orbit and start of transmissions has been started September 17th 2015.

The SERPENS team wants to thank all the radio amateur community for the outstanding work they are doing to help the team to receive the satellite signals. AMSAT-BR received the first signals from SERPENS, only a few hours after the launch. For more information please check:

In particular, SERPENS team wants to thank the following radio amateurs: 

Edson PY2SDR, São Paulo, Brazil
Paulo PV8DX, Roraima, Brazil 
Roland PY4ZBZ, Minas Gerais, Brazil
Mike DK3WN, Germany 
Tetsu JA0CAW, Japan

We invite any radio amateur to receive the satellite telemetry and send the received data to A description of the telemetry for the different Sectors of the satellite and its TLE are shown below:


1 40897U 98067GX  15265.55398127  .00040420  00000-0  59124-3 0  9991
2 40897 51.6466 317.9116 0008510 326.4776 33.5667 15.55159848 679


Sector A transmits in VHF with frequency of 145.980 MHz, using GFSK modulation at 9600bps and standard AX.25 protocol. The callsign of the satellite is PY0ESA.


145.980 MHz



TX Baud Rate

9600 bps


Standard AX.25




Data Description

SERPENS Sector A transmit two different beacons. The first one occurs every 10 seconds with the message “SERPENS A”. This first beacon is implemented for easy identification of the satellite when searching for it. The second beacon is transmitted every 30 seconds and contains the main housekeeping data of the satellite.

The telemetry beacon sends the housekeeping data organized as in the following structure:


Struct Instant_Telemetry


unsigned char telemetry_header[2]; //”@T”


unsigned long internalRTC_unix_time; //


     unsigned long flash_param; //memory parameter


     //temp: degC = raw*125/2000

     int temp_fpga; //raw temp. measure 

int temp_mcu;  //raw temp. measure

int temp_li1;  //temp. measure in degC


     //L3GD20H @ 245 dps range

int gyr_x; //raw gyro measure

int gyr_y; //raw gyro measure

int gyr_z; //raw gyro measure



int mag_x; //raw mag. measure

int mag_y; //raw mag. measure

int mag_z; //raw mag. measure


unsigned char rssi; //radio rssi


unsigned char eps_telemetry[11]; //EPS telemetry

//Battery Voltage (V) = 0.0344*eps_telemetry[1]

//S. Panels Input (mA)= 2.3530*eps_telemetry[2]

     //Battery Current (mA)= 2.3530*eps_telemetry[3]

     //Systems Current (mA)= 4.7060*eps_telemetry[4]

//Line 01 Current (mA)= 2.3530*eps_telemetry[8]

     //Line 02 Current (mA)= 2.3530*eps_telemetry[10]   


unsigned char amateur_msg[5]; //payload message


unsigned char telemetry_crc; //CRC


In addition to the beacons, Sector A implements a simple storage and forward experiment. After commissioning phase of the satellite, two commands will be made available. One to upload one up to 12 bytes long message to the satellite, and another to download the current message stored onboard.


SERPENS Sector B transmits in UHF with frequency of 437.365 MHz, using CW/MSK modulation at 1200bps and CSP protocol.


437.365 MHz



TX Baud Rate

1200 bps






Sector B also receives data from HUMSAT compatible sensors in the frequency of 437.525 MHz, using GMSK modulation at 1200bps. For more information visit

Data description

SERPENS Sector B transmit in two different modes: Discovery Mode and User Mode.

During Discovery Mode the satellite will broadcast a CW beacon, with different parameters of the satellite, and a Telemetry beacon, every 150 seconds, with all the housekeeping parameters of the satellite. All the transmissions in Discovery Mode occur only in sunlight.

During User Mode the satellite will transmit data received from the HUMSAT compatible sensors stored on-board.

The telemetry packages that are transmitted periodically use the following structure:

Struct DiscoveryReport_0


  unsigned char[6] callsign;  // "SERP-B"

  unsigned uint8[3] header;  //

  uint8 id=0x18;  //

  uint32 timestamp;  //

  uint8 sid=0xA0;  //

  uint16 EPS_ADC1;  // Panel +Y1 current

  uint16 EPS_ADC2;  // Panel +Y temperature

  uint16 EPS_ADC3;  // Panel Y1 voltage

  uint16 EPS_ADC4;  // Panel -Y1 current

  uint16 EPS_ADC5;  // Panel -Y temperature

  uint16 EPS_ADC6;  // Panel X voltage

  uint16 EPS_ADC7;  // Panel -X current

  uint16 EPS_ADC8;  // Panel -X temperature

  uint16 EPS_ADC13;  // Panel +X current

  uint16 EPS_ADC14;  // Panel +X temperature

  uint16 EPS_ADC22;  // Panel +Z temperature

  uint8 SW_MODE;  // Current operational mode

  unisgned uint8[2] crc;  //



Struct DiscoveryReport_1


  unsigned char[6] callsign;  // "SERP-B"

  unsigned uint8[3] header;  //

  uint8 id=0x18;  //

  uint32 timestamp;  //

  uint8 sid=0xA1;  //

  uint16 EPS_ADC9;  // Panel Y2 voltage

  uint16 EPS_ADC10;  // Panel +Y2 current

  uint16 EPS_ADC17;  // Unregulated bus current

  uint16 EPS_ADC23;  // Battery temperature

  uint16 EPS_ADC25;  // Battery voltage

  uint16 EPS_ADC26;  // 5V bus current

  uint16 EPS_ADC27;  // 3V3 bus current

  uint16 EPS_ADC28;  // Battery current direction

  uint16 EPS_ADC29;  // Battery current

  uint16 EPS_ADC31;  // Panel -Y2 current

  uint16 EPS_STATUS;  // EPS status

  uint8 SW_LAST_TC;  // Last executed TC (ID)

  unisgned uint8[2] crc;  //



Struct DiscoveryReport_2


  unsigned char[6] callsign;  // "SERP-B"

  unsigned uint8[3] header;  //

  uint8 id=0x18;  //

  uint32 timestamp;  //

  uint8 sid=0xA2;  //

  uint32 TTC_RX;  // Total packets detected

  uint32 TTC_RX_ERR;  // Total packets with error

  uint32 TTC_TX;  // Total packets transmitted

  int16 TTC_PA_TEMP;  // Last PA temperature (temp A)

  int16 TTC_PCB_TEMP;  // Last TTC PCB temperature (temp B)

  int16 TTC_RSSI;  // Last detected RSSI

  int16 TTC_RFERR;  // Last detected RF error

  uint16 TTC_VOLTAGE;  // Last battery voltage (sampled by TTC)

  unisgned uint8[2] crc;  //



Struct DiscoveryReport_3


  unsigned char[6] callsign;  // "SERP-B"

  unsigned uint8[3] header;  //

  uint8 id=0x18;  //

  uint32 timestamp;  //

  uint8 sid=0xA3;  //

  uint16 TTC_CURRENT;  // Last TX current

  uint32 TTC_BOOTCOUNT;  // Total bootcount

  uint16 OBC_HUMPL_5V0;  // HUMPL overcurrent detection

  uint16 OBC_HUMPL_3V3;  // HUMPL overcurrent detection

  uint16 OBC_TTC_3V3;  // TTC overcurrent detection

  uint16 OBC_ANT;  // ANT deployment sensing

  uint16 OBC_REF_1V5;  // OBC 1V5 voltage reference

  uint16 OBC_REF_3V3;  // OBC 3V3 voltage reference

  uint16 SW_ECLIPSE_CURR;  // Result from the last operation of eclipse detection

  uint24 SW_ERROR_PRG;  // OBSW error code

  unisgned uint8[2] crc;  //



Struct DiscoveryReport_4


  unsigned char[6] callsign;  // "SERP-B"

  unsigned uint8[3] header;  //

  uint8 id=0x18;  //

  uint32 timestamp;  //

  uint8 sid=0xA4;  //

  uint16 EPS_ADC19;  //

  int32 SW_RTC_SKEW;  // Difference between RTC and STE

  int32 SW_RTC_DIFF;  // Duration of the last powerdown

  uint32 SW_NSDU_EXPE;  // Number of SDU received by the application (expedited)

  uint32 SW_NSDU_PROT;  // Number of SDU received by the application

  uint24 SW_ERROR_SUB;  // Subsystem error code

  unisgned uint8[2] crc;  //



A reception software was developed by the University of Vigo, the main international partner of SERPENS project. The software requires the use Linux and GNU Radio and can be used for receiving telemetry and payload data from the satellite. You can download it here!

*Observation: During implementation of the SERPENS software, the development team considered to use the callsigns: SRPNSA and SERP-B (for Sector A and Sector B, respectively), based in previous experiences. Therefore, these callsigns are embedded in the secure default radio configuration of the satellite. After interaction with our colleagues from LABRE and AMSAT-BR, the team received precise instructions on how to proceed in accordance with the regulatory process, ending with the callsign: PY0ESA. The correct callsign (PY0ESA) will be loaded to the radio configuration by command from Ground operation. However, it is possible that radio amateurs will receive some transmissions including one or both the default callsigns (SRPNSA and SERP-B), if such transmission occurs between an automatic default radio configuration reload and a Ground command to correct callsign.