Skip to content

u44e/cardputerzero-location-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Location Tracker — CardputerZero LoRa location receiver

A receiver/display for a LoRa (SX1262) multi-node GPS tracking mesh on the M5CardputerZero. Nodes send their position over LoRa; this app shows a live hub view (per-node ID / solution quality / lat-lon / satellites / signal) and a node-detail view (GPS fix, speed, altitude, TX). v0.2.0 adds a full-screen offline map for each mode: the SIDE key cycles hub → hub-map → node → node-map. 320×170, dark theme.

The offline map draws SD-stored raw RGB565 slippy tiles (decode-free) with GPS/LoRa positions as markers, a scale bar, and pan/zoom (arrows pan, +/- zoom, 0 recenters): the hub-map auto-fits all received nodes; the node-map follows your own position at the most detail available. A small demo tile set of the Kanto–Chubu region ships so the map self-demos out of the box; point CZ_TILES_DIR at your own tiles for other areas.

Radio + GNSS use the M5Stack Cap LoRa-1262 (SX1262 + AT6668/ATGM336H GNSS) — the same cap as the Cardputer ADV — so ADV and CardputerZero nodes/hubs interoperate (same LoRa PHY + packet + crypto).

This is the AppStore submission repo: the standalone CardputerZero app only. The full system (ESP32 sender/hub firmware, Mac tracker, GIS tools, PPK) lives in the development monorepo u44e/cardputer-location-tracker.

How it gets data

The app reads NDJSON on stdin (appendix E.2 format): on the device from a LoRa hub over USB-CDC (or the on-device native LoRa receiver). When stdin is a tty (no pipe) it self-demos from the bundled sample so it shows data out of the box.

A companion macOS app (native MapKit map view) reads the same LoRa-hub NDJSON stream over USB-CDC / TCP, so the same fleet can be viewed on the Mac at the same time (the desktop GIS lives in the development monorepo).

Build the arm64 .deb (AppStore)

The official AppStore fork/execs a standalone binary. port/main.c owns the LVGL display + input and calls the app's app_main()/app_event() ABI (src/cz_app.c unchanged). Builds in an arm64 Debian container — no device:

./port/build.sh          # -> port/dist/location-tracker_0.2.0_arm64.deb  (needs docker)

Submit with czdev — see docs/SUBMIT.md.

Layout

src/        cz_app.c (hub/node/map UI) + cz_app.h (ABI) + cz_ndjson.h +
            cz_theme.h + cz_map.{c,h} (offline map: Web Mercator + tile compositor)
port/       standalone entry: main.c (memory/fbdev display + evdev), evdev_kbd.c,
            CMakeLists.txt, build.sh
assets/samples/combined_sample.ndjson   bundled demo track (self-demo)
assets/tiles/{z}/{x}/{y}.565             bundled demo map tiles (© GSI Japan)
share/images/location-tracker.png        100x100 icon
store/screenshots/*-320x170.png          store screenshots (hub / node / detail / hub-map / node-map)
app-builder.json                          AppStore store metadata

License & attribution

  • App code: MIT — © 2026 Yusuke Yoshie (see LICENSE).
  • Bundled offline map tiles (assets/tiles/, installed to share/APPLaunch/share/tiles): © 国土地理院 / GSI Japan — 地理院タイル, used under the GSI tile terms of use. The source credit is shown on-screen (bottom-right of the map). Tiles are read from local storage only; the app performs no network access. Replace them with your own area via CZ_TILES_DIR (see the tools/cztiles tile generator in the development monorepo). See NOTICE.

Status

Built + verified in an arm64 container (runs, parses NDJSON, clean exit; .deb passes the packages CI checks). Not yet verified on physical CardputerZero hardware — the native LoRa receiver is a skeleton, so on-device data currently comes from a LoRa hub over USB-CDC. MIT licensed.

About

Location Tracker — LoRa multi-node GPS receiver/display for M5CardputerZero (AppStore)

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages