Skip to content

lakeshark_banner lakeshark_banner_dark

Terminalbay.com

Important

P25 voice with no SDR. On the LR2021 version of the T-Display P4, the onboard LR2021 radio decodes P25 Phase 1 voice by itself and plays it on the speaker. Fit a VHF antenna on its MMCX connector, open P25 and tune the channel; no dongle needed. New in 2.8.0.

POCSAG on VHF. PAGER RECON hears pagers on the LR2021 from 150 MHz up. New in 2.8.0.

ADS-B with no RTL-SDR. The LR2021 also decodes aircraft by itself. New in 2.7.0.

T-Display P4 Onboard radio does P25 and ADS-B
SX1262 MeshCore, LoRa Labs, POCSAG on the LoRa chip need an RTL-SDR
LR2021 MeshCore, LoRa Labs, VHF and UHF POCSAG, FSK and sweeps from 150 to 1100 MHz and 1500 to 2500 MHz built in, or an RTL-SDR

LakeShark is a handheld SDR scanner and radio workbench built around the LilyGO T-Display P4: a 4.1-inch AMOLED, touch controls, detachable keyboard, GPS and a nine-axis motion sensor. Scan radios, follow aircraft and Mesh nodes on offline maps, experiment with LoRa, and keep field notes.

Plug in an RTL-SDR Blog V3 or V4 for P25 Phase 1 trunking, FM, POCSAG, ADS-B and sub-GHz capture. The onboard SX1262 (or the LR2021 on that variant) runs MeshCore or LoRa Labs; the LR2021 also decodes P25 voice and ADS-B on its own. The optional MIX-RF keyboard adds CC1101, nRF24 and NFC tools.

Start here

Flash LakeShark from your browser · First flash guide · Download the latest release

  1. Check your board: the primary build is for the LilyGO T-Display P4 with the 4.1-inch 568 × 1232 AMOLED and 16 MB flash. The SX1262 and LR2021 radio variants run the same firmware. Other display variants need different firmware. The keyboard is optional.
  2. Flash from Chrome or Edge on a computer: open the browser flasher and select your exact board. Follow the first flash guide for setup.
  3. Choose your radio: add an RTL-SDR Blog V3 or V4 for P25 Phase I, FM, POCSAG and ADS-B reception, or use the onboard SX1262 or LR2021 for MeshCore and LoRa tools. On the LR2021, P25 and ADS-B work without the RTL-SDR.

Wiki and setup guides · Project overview

Powering the T-Display P4: use the P4's USB-C power input for now. Do not feed the keyboard's 5V USB output back into the P4; it caused repeated power cycling in testing. The battery case shown below is still in development.

New case design renders

LakeShark P4 case, plastic LakeShark P4 case, clear acrylic

Roadmap · Submit a recommendation

Scanning, replay and aircraft tracking: animated SUB-GHZ scans, FILES-to-RECORD playback, ADS-B mini maps and saved home. RADIOS adds Wi-Fi and Bluetooth startup toggles.

RECORD replay ADS-B mini map
Recording playback ADS-B mini map
SUB-GHZ scan Wireless startup controls
SUB-GHZ scanning Wi-Fi and Bluetooth controls

The site also builds P25 profiles, GPS scan lists, channel memories and offline map tiles for you.

Designed to work with my other project CartoTUI, a terminal ascii map. (Note: This integration is currently in development, untested, and may not work due to recent firmware updates).

<°)))>< LilyGO T-Display-P4

hero-falls

The primary development target: 4.1-inch 568 x 1232 AMOLED, 16 MB flash, onboard SX1262 or LR2021 LoRa, GPS and nine-axis sensing. Use touch alone or add the detachable keyboard with its MIX-RF radios.

HOME P25 ADS-B FALLS with Flipper bursts SUB-GHZ scan COMPASS FIND MAP following an aircraft FALLS on P25 SUB-GHZ decoding a Flipper FM on NOAA weather Mesh message notices Night theme

Recorded on the board: ADS-B traffic on the mini map, FALLS and SUB-GHZ catching a Flipper's 433.92 MHz remote bursts, COMPASS FIND turning on two channels, MAP following an aircraft, the P25 waterfall, FM on NOAA weather, mesh messages arriving as notices, and the Night theme.

ASCII controls and labels are painted straight onto the panel, with pixel terrain in the new field map. Every control answers a tap and a key. The screen follows the way you hold the board, and F11 turns it by hand.

App What it does
P25 Phase I trunking and conventional voice; AUTO/manual demodulation, channel-list scanning; Phase II [EXPERIMENTAL]
FM Analog FM/AM listening, stepped-band scan, mixed P25/FM channel lists and POCSAG pagers
ADS-B Aircraft at 1090 MHz, traffic history, offline mini map and remembered home; spoken callouts for new, located and lost aircraft
FALLS P25, FM or LoRa waterfall; tap-to-mark tuning
MESH MeshCore messaging and nodes on the onboard SX1262; new messages show as a notice on any screen and can be read aloud
LORA LABS Direct radio controls, packet plots, received-signal history and a full-screen compass
NOTES Markdown notes on the SD card with checklists and live GPS, heading and radio lines
COMPASS Tilt-compensated compass with true north; FIND points to a transmitter on any radio, with channel scanning, two radios at once, a hit log, and RADAR and HEAT views; GO TO and a level
MIX-RF Keyboard CC1101 energy monitor, nRF24 activity scan and NFC detection
NFC Classic 4K reads, verified block maps, key entry, hex/ASCII views and manual saves; Mini/1K full reads [EXPERIMENTAL]
REC Shared capture workspace and .sub export; 2.2.2 adds file replay, inline power and an animated waveform.
SUB-GHZ Six tiles: read, analyzer, saved, read raw, learn and settings; decoded detections and capture archive; OOK/FSK replay [EXPERIMENTAL]
EXPERIMENTS LR2021 trials that may become apps, one at a time [EXPERIMENTAL]
FILES SD-card browsing, sorting and .sub preview; replay opens directly in RECORD
MAP Offline maps with aircraft trails, Mesh nodes, marks and drawn lines; FOLLOW, GO TO, layers and eight palettes; pixel field view and archive picker [EXPERIMENTAL]
GPS Position and a track recorder that exports GPX
RADIOS Radio power, antenna selection, and Wi-Fi/Bluetooth startup toggles
DIAG Memory, radios, sensors, rebuild counts
SET Brightness, theme (Night keeps everything red), font, sounds, voice and callouts, Daylight mode for the sun
LINK Wi-Fi and Bluetooth: scan, signal and channel graphs
keyboard-home

Install it from your browser or read the first flash guide.

This port is for the 568 x 1232 RM69A10 AMOLED with 16 MB flash. The other T-Display-P4 panel SKU needs different timings and a different touch driver. The LCD-4.3 image and its 32 MB layout belong to a different board.

LINK needs matching ESP-Hosted firmware on the ESP32-C6. Factory ESP-AT will not do. Flipper control on the T-Display-P4 uses Bluetooth.

P4 keyboard power warning: Do not connect the keyboard's 5V USB output back into the P4 yet. This caused repeated power cycling in testing, even without the RTL attached. I'm investigating the easiest reliable way to power the RTL on battery.

}<((((-- Headless

The Waveshare ESP32-P4-NANO and ESP32-P4-WIFI6 run the same receivers with no screen. You drive them from a serial console or from the Flipper, which suits leaving the radio in a bag with the antenna.

><))))º< ⁠The Flipper head

The Flipper app controls the radio over Bluetooth or the GPIO header. No pairing code. The Flipper advertises and the radio connects to it.

map traffic
Offline map with aircraft on it ADS-B traffic
launcher p25
Launcher P25

The full guide covers every page, its buttons and all 44 screenshots.

bench

><)))°> Waveshare Touch-LCD-4.3

If you already own one, there is a 480 x 800 image for it. It came before the T-Display port and it is not where new work goes, so treat it as worth a try on hardware you already have. Install it or read the quick start.

The Touch-LCD-4B and Smart 86 Box build from source at 720 x 720.

}<))•> Experiments

Tags marked [EXPERIMENTAL] identify features still awaiting full hardware or live-RF validation.

  • P25 Phase II [EXPERIMENTAL]: manual traffic channel or automatic grant following, both off after restart. Bench-tested on a public recording; live RF unverified. Details.
  • HackRF [EXPERIMENTAL]: FM, pagers, ACARS, P25, REC and ADS-B can use a HackRF One as their SDR; rates below 2 MSPS run by decimation. Pagers decode the same pages as on an RTL-SDR; P25 decoding is not yet confirmed on live signals. Status.
  • LoRa bearing plot [EXPERIMENTAL]: RSSI grouped by compass heading, not a validated direction finder.

><)))O> Build from source

Use the pinned ESP-IDF 5.4.3 SDK. Give every board its own build directory:

idf.py -B build_tdp4 -D SDKCONFIG=build_tdp4/sdkconfig -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;boards/t_display_p4.defaults" build
idf.py -B build_nano -D SDKCONFIG=build_nano/sdkconfig -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;boards/nano_headless_ble.defaults" build
idf.py -B build_lcd43 -D SDKCONFIG=build_lcd43/sdkconfig -D SDKCONFIG_DEFAULTS="sdkconfig.defaults;boards/lcd43_gui.defaults" build

boards/ holds the defaults and partition layouts, and main/idf_component.yml pins the dependencies. The Waveshare BSP is patched in managed_components/, so use a fresh build directory on a new machine rather than an old CMake cache.

Run the host checks from the repository directory:

pwsh -File bench/verify.ps1 -Level host

Location scanning covers mixed P25/FM lists and GPS filtering. CSV/JSON imports work without RadioReference. The optional RadioReference adapter [EXPERIMENTAL] needs an approved application key and the user's Premium account; live account authentication has not been validated.

Current P4 release: 2.8.1. P25 Phase 1 voice from the onboard LR2021 with no SDR, POCSAG on VHF in PAGER RECON, and P25 or ADS-B on the LR2021 sharing the chip with EXPERIMENTS, LoRa Labs and the LoRa waterfall. Experimental radio features remain marked.

Older changes are in the release history.

°<)))>< Standing on

LakeShark builds on these projects and contributors. Their code, hardware examples and published work make the receivers and tools possible.

rtl-sdr / librtlsdr Osmocom. The dongle driver everything starts from. GPL-2.0+
xtrsdr XTR1984. Cut librtlsdr down until it fit an ESP32. Without this there is no project
OP25 Pavel Yazev's fixed-point imbe_vocoder; experimental Phase II decoding by Max H. Parke, Graham J. Norbury and contributors. GPL-3.0+
libmodes / dump1090 Thomas Watson and Salvatore Sanfilippo. Mode S decoder lineage; the bundled libmodes notice is BSD-2-Clause
ADS-B Scope John Stockdale (@jstockdale) and Off by One, Inc. Original ADS-B Scope implementation; reference for LakeShark's single-frame CPR decoding against the aircraft's previous fix
DSD and dsd-fme szechyjs and lwvmobile. The P25 framing and symbol lineage the decoders follow. The DSD files here carry its ISC-style notice
mbelib szechyjs. Kept as a fallback vocoder. ISC
ESP-IDF Espressif. The whole platform
LILYGO device drivers T-Display P4 and MIX-RF wiring, power sequencing and hardware examples
MeshCore Scott Powell / Ripple Radios and contributors. Onboard LoRa mesh stack
CartoTUI / ZeroMesh libcarto vector rendering and the embedded PMTiles reader
PMTiles Protomaps. One file, no server, seekable. What makes offline maps possible here
OpenStreetMap The map data itself, ODbL
Flipper Zero firmware Flipper Devices and contributors. Control-head platform and Crypto1 helpers adapted for Classic NFC reads
LVGL / DejaVu UI support and fonts; their notices remain bundled
Waveshare Original P4 board support and hardware examples

Field-map design references: Cardputer offgrid map by yuiseki for rendering reuse, and HikePod by nongxl for field navigation. These informed the design; no code was copied from either project.

LakeShark itself is GPL-3.0. Third-party code keeps its own notices; the inventory lists what is bundled and under what terms.

What you are allowed to listen to is local law and yours to check.

About

Handheld T Display P4 & ESP32-P4 SDR scanners - RTL-SDR spectrum, P25 Phase 1, FM/AM, ADS-B and POCSAG, plus onboard LoRa/MeshCore, GPS and Flipper .sub capture. No PC.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

151 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages