Tracking Planes With An ESP8266

While there are apps that will display plane locations, [squix] wanted to build a dedicated device for plane spotting. The ESP8266 PlaneSpotter Color is a standalone device that displays a live map with plane data on a color TFT screen. This device expands on his PlaneSpotter project, adding a color display and mapping functions.

First up, the device needs to know where planes are. The ADS-B data that is transmitted from planes contains useful data including altitude, velocity, position, and an identifier unique to the aircraft. While commercial services exist for getting this data, the PlaneSpotter uses ADS-B Exchange. You can set up a Raspberry Pi to record this data, and provide it to ADS-B Exchange.

With the plane data being received from the ADS-B Exchange API, it’s time to draw to the screen. The JPEGDecoder fork for ESP8266 is used for drawing images, which are fetched from the MapQuest API as JPEGs.

Finally, geolocation is needed to determine where in the world the PlaneSpotter is. Rather than adding a GPS module, [squix] went with a cheap solution: WiFi geolocation. This uses identifying information and signal strengths from nearby WiFi access points to determine location. This project uses a public API by [Alexander Mylnikov], which returns a JSON object with longitude and latitude.

This project demonstrates what the ESP8266 is capable of, and brings together some neat techniques. If you’re looking to geolocate or display maps on an ESP8266, the code is available on Github.

15 thoughts on “Tracking Planes With An ESP8266

    1. It’s actually because of a different ascii set. The render on the lcd is IBM extended ascii, but the transmitted data seems to be normal extended ascii.

      (you hackaday guys should hide the report button better, I always press it before actually using the right reply button.)

    2. Fixing the extend ASCII stuff is on the todo list. I’m using Adafruit’s display driver for the ILI9341 display. I wrote a driver for the SSD1306 which is used for 128×64 monochrome OLED displays and there the umlauts work well. But you might be right, I integrated the UTF8 to ASCII code into my library and just assumed that Adafruit had done the same… I’ll investigate… There were some more pressing problems to be solved:-)

  1. Tried something similar, unfortunately we’re rather lacking in the airport department. Nearest one is a very small airport, and the next is in another state. Made for a rather empty sky.

    1. According to my calculations and knowledge double buffering is not possible, the ESP8266 has not enough memory/heap for 320x240x2 (16bit colors). I considered the flash memory for double buffering but that would be slow and would probably wear out the flash memory quickly. There were some guys considering some tricks with the ILI9341 scrolling function but I guess it didn’t work. Do you know any other tricks?

      1. The only other way I can think of is to redraw only regions of old and new plane location, but that will make it significantly more complex and doesn’t worth as there won’t be any gain after all of that.

  2. It’s really amazing what the ESP8622 can do. I’ve played with them and they are a mind-blowingly fantastic step up from the stock Arduino hardware, but to see one doing something as resource intensive as downloading, decoding and displaying a JPEG image on a device with relatively constrained memory limits is amazing.

    Kudos for even thinking of throwing such a project at it in the first place.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.