CardSat v0.9.23
Fix
- DX Doppler starts at the centre of the linear passband. The Doppler table
now opens with the operating point in the middle of the selected linear
transponder's passband (and re-centres when you switch transponders witht),
matching how the on-device tracker centres a linear bird, instead of starting at
the low edge. FM and single-channel transponders are unaffected.
Mobile web control improvements
The web control page (Settings → Network/data → Web control) gained:
- a live sky plot — a polar plot with a moving dot at the satellite's current
azimuth/elevation; - an in-pass indicator and AOS countdown in the header ("IN PASS — LOS in
m:ss" / "Next AOS in m:ss"); - transponder selection from a labelled drop-down (mirrors the
tkey); - direct calibration entry — type exact RX/TX offsets in Hz and Set/Zero them
(saved per-satellite); - a filter box to narrow a long satellite list;
- a responsive layout that uses one column on phones and two columns on
tablets/computers.
Internally, all satellite and transponder names served as JSON are now escaped, so
a name containing a quote or backslash can no longer break the page. Two small
endpoints were added (/api/tx for the transponder list/select, /api/cal for
calibration). As with the rest of the LAN servers, the web page is HTTP on the
local network with no authentication — use it only on trusted networks.
Changes
- OSCARLOCATOR opens in polar view by default (press
mfor the QTH-centred
view); the polar sheet auto-selects N/S and flips at the equator. - Sat-to-sat finder shows a "Calculating windows…" status while it searches,
instead of appearing to pause during the computation. - LoRa region presets. A new LoRa region setting (Settings → Network/data)
seeds a legal amateur frequency for your area: US → 33 cm band, 906.875 MHz
(default); EU → 70 cm band, 433.775 MHz; Japan → 430 MHz band,
431.000 MHz — all at 125 kHz. The default region is now US (906.875 MHz)
instead of 433.775 MHz. You can still set any carrier 150–960 MHz by hand; the
region just provides a sensible, in-band starting point. You remain responsible
for operating within your licence and local rules.
Fixes from device testing
- Sat-to-sat finder no longer freezes. The visibility search was calling the
SGP4 element re-initialiser twice per 30-second step over a 5-day window
(~29,000 full re-inits), which blocked long enough to trip the task watchdog and
freeze the unit. It now samples each satellite once across the window into a
compact in-RAM track (two re-inits total), yields periodically, and scans those
tracks for overlaps — fast and watchdog-safe. - DX Doppler transponder selection works, and the table is readable. The DX
Doppler screen now has atkey to cycle the transponder directly, and each
30-second step is shown on two lines — your dials ("me", green) and the DX
station's ("DX", cyan), each with RX and TX — so the four frequencies no longer
run into each other. Mode changes (true rule / fixed DL / fixed UL) are easier to
read against the clearer layout. - OSCARLOCATOR and Sky-sources plots clear the header. The polar/azimuthal
discs and their compass labels were drawn far enough up that the disc top and the
"N" label overlapped the title bar. The OSCARLOCATOR disc is now centred lower,
and the shared polar-grid compass labels sit just inside the disc edge. - LoRa Messages status bar clears the header. The frequency / SF / bandwidth
line was flush against the title bar; it (and the divider and message list) now
start below it. - SD card stays accessible after using LoRa. The Cap LoRa SX1262 and the
microSD card share one SPI bus (SCK 40 / MISO 39 / MOSI 14, different chip
selects). LoRa bring-up was reconfiguring the bus in a way that left the SD
driver unable to use it. LoRa now shares the existing bus on the SD pins and
keeps the SD chip-select idle, so the card remains reachable.
This release adds three significant new satellite views — an OSCARLOCATOR
azimuthal plot, a 3D globe, and an on-device voice-memo browser — plus a
round of documentation accuracy work across the README and Manual.
New: LoRa text messaging (Home → Messages)
CardSat-to-CardSat broadcast group chat over the M5Stack Cap LoRa (SX1262)
module. Every CardSat tuned to the same frequency, spreading factor and bandwidth
sees every message — no addressing or routing, which keeps it simple for a club
net, a SOTA/portable group, or any outing where there's no cell or internet.
- Selectable band — the SX1262 (and the unfiltered Cap LoRa front-end) covers
150–960 MHz, so the frequency is fully selectable (default 433.775 MHz):
arrow-adjust in 100 kHz steps or type an exact MHz value. Spreading factor is
selectable 7–12 (default 12 for maximum range/sensitivity), and bandwidth
is 62.5 / 125 / 250 kHz. Both ends must match to hear each other. - Messaging screen —
nwrites a message on the full keyboard and ENTER
sends;;/.scroll history. Your messages show in cyan as>me, others in
green by callsign. The status line shows frequency / SF / bandwidth / your call. - Low-footprint by design — fixed character buffers and a fixed 24-message ring
(noStringin the radio path, no heap growth, no SD card). History is lost on
reboot. - Settings (Network/data): LoRa msg on/off, frequency, SF, bandwidth, TX power
(0–22 dBm). Set your callsign first (Station settings / QRZ screen).
⚠️ Untested hardware path, and needs an extra library. The radio send/receive
is written to the M5Stack Cap LoRa reference and the SX1262 datasheet but has not
been confirmed on a device. It requires the RadioLib library (Arduino Library
Manager) and a build withCARDSAT_HAS_LORA=1; without that the firmware
still compiles and the Messages screen reports the radio is off. Verify two units
talk before relying on it, and mind your band's rules — 433.775 MHz at 125 kHz is
the worldwide default but exceeds the US 70 cm 100 kHz occupied-bandwidth limit,
where 915 MHz ISM is the cleaner path. The protocol framing and the message ring
are host-verified; the radio layer is not.
New: OSCARLOCATOR view (Satellites → k)
A live azimuthal-equidistant plotting board — the classic OSCARLOCATOR — that
shows the satellite's sub-point and footprint on the Earth in real time. It's the
graphical companion to the tabular EQX table (e).
- Two projection modes, toggled with
m: a QTH-centred view (your station
at the centre, with the satellite at its true bearing and great-circle distance)
and a polar view (a pole at the centre). In polar mode CardSat picks the
North or South sheet automatically and flips between them live as the bird
crosses the equator, so the satellite always stays on the visible chart. - Draws a coarse coastline, a lat/lon graticule, the satellite marker (yellow when
sunlit, cyan in eclipse), and the satellite's ground footprint. - A dashed amber QTH range ring marks the footprint radius at the satellite's
mean altitude, centred on your station — when the sub-point reaches inside it,
you have a workable pass. - The full ground-track arc (one orbit's worth of sub-points) is drawn across
the disc in blue, like a real OSCARLOCATOR; green/orange markers show where the
current pass's AOS and LOS fall along it, with a travel-direction arrow.
New: Live GPS position (Location → v)
A full-precision position readout off the Location screen, for rovers, portable
ops, and grid-line activations. Shows latitude and longitude in
degrees-minutes-seconds to 0.001″ and in decimal degrees, altitude,
Maidenhead grid (recomputed live as you move), and — from a live fix — ground
speed (km/h and knots) and course over ground (degrees true with a cardinal
label), plus a fix/satellite-count/HDOP status line.
New: Sat-to-sat visibility finder (Satellites → 2)
Finds the windows over the next five days when the selected satellite and a second
satellite (chosen from your favorites) are both above your horizon at the same
time — for cross-satellite relay experiments or back-to-back working on one
outing. Each row shows the window's start (UTC), duration, and the peak elevation of
each bird. n cycles the second satellite; r recomputes.
New: Jump to beacon (n on Track / Big readout)
One key on the Track and large-font readout screens tunes straight to the
satellite's beacon — its downlink-only/telemetry entry (preferring one whose
description names a beacon) — with Doppler correction, for finding a bird by its
beacon before working it. If the satellite has no beacon listed, a status note says
so.
New: DX Doppler table (Mutual windows → d)
From a mutual-visibility window, d opens a table of the RX and TX dial
frequencies for both your station and the DX station, every 30 seconds across the
window, for the transponder you've selected (with t on Satellites). Because
each station's Doppler differs, their dials differ — this lays out exactly where
both operators should tune to stay on the same channel through a short pass.
- Three modes (
m): true rule (operating point fixed in the satellite
passband, every dial Doppler-tracks), fixed downlink, and fixed uplink
(the anchor station holds one dial constant in real RF and the other three
follow). acycles the anchor dial (my RX/TX, DX RX/TX); for a linear
transponder,,//(and</>) move the passband operating point.;/.scroll the 30-second steps. RX is shown in green, TX in yellow.
Built for short windows and manual tuning of coordinated DX contacts.
New: Sky sources plot (Sun/Moon → s)
A secondary plot off the Sun / Moon screen (s) showing the classical
planets and the strongest cosmic radio sources on a sky dome (zenith
centre, North up, elevation = radius) — for antenna pointing and as an RF-source
reference.
- Planets Mercury, Venus, Mars, Jupiter, Saturn are computed live (cyan dots);
fixed radio sources Cassiopeia A, Cygnus A, the galactic centre (Sgr A*), the
Crab nebula (Tau A), and Virgo A (M87) are drawn as orange crosses, plus a few
bright stars for orientation. - Objects below the horizon sit just outside the rim in grey so their bearing is
still readable.;/.step through the objects; the readout gives the
selected object's az/el, above/below-horizon status, and type.
Positions use the same low-precision ephemeris as the Moon view — far finer than
any amateur antenna beamwidth.
New: 3D Globe (Satellites → 3)
An orthographic 3-D wireframe Earth that auto-follows the selected satellite,
rotating so its sub-point stays centred. Only the near hemisphere is drawn, so the
far side of the Earth is hidden behind the curve.
- Graticule and coastline (clipped at the limb), a yellow day/night terminator,
and your QTH as a white cross. - All favourites plotted as dim-green dots; the selected satellite centred
and larger (sunlit/eclipse colour) with its ground footprint drawn around it
(the footprint wraps around the limb naturally as the bird nears the horizon). - A blue ground-track trail — a full orbit of the selected satellite's
sub-points projected onto the globe. - An optional second (DX) location entered by Maidenhead grid (
g): drawn
as an orange marker with its own footprint ring, so the overlap with the
satellite's footprint shows the live mutual-visibility region.Gclears it. - Arrow keys turn the globe by hand (free-look); ENTER re-snaps to
auto-follow.
New: Voice Memos browser (Log → Voice Memos)
Voice memos can now be reviewed and managed on the device, not just copied off the
SD card on a computer:
- Browse every memo on the card, newest first, showing each memo's date,
time, the satellite it was recorded on, and its length. - Play back a memo through the speaker (ENTER); any key stops it.
- Record a standalone memo (
n) that isn't tied to a satellite — handy for
a quick note when you're not tracking. Any key stops and saves. - Delete a memo (
d, with a confirm prompt);rrefreshes the list.
The browser lives under the Log menu (Home → Log → Voice Memos). Recording
while tracking still works exactly as before with v on the Track-family
screens. Memos are now named with the tracked satellite as well as the UTC
timestamp, e.g. memo_20260617_203145_AO-91.wav; standalone memos omit the tag.
Voice memo recording on the Cardputer ADV requires an ESP-IDF 5.4.x build
(Espressif esp32 Arduino core 3.2.x). See MANUAL.md section "Voice memo".
Documentation
- README Highlights now cover the OSCARLOCATOR view, the 3D globe, voice memos
and the memo browser, the IR pass beacon, Easycomm I/II/III and SPID
rotator protocols, world-map recenter (c), and the Update screen's fast
update (f) — several of which had shipped without a README mention. - The Manual gained full sections for the OSCARLOCATOR view, the 3D globe, and the
voice-memo browser (in section 8 and the screen-by-screen reference), and its
help-screen and key tables were audited against the code. - The cheat card and on-device help screen were updated for all of the above. The
printable cheat card has also moved from a 3×5 to a roomier 4×6 index-card
format (still front/back, two pages) — larger, more legible type with space for
the new screens.
Verification status
The voice-memo recorder and the ES8311 microphone bring-up are confirmed working on
hardware. The OSCARLOCATOR view, the 3D globe, and voice-memo playback are new
drawing/audio code paths that have been verified on the host and against faithful
pixel-accurate mockups, but are still being confirmed on-device — please report
anything that looks off on your hardware via the project's issue tracker.
Notes
- Carries forward everything in 0.9.22 (working ADV voice-memo recording; the 8 bpp
palette canvas that keeps downloads from freezing the screen on the 5.4.x
toolchain).