AI summary
Passive LoRa receiver that uses an RTL-SDR dongle to decode Meshtastic and MeshCore traffic, with live detections, radio controls, and IQ recording. Supports background monitoring and a phone interface for Raspberry Pi field stations.
Generated by AI. May contain inaccuracies.
About this app
Passive LoRa receiver for Android: decode Meshtastic & MeshCore with an RTL-SDR dongle — native C++ LoRa PHY, no LoRa radio needed
MeshSDR turns an Android phone and a ~US$30 RTL-SDR dongle into a passive LoRa receiver. It demodulates LoRa in real time on the phone, with a native C++ PHY, and shows what Meshtastic and MeshCore mesh networks around you are transmitting. You don't need a LoRa radio, a PC or GNU Radio.
Features Real-time LoRa demodulation on the phone. Preamble and sync detection, CFO, STO and SFO compensation, deinterleaving, Hamming FEC and CRC, from the RTL-SDR's raw IQ stream. SF7–SF12, BW 15.6–500 kHz, CR 4/5–4/8, explicit header. Sees traffic it can't fully decode. A valid LoRa header is reported as a detection, with length, SNR and sync word, even when the payload is too weak to pass CRC. MeshCore interpretation. Route type, payload type, hop count, the repeaters in the path, and sizes of encrypted payloads. ADVERT packets show the node type, name and GPS position, since they are signed but not encrypted. Meshtastic interpretation. The radio header: sender, destination, packet id, channel (the public LongFast channel is recognised), hops taken, relay node and ACK request. Any sync word. It reports 0x2B (Meshtastic), 0x12 (private / MeshCore) and 0x34 (LoRaWAN), and flags a sync word that doesn't match the selected profile. Ready-made profiles. Meshtastic BR (ANZ LongFast, 919.875 MHz) and MeshCore BR (923.125 MHz, SF8 / BW 62.5 kHz) for Brazil, plus Meshtastic US (906.875 MHz). The frequency can be edited. Generic LoRa mode. Listen on any frequency for any LoRa transmission: pick one SF or run SF7–12 at once, type the bandwidth (default 125 kHz, the common LoRa IoT setting), and see the frames as raw bytes, without assuming Meshtastic or MeshCore. Field station: Raspberry Pi + phone, no internet. MeshSDR runs headless on a Raspberry Pi and decodes; the phone app is its screen over Bluetooth or Wi-Fi, with the same interface, settings, messages and logs, and can download its recordings. English and Portuguese. Follows the phone's language, switchable in the app. Radio controls. Tuner gain (AGC or 20–49.6 dB), a live IQ level and clipping meter, an optional decimation filter, and ppm correction for dongles without TCXO. Every detection shows the measured carrier offset and the ppm value to set. Keeps listening with the screen off. A foreground service and wake lock keep it running for long monitoring sessions. Records raw IQ. 10-second .cu8 captures and log exports go to Download/MeshSDR, for analysis in tools like GNU Radio, inspectrum or SDR++. Optional automatic recording saves the 3 s before and the seconds after every LoRa detection, so each packet is kept from its preamble on. What you need Item Notes Android 8.0+ phone with USB OTG Field-tested on a recent Android phone RTL-SDR dongle (RTL2832U) Tested with R820T/R820T2 tuners OTG adapter + an antenna tuned for 900 MHz Mount it outside or near a window; a car body costs 10–20 dB RTL-SDR Driver (marto.rtl_tcp_andro) Free app that opens the USB dongle and serves IQ over a local rtl_tcp socket
License
GPL-3.0
About this version
- Version
- 0.6.1 (1099)
- Size
- 2.44 MB
- Requires Android
- 8.0
- Target SDK
- 26
- Architecture
- x86, x86_64, arm64-v8a, armeabi-v7a
- Downloads
- 5
- Updated
- Oct 23, 2026
- Package
- com.engperini.meshsdr
Similar apps
Ratings & reviews
- 50
- 40
- 30
- 20
- 10