Changelog
Edit on GitHubVersion history of Aegis-Beacon firmware and hardware, aligned with the repository DATASHEET
Changelog
All notable changes across firmware, hardware and documentation, mirroring the authoritative DATASHEET at the repository root.
Version 6.0 (Current)
- Boot-safe pin rework (ESP32 DevKit V1): the GPIO map was audited against the strapping and reserved pins. Radio DIO1 moves from GPIO 2 to GPIO 39 (input-only, boot-safe), the battery divider moves from GPIO 34 to GPIO 36 (resolving the double-booking with the SW_DN button), LCD D7 moves from GPIO 12 to GPIO 2 (the HD44780 input is high-impedance, so the strap sample is undisturbed) and the GPS TX line is released entirely (
PIN_GPS_TX = -1, the firmware never transmits to the GPS), leaving the MTDI strap pin GPIO 12 unconnected. The I2C display probe now runs on the shared 13/15 bus instead of the default 21/22 pins (GPIO 21 is the radio BUSY line, GPIO 22 the GPS RX input) and releases the bus withWire.end()when nothing answers. - I2C LCD backpack support: new
DISPLAY_TYPE 5(16x2) and6(20x4) drive an HD44780 over a PCF8574 I2C backpack throughLiquidCrystal_I2Con SDA=GPIO13/SCL=GPIO15 (the OLED bus pins), with an address probe (0x27/0x3F) at boot, backlight tied to sleep, and no GPIO 12 conflict with GPS TX. See HD44780 LCD Displays. - Benchmark demo mode: a compile-time
BENCHMARK_DEMOflag runs the full UI and Morse timing on a bench board with no radio, battery divider or GPS attached: radio init and keying become stubs, RSSI reads a virtual -120 dBm floor, the battery ADC and GPS UART are never touched and deep sleep is replaced by an idle loop. See Benchmark Demo Mode. - ST7735 wake fix: waking the TFT from power-down re-initialises the panel (
initR+ rotation + clear) instead of relying on the unreliable soft-SPI power-up register sequence; the type 2 display now always comes back after a sleep. - LISTEN mode: the beacon can now receive and decode live Morse CW. The radio stays on the first configured frequency, samples RSSI every 5 ms, measures mark and gap durations with the PARIS timing model, accumulates symbols and streams every decoded character to the OLED and over serial as
AEGIS:CW:<char>. Full ITU table (A-Z, 0-9, punctuation); entered withMODE LISTEN. - Battery monitor: live pack voltage through a 2:1 divider on GPIO 36 (ADC1).
readBatteryMv()/battPct()map 3300-4200 mV to 0-100%; a battery glyph with three level cells appears on BEACON, SEARCH and LISTEN; below 3550 mV the glyph flashes, the red LED blinks andAEGIS:BATT:lowis emitted once. NewBATTserial command. - Board temperature: the ESP32 internal silicon sensor is reported as
temp=in the extendedAEGIS:STATEline and in the STATUS debug block. - RSSI history strip-chart: a 120-sample ring buffer (
RSSI_HIST_LEN) powers an oscilloscope-style trace on the SEARCH RSSI band and a dedicated trace frame on the LISTEN screen, replacing the plain fill bar. - OLED engine rework: pulsing antenna glyphs (splash, BEACON, SEARCH, LISTEN headers), satellite glyph and 4-cell lock meter on GPS WAIT, segmented TX progress bar with blinking caret, sweep caret on the SEARCH bar, distress corner brackets and blinking TX light on EMERGENCY, WiFi glyph and checklist on CONFIG, centered double-frame message dialogs.
- Serial protocol: new
AEGIS:BATT:,AEGIS:BATT:low,AEGIS:CW:lines;AEGIS:STATEextended withbatt,temp,up;AEGIS:HELLOversion bumped to 6.0;HELPlistsBATTandLISTEN. - Migration: the NVS schema is unchanged; flashing v6.0 over v5.5 preserves all settings.
Version 5.5
- Serial bridge protocol: machine-readable
AEGIS:POS:,AEGIS:HELLO:andAEGIS:STATE:lines on USB serial, printed plain (never ANSI-colored) and throttled to at most one position report every 5 seconds. - Serial commands:
FREQ <MHz>(set and persist the desired frequency),FREQ?,WPM <5-40>,MODE <BEACON|SEARCH|CONFIG|EMERGENCY>,POS,STATUS,HELP. - Cross-platform bridge (
bridge/aegis-serial-bridge.py): auto-detects the serial port on Windows, macOS and Linux, and forwards GPS fixes to the website’s Report Position page, streaming live into an open page or opening it pre-filled. - Bridge live TUI: the bridge renders a live terminal dashboard (device status, latest position, page state, scrolling log) when run in a terminal, and forwards typed serial commands (
FREQ,WPM,MODE,POS,STATUS,HELP) to the device;--tui/--no-tuioverride the auto-detection. - Report Position page (
/report-position): auto-fills from a link, live-updates from the bridge, Google Maps and OpenStreetMap links, copy-link, a paste box for testing without hardware, and a keyless Leaflet map that draws a track as positions move. - Offline-first config dashboard: the WiFi captive portal now uses only default system fonts, since it is configured without connectivity.
- Merged reference documentation:
DATASHEET.mdis now the single authoritative document (electrical specs, GPIO map, NVS schema, HTTP API, technology stack, global SAR frequency database, serial protocol reference, deep dives and troubleshooting), replacing the standalone FREQUENCIES.md and TECHNOLOGIES.md. - SEO and legal pages: canonical URLs, Open Graph, Twitter cards and JSON-LD structured data on every page, plus dedicated Disclaimer, Terms of Service and Privacy Policy pages.
- Building Effectively wiki section: six new pages covering build strategy, quality gates, bench fixtures, rework, time planning and build logging.
- Hardening pass: fixed a duplicate user message that appeared when retrying a chat question after a failed local-model load, and made the dashboard CSS extractor scope pseudo-elements on
body/:rootand groupedheaderselectors correctly (output-neutral for the current dashboard).
Version 5.4
- Battery monitor: 100 kohm divider on GPIO 36, 9-point piecewise Li-ion curve, pixel-art icon in every screen header, CHG (charging) indicator, animated dashboard bar.
- Improved OLED graphics across all screens.
readBattery()integrated into the main loops; battery state exposed live on every screen.
Version 5.3
- Replaced the potentiometers with a 4-button control panel: SW_MODE / SW_SEL / SW_UP / SW_DN.
- OLED adjustment overlay and auto-repeat on held buttons.
- NVS save via SW_SEL long press.
Version 5.2
- Radio upgraded from SX1276 to SX1262 (Ebyte E22-400M30S).
- BUSY pin on GPIO 21 is now mandatory;
ensureSpiStarted()helper added. - TCXO 1.6 V parameter for the E22 module.
Version 5.1
- NEO-6M GPS: name + coordinates in the Morse payload (
SOS DE [NAME] PSN [LAT] [LON]). - TinyGPS++ integration and RTC GPS cache.
- GPS wait screen with satellite count and progress bar.
Version 5.0
- Ported to ESP32 DevKit V1 (30-pin).
- Display upgraded from SSD1306 0.96” I2C to SSD1309 2.42” SPI (U8g2 driver).
- GPIO 25 native DAC1 audio output;
audioDacSilence()mid-rail parking. - Radio moved to the VSPI bus.
Version 4.0
- Added SSD1306 0.96” OLED (I2C, GPIO 0/1).
- Added 3.5 mm audio jack (GPIO 18 PWM).
- SW_CONFIG moved from GPIO 1 to GPIO 21.
- Audio/OLED NVS keys introduced.
Version 3.0 (Initial Release)
- Initial public release: ESP32-C3 + SX1276.
- WiFi dashboard, deep sleep, frequency hopping, NVS config, RTC RAM state, CI/CD.
Upgrading
From v4.0 to v5.4 (Breaking Hardware Revision)
Warning
This is a full hardware revision. Do not run v5.x firmware on the original ESP32-C3 board with the RA-02 module without complete rewiring.
| Feature | v4.0 | v5.4 |
|---|---|---|
| Microcontroller | ESP32-C3 SuperMini | ESP32 DevKit V1 (30-pin) |
| Radio | SX1276 RA-02 (OOK, +17 dBm) | SX1262 E22-400M30S (CW/FSK, +22/+30 dBm) |
| Display | SSD1306 0.96” I2C 128x64 | SSD1309 2.42” SPI 128x64 (U8g2) |
| GPS | None | NEO-6M UART, coords + name in Morse payload |
| Battery monitor | None | ADC voltage divider to % + mV, live on every screen |
| Parameter adjustment | Dashboard only | 4 physical buttons: SW_MODE / SEL / UP / DN |
| Morse payload | SOS | SOS DE [NAME] PSN [LAT] [LON] (configurable) |
| Audio output pin | GPIO 18 (PWM only) | GPIO 25 (native DAC1 + LEDC) |
| BUSY pin | N/A | GPIO 21, mandatory on SX1262 |
| Display libraries | Adafruit SSD1306 + GFX | U8g2 + TinyGPS++ |
| BOM cost | ~$12-14 USD | ~$23-28 USD |
Migration steps: factory reset NVS, rewire all GPIO connections per the GPIO pin map, install the new library dependencies (U8g2, TinyGPS++), then reconfigure via the dashboard.