A custom APRS tracker with a real screen

For those that don’t know, amateur radio operators have had something called the Automatic Packet Reporting System for quite a while now.  Most associate it with vehicular tracking, but it does a lot of other neat stuff like weather, telemetry, and message transfer. Many hams put a device called a “tracker” in their vehicle that periodically reports their position (which comes from an attatched GPS) on the air, which is picked up by other stations as well as internet gateways. That is what makes sites like aprs.fi so useful. For more information on APRS, see the inventor’s site as well as the APRSWiki.

There are typically two “classes” of tracker. The first is a simple transmit-only device, such as the TinyTrack3. The sole purpose is to transmit your position periodically, so that other people can see where you are.  If you want to be able to actually see where other stations are (without going to an internet site) you can use something like the Kenwood TM-D710, which is a radio with a TNC built-in, capable of displaying information on the screen. It looks something like this:


While it’s a ton of information if you have no other option, it can sometimes leave a lot to be desired. You can take it a little further and attach a serial GPS, which the radio will load with waypoints of the stations it receives. That’s helpful for seeing where the other stations are, but the display can get cluttered quickly with every station the radio hears over a modest period of time. Other devices like the HamHUD provide a little more powerful interface external to the radio itself, if you prefer.

Recently, I came up with a couple of things I’d like to see in a tracker, to make it more functional and more…let’s say “modern”. Some of the requirements are:

  1. A real display (with colors and graphics)
  2. Telemetry capabilities (specifically car voltage and temperature)
  3. Expandable to do other things, such as control various systems in the vehicle, perhaps at the request of an APRS command message 

I decided to try to build something that met the above requirements for my Jeep. I settled on using a BeagleBoard xM for the core system, which is a 1GHz ARM development board with 512MB of RAM that runs Linux. It’s basically a cell phone on a development board, without the cell radio. I housed it in a DogHouse so that I had a way to mount it in the vehicle. For a display, I found a 3.5″ LCD composite video display on eBay for under $40. This is what it looks like mounted to the windshield next to my larger GPS screen:

APRS Tracker Display

I wrote a very simple display app using GTK that runs full-screen all the time to give a pretty nice display. While GTK and X11 are pretty overkill for something embedded like this, the machine is more than powerful enough to run it and it gives niceties like anti-aliased font rendering for free. It also runs on my desktop just as easily as on the device itself, which is nice for development.

The actual APRS tracking code is a separate module that speaks to the display over a socket.  This means that I can run the APRS bit on the embedded board and the display on my laptop if I’m trying to debug something specific. I used the libfap library for parsing the actual APRS packets, but I think I will end up using something else in the long run. All the other code is mine, including the packet generation, beaconing logic, etc. I implemented intelligent (i.e. speed and turn-sensitive) beaconing logic, although I’m hesitant to call it SmartBeaconing exactly.

APRS tracker transmitting 

External to the BeagleBoard itself, I’m using a simple microcontroller that reads a voltage divider to report the vehicle voltage, and an LM34 sensor for temperature. I plan to add a lot more telemetry sensors to that unit over time, but for now it gives me what I want.

APRS tracker receiving 

Down the road, I plan to see about adding some of these features: 

  1. TIGER maps for displaying the actual positions of received stations. I have code for this already and the maps could be stored on a USB stick for pennies.
  2. Audio alerts for received packets and proximity alarms. The device has stereo audio in and out.
  3. Auto-shutdown of the radio and the tracker if the vehicle voltage drops below a certain point.
  4. APRS messaging
  5. On-board configuration. Right now, there is no way to give input to the device so configuration is done via text file
For many of the above, I need an input device. Right now, the plan is to try a tiny (cellphone-sized) bluetooth keyboard, which will allow configuration, text input, as well as triggering beacons and displaying more information.
For a more comprehensive view of how it operates and behaves in real life, see below for a video of me out and about with it today:


Category(s): Radio

42 Responses to A custom APRS tracker with a real screen

  1. Any updates on the APRS tracker? or any how-to write up’s? Would love to work on something like this myself.

    • Hi Phil,

      I’ve made several updates to it, yes. I’ll do another blog post at some point here with more information.

      If you are interested in playing with it, I could post a repository of the code.

      • That would be great. Being new to this, I thought this might be a fun project to start with.

        Thank you

      • i agree, i’ve done soem of my own aprs stuff specifically for the aprs-IS internet side of things. i’ve also written my own aprs parsing library (which im in the middle of refining).

        a repo would be nice. as you are using linux, i’m guessing you’re using the standard linux AX25 stack? or are you talking to the TNC directly?

    Dave Roberts says:

    Hi Dan

    This looks very interesting to me. Being fairly new to amateur radio, it was APRS which first attracted me to getting started. I don’t know if you’ve heard of raspberrypi? (google it) It’s an ARM based board developed here in the UK. Best part is the cost at about $40.

    Do you think it would run on this board? I’m quite interested in this so any more info about it would be good.


    • Yep, it should run fine on the RaspberryPi device (of which I am familiar).

      I’ll try to get some things cleaned up and documented for a posting here in the coming weeks, with a link to the code.


    Ricardo Pacheco says:

    Hello Dan,

    First of all I love your project and I’m waiting to see more videos with the new updates.
    I was wondering if you are going to share your APRS project with all of us (Amateur radios)!!!!!
    I love the idea to be able to use it in my car or in my radio station Smilie: :P
    It’s by far the best APRS project / tool that was invented.

    I’m looking forward to see your updates



    Justin Pontius KD8IAY says:

    Hi Dan,

    I love this project!!! I too would love to see the code if possible!!!


    Dan Bowkley says:

    +1 on the source code request…this is a really neat project, I wonder if you could just run Xastir on it? Of course it’s using a semi truck to pick up a gallon of milk, but it would do what you want…

    73 DE KG6OHK

  2. Okay, here you all go. Now, some rules (or points to keep in mind):

    1. This was not intended for public consumption, so don’t complain about places where my callsign is hardcoded, code is messy, etc (unless you want to fix it)
    2. Feel free to send me patches
    3. If you build something you are required to send me a picture

    This should build on most modern distros, assuming you install the two small required libraries:


    Start the “ui” binary first (probably with -w) and then start the “aprs” binary. It should be trivial to get it built and use the aprstest.ini config file to make it consume the worldwide APRS-IS feed.

    Be nice Smilie: :)

  3. Hi, Dan
    It is realy a great idea! (and ofcourse the realization too!). I compiled it on my desktops, first on CentOs 5.1 and after on a fresh ubuntu. It run well, I tested it with the attached aprstest.ini file (with your login to the oregon gate, sry…Smilie: ;)

    When I tested it a little in first time, come up the idea, to try to compile it on an embedded device, without any GUI capability, and try to modify (more exactly ask you to modify) it to use on the network from another machine, have GUI.
    First I compiled it on my NLSU2, runing on it a debian with development tools. After compiling the two dependencies, I modified only in the main Makefile, the order of the programs, need to compile: deleted the ui, because this small box hasnot gtk installed.
    All the compiled 3 programs, aprs, fakegps, and the uiclient, runnig without any problem, ofcourse the arps try to connect to the gui client.
    So, If you think, this idea is usefull, I ask you to schedule in your future task lists to modify the aprs and the ui to communicate each other on network.
    Here is a web page, I made it for inform about this new nice aprs tracker our aprs community:
    best, 73:

    • Hi Janos,


      I forgot how much work I had done to make this happen, but it was almost completely done. I just pushed another change to the repository to enable this, and it seems to work for me. Check out the commit message on the top changeset for instructions.



  4. Dan,
    Thank you very much!!!
    It works great, I compiled this new, extended version with network connection, on my NSLU2 and on my ubuntu.
    The network connection working… It seems, this will be my “poor-man” solution: in the car will working the NSLU2 with the tnc and if I want to see something, I put there a small laptop, and start the giu on it…Mybe later, I will try it on a routerboard with wifi connection too, hopefully, for the client will be usefull a cheap chinaes tablet, running linux on it too…

    Thanks again for the very quickly realized network extension!

    Mark Phillips says:

    Hi Dan,

    Excellent work!!

    Are you using an external TNC? It occurs to me that one could use Thomas Sailor’s soundcard modem without too much grief.

    Thanks for an excellent project. Now I have something to put on that spare video input on my minivan’s VES package.

    • Actually, I’m using a D700 in KISS mode. I’ve thought about a soundmodem, but right now it’s a single serial cable to the radio, which is way simple. I’ve already got too many wires under my seat Smilie: :)

    Mark Phillips says:

    How about some push buttons so that you can toggle between tracker, navit (for the mapping, and some gps stats from xgps/gpsd?

    Hmmmnnn. Having serious carputer ideas now.

    • Yeah, I’ve got a wireless presentation remote connected to it now, which gives me five buttons for navigating an interface on the device. I don’t have much of one created yet, but I can scroll back through the station history, which is nice. It opens a lot more options (read: work) Smilie: :)

    Mark Phillips says:

    ARM based AutoPC looking pretty good! Been looking at those Android based TV media players. Same specs as your Beagle Board but with wifi and BT for around $100.

    S0, APRS Tracker, Navit, CHiRP, D-RATS and other stuff for $100. And it’ll fit the spare av-in line on my factory radio – result!!

    Mark Phillips says:


    Needs gpsd support Smilie: ;)

    Been looking for the right board to start this project. Looks like it’ll be mini6410 based. Dev kits start at about $100.

  5. Somebody please list out the part that need to build this project..
    really love the sound & look.. thanks to the creator.. hope I can build one like it.. 73

    Mark Phillips says:

    I don’t mean to sound condescending or start a flame war on Dan’s site but this is not really complete project and what is required is already outlined in his (and other’s) messages.

    Dan wrote some code (available via git: per above link) which you will need to compile on your given platform. Dan uses an ARM based device called a BeagleBoard (not PC compatible). I’m currently using an Atom based home theater machine I picked up at Micro Center for $240. Both these machines output 1V p-p analog video such as you would feed into your TV’s yellow socket from the VCR etc.

    I’m running LXDM on mine and I’m guessing that Dan runs Angstrom Beagelboard default Linux distro) on his. As I have a regular PC I’m able to compile my code easily. Dan on the other hand has to “cross compile” the code to run on his ARM11 processor. I would not recommend you try cross compiling unless you are very familiar with both Linux and your chosen processor.

    The screen that Dan uses is available from ebay from about $50. It’s not a computer screen but a TV screen. I’m using the spare TV input on my minivan’s factory radio so I don’t need to clutter the dashboard with hardware.

    I found a cool bluetooth keyboard at Micro Center for $70. Its about the size of an xbox controller that you type on with your thumbs and it has a track pad underneath that you operate with your index finger . However, unless you want to run a full suite of apps and need full keyboard input I would suggest using any number of arduino based keyboard emulators that will present a few buttons that you would link to the application function you want.

    My setup has grown into a monster; PC, GPS, KISS TNC (homebrew), NQSMHS, PSK31 interface for my FT857and the relevant radio’s for it all.

    All of this is far too much money. Dan’s solution is also too much money coming in at over $300! In his defense, development and proof of concepts cost money.

    I’ve ordered one of those Android TV media player devices. They spec at a 1GHz ARM11 processor, 512MB+ RAM, 1GB flash storage, USB, video, wifi, 10/100/1000 for around $100. They can run Linux (Android is Linux based) too. I’ll let you know how I get on with it.

  6. Hi Mark Phillips,

    Would you share your video/picture for your project?
    I like to built.. but have no idea on how to start it..
    If you willing to share, it will be great.. thanks

  7. Really great work Dan!

    I have been wanting to see something like this for a long time.
    Xastir is good in many ways, but it’s not very car-friendly.

    Short wishlist:
    A “-h” option which displays usage.
    Comments in the example ini files, which lists valid options.
    Last but not least, two way messages!

    This is going to be a perfect match for Raspberry Pi.

    73 and thanks for making your work Open Source.

      Mark Phillips says:

      +1 on the-h switch.

      I tried to buy the Pi when it was released. Web site crashed under the demand for it. It’s going to be a got item!

  8. Tnx for the –help update.


  9. This week I got hold of an Raspberry Pi.

    I’ve so far managed to install the dependency libs and GTK on it. I’m running the recommended debian-build for the pie.
    After the libs was installed it was a piece of cake to compile aprs-hg directly on the pie, gcc is included in the image.

    The monitor is an old 7″ LCD composite 12 volt monitor. A perfect match for mounting in my car. The pie comes pre-configured for composite output. You don’t have to mess around with TV-out modelines in xorg.conf.

    I don’t have a correct config.ini yet, so I’m not visible on any map with the pie yet. Stay tuned.


    • Very good!

      Last week I fried my BeagleBoard, unfortunately. I’ve got a couple Raspberry Pis on order and plan to replace the BB in my Jeep with one soon.

      Mark Phillips says:

      Got me a Pi this past weekend.

      Spent some time at work today installing Rasbian, GTK and the other required libs. Compiled your code too. All works like a charm!

      So for around $100 one can build this project quite easily.

      Only problem is that it has no name! How about APiRS?


      • Yeah, my beagleboard died a couple weeks ago, so I’ve now replaced it with a Pi. I think it’s actually better, in terms of power requirements and the quality of the composite video out. Not to mention a lot cheaper!

      • Mark,

        How were you able to get it to compile?
        I’m using raspberry pi, installed gtk and the 2 other required but everytime i try to compile aprs-hg it tells me fatal error: iniparser.h: No such file or directory I’ve tried everything I can think of.

    Mark Phillips says:

    Mind if I start a yahoo group about this?

    If we can get the price of this project down to IRO $100 (which I feel is totally doable) then I’m sure your blog isn’t the place to discuss the finer points.

    Also, been thinking about TNC type hardware. We only have 1 serial port on the Pi but we do have a load of I2C etc. Can I2C be converted into serial?

    It occurs to me that we could create a daughter board with a KISS only TNC or perhaps one of the many “UI tracker” designs (but you don’t support UI) that would simply plug onto the Pi. The cost of this could be as little as $30. Down side is that it would consume the only serial port we have forcing us down the USB road.

    APiRS it is then!

    • Yahoo group? Please don’t! If you think there’s interest, I’ll be glad to set up a proper mailing list suitable for patch traffic. I’m pretty adamant about not joining yahoo groups whenever possible Smilie: :D

        Mark Phillips says:

        I forgot that you have mailing list abilities.

        Yep, I vote that we create a mailing list. I should be able to have some fodder for it by the weekend. Working demo etc pith pix.

    Mark Phillips says:

    APRS daughter board idea taking shape!

    Found this circuit http://www.gedanken.demon.co.uk/rs232-converters/i2c.html whilst looking for a I2C to serial solution.

    Question is, how do you acquire the I2C buss under Linux?

    I’m thinking that this would also be available on the TNC type board assuming there’s enough space. Otherwise I guess it’s yet another board with a SparkFun GPS module on it.

    Mark Phillips says:

    Yet more ravings ….

    There’s no RTC on the Pi. This means that we are reliant upon some sort of network time update. However, in the car/field/shelter we won’t have a network connected so that tools like NTP can do their thing.

    How about GPSD? The required GPS RX gets installed in the normal way (I know you know all this but for the benefit of other readers …Smilie: ;). The GPSD daemon is configured to capture the GPS RX. It then offers the GPS data to anything that wants it by way of a network socket. Simply configure NTP to look for the time locally. Likewise for aprs-hg.

    Now if only aprs-hg supported GPSD ….. I know you did it for D-RATS upon my request. I wonder if you have time to do it again for the APiRS project?

  10. I would like to know about how to build the display.

  11. is there any document on how to set this all up I’m a noobie and really like this project going to order my pi pc tomorrow looking at ordering tnc-pi for my tnc part of this project.

  12. Hey Dan and thanks for a wonderful project.
    I started it yesterday, worked through your mailing list, and then build myself the DanTracker on a Raspberry PI from scratch….. and it works…
    I recorded all the steps I did and will put it on the mailing list for others…
    see my little movie on youtube

    Erik / PA0ESH

    Michael Faircloth says:

    Sweet idea! I’m gonna give a go on the Pi.

    Now if Mark Phillips will put some of his projects out there on the net (like his lightning detector <a href="https://oshpark.com/shared_projects/hNmWES7r) life would be good.