A python/micropython based library for encoding/decoding, modulating/demodulating APRS/AX.25 packets in AFSK audio.
The purpose of this library is to thread-the-needle of both enabling APRS/AX.25/AFSK from PC to microcontroller while maintaining portability and readability of python. This library is optimized for embedded systems, especially micropython supported targets and platforms and small computers, not to mention Cpython and Pypy!
In practice this means we:
- Avoid floating point and math libraries and dependencies in critical sections.
- 👍 Integer math only
- 👍 NO external libraries (numpy/scipy/pandas).
- Special care for memory allocation
- 👍 Pre-computing buffer/array sizes and modifying in place
- 👎 Dynamically appending items to a list
- Single threaded, multitask friendly
- 👍👍 Asyncio
Micro-Aprs decodes 1000+ error-free frames on the TNC CD Track 2. That's 1010 👀 in a balanced mode at 1020 🎆 in a more computational intensive mode! (TNC CD Track 2 is the universal test for APRS demod, this performance is very good!)
As many who've gone down this path have mentioned, there's surprisingly little useful information out there covering these topics. I hope these tutorial sections will provide you additional information on getting started!
- AFSK Demodulation. Convert raw AFSK samples to bits.
- AFSK Modulation. Convert byte arrays to AFSK samples
- AX25/APRS Encoding and Decoding. Step-by-step encoding/decoding APRS and AX25.
- 144.39MHz 1/4 Wave Ground Plane Antenna Design.
Basic command line for encoding and APRS strings to AFSK audio samples and the reverse.
- Encode APRS strings to AFSK audio samples.
- Decode AFSK audio samples to APRS strings.
- Micropython Encode/decode, but with embedded system friendly (also great on big machines too!).
- Pypy, another supported options faster than C python.
Applications using aprs_mod.py
and aprs_demod.py
.
With Micropython, these examples show some examples for embedded systems. I primarily target ESP32-S3 at the moment.
- ESP32-S3 - working around missing DAC
- TinyS3, a quality and accessible esp32s3 board.
- LilyGo T-TWR Plus, a commerically available esp32s3 board with SA868 Wireless Transceiver.
- Rx/Tx digipeating
- Deploy as a 🎈 HAB payload!
- Micropython project
- Direwolf TNC
GNU General Public License v3.0