9M2PJU Logo

9M2PJU Mod LoRa APRS Tracker

Firmware Web Installer · Heltec Wireless Tracker

Heltec Wireless Tracker (ESP32-S3 + ST7735 TFT)

Click INSTALL, pick your device's USB port,
and the firmware installs right from your browser.

Loading install count…

Wrong browser

You need Google Chrome or Microsoft Edge to install. Firefox and Safari do not work. Please switch to Chrome or Edge.

What you get

How to install

If INSTALL fails or your tracker won't start

If the installer cannot connect, put your tracker into download mode first:

Pressing both buttons together puts the tracker into download mode (screen goes blank). After flashing, press RST once to boot into the firmware.

Heltec Wireless Tracker running 9M2PJU Mod LoRa APRS Tracker firmware

Heltec Wireless Tracker running 9M2PJU Mod LoRa APRS Tracker firmware

After flashing

APRSMYSunday Net Check-In

This fork includes Malaysia's APRS Sunday Net check-in feature. Check in to the net and query net stats right from your tracker - no phone or computer needed.

Menu path: Messages → APRSMYSunday

Replies come back as APRS messages - read them via Messages → Read.

SOTA & POTA Reports

Query SOTA (Summits On The Air) and POTA (Parks On The Air) spots and alerts from the 9M2PJU-4 APRS Bot, right from your tracker.

Full user guide for 9M2PJU-4 APRS Bot: https://hamradio.my/9m2pju-aprs-bot/

HF Propagation Report

Check current HF propagation conditions from the 9M2PJU-4 APRS Bot, right from your tracker. Useful before a SOTA activation, DXpedition, or anytime you want to know if the HF bands are open.

Full user guide for 9M2PJU-4 APRS Bot: https://hamradio.my/9m2pju-aprs-bot/

Bulletins Reception (BLN)

Receive and store APRS BLN bulletins (broadcast announcements addressed to BLN / BLN0-BLN9) in a dedicated Bulletins view - separate from your personal APRS messages. Bulletins are general-purpose broadcasts sent to all stations (weather alerts, net announcements, emergency notices, event info) rather than to a specific callsign.

Distance filter: 500 km - only bulletins from senders within 500 km of your GPS position are stored. The tracker caches the last known position of every station it hears (from their beacon packets), then calculates the distance when a BLN bulletin arrives. Senders beyond 500 km are silently dropped. If the sender's position is unknown or your GPS has no lock, the bulletin is stored anyway.

Dedup: full file scan - before saving, the tracker reads the entire bulletins file and checks for an exact match (sender + addressee + text). Duplicates from digipeated/repeated packets are skipped, so your storage stays clean.

Default: OFF - enable it in one of three ways:

Once enabled:

Smart Beaconing - Malaysia-tuned

All 3 beacon profiles are retuned for Malaysian use cases with battery preservation in mind. 20-33% fewer transmissions vs the original CA2RXU values.

See the README for full parameter comparison tables (original vs tuned values).

Digipeater & APRS Path (WIDE1-1)

Your tracker includes a Digipeater function (Extras menu) that re-transmits APRS packets from other stations, extending their range - like a relay node. This fork is configured with WIDE1-1 as the path, which is the correct choice for LoRa APRS in Malaysia.

What is an APRS WIDE path?

When you send an APRS packet, it only travels as far as your radio signal reaches. A digipeater (digital repeater) is a station that hears your packet and re-transmits it so it can travel further - like passing a message along a chain of people. The path field in your settings tells digipeaters which ones may relay your packet and how many times.

The path uses the format WIDEn-N, where:

  • First number (WIDE1-1) = the digipeater type (alias). This tells which kind of digipeater may relay your packet:
    • WIDE1 = fill-in digipeater - simple, low-power stations like another tracker or a home station. Good for one short hop to fill coverage gaps.
    • WIDE2 = wide-coverage digipeater - higher-power stations on tall buildings or hills, covering a larger area.
    • WIDE3 = rarely used, would require a WIDE3-capable digipeater. Almost never needed.
  • Second number (WIDE1-1) = the hop counter. This tells how many times the packet may be relayed. Each digipeater that relays it subtracts 1. When it reaches 0, no more relaying.
    • -1 = one hop (relayed once, then stops)
    • -2 = two hops (relayed twice, then stops)
    • -3 = three hops (rarely appropriate)

Example: You send WIDE2-2. Digipeater A hears it, relays it as WIDE2-1 (subtracted 1). Digipeater B hears that, relays it as WIDE2-0 (subtracted 1 again). Now the counter is 0 - no more digipeaters will relay it. Your packet traveled 2 hops total.

All WIDE path combinations (WIDE1-1, WIDE1-2, WIDE2-1, WIDE2-2, etc.)
Path Type Hops Good for LoRa?
WIDE1-1 Fill-in 1 Yes - recommended
WIDE1-2 Fill-in 2 No - non-standard, fill-in digis should only do 1 hop
WIDE2-1 Wide 1 Rarely - needs a wide digi, most LoRa trackers only do WIDE1
WIDE2-2 Wide 2 No - too many hops for LoRa, causes congestion
WIDE1-1,WIDE2-1 Fill-in + Wide 2 total Only if two digipeaters are chained between you and the iGATE
WIDE1-1,WIDE2-2 Fill-in + Wide 3 total No - 3 hops is too much for LoRa
WIDE3-3 N/A 3 No - never appropriate, considered interference (QRM)
RELAY Legacy 1 No - obsolete, no longer used in modern APRS

Composite paths like WIDE1-1,WIDE2-1 request a chain: first a fill-in digipeater handles the WIDE1-1 part (1 hop), then a wide digipeater handles the WIDE2-1 part (1 more hop). The total is 2 hops. This is the classic path for VHF mobile stations in areas with no direct iGATE coverage, but on LoRa it's almost never needed.

Why WIDE1-1 for LoRa APRS?
  • LoRa range is already large (2-10 km+), so one hop is almost always enough to reach an iGATE
  • LoRa is slow (~300 bps). Every extra hop means another full packet transmission on the air, eating airtime
  • More hops = more collisions. On a shared channel, every relayed packet is another chance for two stations to transmit at once and destroy both packets
  • WIDE1-1 is the global standard for portable and mobile trackers - it means "I'm a low-power portable, please relay me once"
  • WIDE2-2 and higher are designed for VHF radio (144 MHz) where range is smaller and multiple hops are needed. On LoRa at 433 MHz, they just waste bandwidth
Using a friend's tracker as your relay

If you have no iGATE nearby but a friend with a LoRa APRS tracker is near one, they can turn ON their digipeater to relay your packets to the iGATE.

  • Both trackers must use the same path: WIDE1-1
  • The digipeater only relays packets whose path matches its own configured path
  • Your friend turns ON digipeater (Extras → Digipeater). You keep yours OFF
  • You must be within LoRa range of your friend (typically 2-10 km, more with line-of-sight)
  • Your packet: 9M2PJU-7>APLRT1,WIDE1-1:... → friend relays as 9M2PJU-7>APLRT1,9M2ABC*,WIDE1-1:... → iGATE → APRS-IS

The * after your friend's callsign means "this hop has been used." It tells other digipeaters not to relay the same packet again, preventing loops.

How to verify: Search your callsign on aprs.fi. You should see your friend's callsign with * in the path column - that confirms their digipeater relayed your packet.

Note: The S.O.S. menu item (Extras → S.O.S.) is a placeholder in the upstream firmware - it only toggles a flag on the display and does not send any distress signal. Do not rely on it for emergencies.

Web Admin UI - Mobile-First Redesign

The configuration web interface (WiFi AP at 192.168.4.1) has been redesigned mobile-first for phones, tablets, and desktops, with Malaysia flag accent colors on dark mode.

Support the project

This firmware mod is free and open source, maintained in spare time. If it has helped you on the trail, on the road, or on the air, a small donation keeps the project running.

This page also shows a donation popup on every visit, with a floating Donate button in the bottom-right corner.