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.
Great project. :)
Not only that, but who knew JP II had an airport named after him?
Only in Poland :P
There’s also a bridge in Costa Rica xD
Yes, there is more life out of Murica :)
Those Extended ASCII codes, looks like he forgot to translate from unicode ..
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.)
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:-)
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.
Great Job!
As a generic solution you can push images of any web page to the ESP8266 using a script running as a rendering proxy with the core work being performed by your proxy server using CutyCapt. http://cutycapt.sourceforge.net/
Or you could just run a VNC client on the ESP, https://github.com/Links2004/arduinoVNC
Is it possible to have double buffer on it? It should help with flickering especially if there would be more planes on screen
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?
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.
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.