Close
A tribute
beacon.py, 2017
On the evening EcAMSat was deployed, a terminal script went up on GitHub: beacon.py, written in Python 2 from Santa Clara University's public decoding guide. You pasted in a 64-character packet a ham operator had copied, and it printed the spacecraft's health. Here is what it said about the first packet JA0CAW sent in:
$ python beacon.py
Please post the entire 64 character beacon packet: EcAMSat.org 1DEA21020033021EBA02A80200004400F90830A23661515F5B
Bus Time (seconds): 2222621
Solar Panel 1 current (mA): 7.1456
Solar Panel 1 temperature (C): 15.9891
Bus Power Port Status: 0b11110
Payload board temperature (C): 22.9192
Battery Voltage (V): 8.042
Payload Heater Current (mA): 8.04
Payload Page Number: 68
Median Card Temperature (C): 22.97
Well Number: 48
TaosR (Hz): 13986
TaosG (Hz): 20833
TaosB (Hz): 23391
Its comments are still the best part:
#WARNING: some terminals decode consecutive spaces as a single space
#Later there will be input validation but for now I'm lazy
...
#Convert little endian to big endian... seriously who chose little endian?
What 2.0 keeps, and fixes
The decoder is the same: the same 64-character layout, the same byte swaps and the same calibration constants. decoder.js is checked against the Python version on all 32 ham-received packets.
It finally has the input validation 2017 promised, and it accepts lowercase hex: one JA0CAW packet has an f in it.
2017 compared numbers with is (if DataType is 1), which only worked because CPython caches small integers. The endian helper's 2-byte branch returned the built-in bytes type instead of the byte; it was never called with 2, so nobody noticed.
New: sanity checks. A JA1GDE packet full of 99 bytes claims a 388 °C card; the bench flags it as a likely corrupted copy.
The mission
EcAMSat was built at NASA Ames Research Center with Stanford University School of Medicine (Principal Investigator Dr. A. C. Matin; Project Manager Stevan Spremo), and operated by Santa Clara University's Robotic Systems Lab. It launched on Orbital ATK's OA-8E Antares/Cygnus flight on 12 November 2017, was deployed from the station's Kibo airlock on 20 November, and studied how microgravity changes antibiotic resistance in uropathogenic E. coli . Two strains grew in a fluidic card under four gentamicin doses, read through alamarBlue dye by LEDs and a TAOS light-to-frequency sensor. It was NASA's first 6U CubeSat, and its dimensions became the 6U standard. It re-entered on 8 December 2021.
39 ham operators in 14 countries submitted 8,848 beacon packets. This page uses the 32 that JA0CAW, JA1GDE and DK3WN sent in during the first days. Station pins show call areas, not anyone's location.
How this page was made
The spacecraft, the deployer, the fluidic card, the textures and every sound are generated in your browser with three.js and Web Audio. The model follows photos of the flight unit in the lab and NASA's ISS deployment frames: clipped-corner GaAs cells on white PCB, a gold-plated payload half, a copper-taped bus half and the white block around the S-band patch. Which face the beacon calls panel 1, 2, 3 or 4 is a guess. The Earth is NASA's Blue Marble Next Generation and Black Marble 2016 imagery. The telemetry is real bus data downlinked in November and December 2017. Its clock origin (bus time 0 ≈ 25 October 2017) is derived from the data, so dates are good to a few hours.
Spremo, “EcAMSat Spacecraft Mission: The Success Story of NASA's First 6U CubeSat,” 2018 (NTRS 20190001131)
Lera, EcAMSat S3VI talk, NASA, 2023 · NASA fact sheets FS-2015-03-05-ARC and FS-2017-10-01-ARC
Santa Clara University, EcAMSat beacon decoding guide, 2017
Padgen et al., Life Sciences in Space Research 24 (2020) 18–24
SatNOGS DB, NORAD 43019 (CC BY-SA) · Earth imagery: NASA Visible Earth / Earth Observatory