Make Your Own METAR Weather Map
This is kind of like COVID sourdough bread for pilots. Seems like many of us undertook this fun project to keep us busy during COVID. As usual, I was a little behind the trend and just finished mine. I’m going to write up how I did mine, hopefully it will help make yours come out better!
** UPDATED 5/23/2023 **
What is a METAR Map? METAR is a format for reporting weather information, and its the format that pilots consume while flight planning or en-route. Most larger airports have their own weather station and distribute METARs concerning the weather at their location. A METAR map uses a small micro-controller to download METAR information from those airports and display it on a map using colored LEDs. For example, green for good weather, red for bad, and other colors in-between.
The end result will look like the image below. In this well lit picture, the green dots may not jump out at you, but those are small LEDs that change color based on the weather in that area. This map displays weather in 13 locations across the map.
This guide assumes you are using a windows OS and have basic computer skills.
- Hot glue gun
- Soldering Iron
- Foamboard Hole Drill – this will make it much easier to make nice clean holes in your foam-board. Its pricey though if you are only going to make one map.
- Xacto Knife
- Basic Wire Stripper
- ESP8266 (Node MCU) – This is a little dev board micro controller that you can program with the Arduino IDE. It has built in wifi, takes USB power, and is very small, making it perfect for this project. Don’t worry if you don’t know much about this stuff. We’ll get there.
- A regular micro-usb cable and USB power supply, like you probably have hanging around from an old phone. You’ll use this to power the board.
- Foam Board – You will mount the printed map on this.
- Spray Adhesive – This will nicely adhere the printed map to the foam board.
- Addressable LEDs – here you have a choice. These are the ones I used, they are thinner and probably the best option. The downside is that they come from overseas and might take a month to arrive. These are your other option, which are readily available from Amazon but are a bit thicker.
- A Map – Go here and download the image for the area you want to make a map of. Crop it to the area you want using any image program. Then, resize it to be something like 12″ x 18″ or whatever size you want your finished item to be. I had it printed out at Staples on their heaviest paper using a matte finish. I recommend a heavy paper for this because thinner ones may wrinkle when you glue them down.
- Download and install drivers for your board. This will allow your PC to discover it when you plug it in.
- Download and install the Arduino IDE.
- Fire up Arduino IDE.
- Now we need to add the NodeMCU to the Arduino IDE by going to File->Preferences. Look for the field labeled “Additional Board Manager URLs.” In that box, paste in this:
- Now go into Tools->Boards->Board Manager. In the search box, type “ESP8266”, which is actually one of the chips (wifi) on your board. Click on the one that comes up, and click “install”. If you are having problems with this part, here is a more detailed tutorial.
- Select the board as a NodeMCU which might be under a submenu labeled ESP8266 as shown below.
- Kyle Harmon has a great codebase to handle this. I played with some others, and this was the best. This is the actual file you need. Find the rest of the project here: https://github.com/WKHarmon/led-sectional
- The project relies on the FastLED library for LED control. Download that here. Copy it into your Arduino Libraries folder in Your Documents\Arduino\libraries\FastLED
- Open up the led-sectional.ino in Arduino, and you’ll need to do some editing. There are some variables at the top of the file that you need to update. Here are the edits you need to make:
- Look for “NUM_AIRPORTS” and set that to how many LEDs will be in your map.
- Look for these lines, and configure them with your WIFI info:
const char ssid = "MYSSID"; // your network SSID (name)
const char pass = "MY_WIFI_PASSWORD"; // your network password (use for WPA, or use as key for WEP)
- If you got the thinner LED from Aliexpress, then look for #define LED_TYPE and set it to WS2812B. It should look like this:
#define LED_TYPE WS2812B
- If you got the thinner LED from Aliexpress, then look for #define COLOR_ORDER and set it to GRB. It should look like this:
#define COLOR_ORDER GRB
- Edit the list of airports to be the ones you want to light up on your map. Make sure your airport reports weather through aviationweather.gov. You can do this by going to the URL below, editing the KJFK at the end of the sample URL below with the airport code you want to use. If the airport is supported, you will get METAR data in an XML type format. If the airport data isn’t available, it the XML structure will be empty, so don’t use that airport.
10. Finally, you just need to upload this code to your board. Go to sketch->upload and cross your fingers while you wait for it to do its thing. If all goes well, move on to the next step. If there are errors, troubleshoot them!
11. Wire this thing up to test it before you build everything. If you are using the thinner LEDs from Aliexpress, connect the wires like this:
LED RED WIRE => 3v3 pin on your NodeMCU
LED GREEN WIRE => D2 pin on your NodeMCU
LED BLUE WIRE => GND pin on your NodeMCU
Temporarily connect those wires, then plug it into your laptop and make sure everything lights up! If not, its time to troubleshoot. A hint: you may want to learn about the Arduino serial monitor for troubleshooting purposes.
- Line your printed map on top of your foam board. Mark on the foam board where each airport is. I did this by using an extra copy of the map, and sticking a nail through each airport and through the foam-board.
- Create a hole through the foam board where each airport is. If you have one, use your Foamboard Hole Drill.
- Spray the foam-board with the Spray Adhesive. Then affix the map to the foam-board.
- Use your Hot glue gun around the LEDs to secure them in the holes. The thinner ones from Aliexpress have a nice bit of circuit board that provides a good surface to glue on. If the space between your airports is too long, you can cut the wires, and splice in extensions. Carefully crimp or solder the wires, then hot glue the connections in place. I also suggest hot gluing the wires down at various intervals to secure them.
- Wire in your NodeMCU like you did before, this time, do it securely, I’d suggest soldering in place.
- I removed all the extra pins from my NodeMCU to make it thinner. For the pins that remain, bend them sideways. See the image below for how the backside of my board looks. Not the prettiest thing, but nobody will see it!
- Hot glue the NodeMCU right onto the posterboard. Plug the USB cable that will ultimately be your power cable in, and hot glue it down to reduce stress.
- Place this whole thing into a frame. I used this one. That is a 12×17″ frame in Dixie Gray color, which arrived quickly. I cut my map to fit the frame.
- Plug it in, fingers crossed! I hope it worked for you!!
** UPDATE **
Brian C wrote in to let me know that the current version of FastLED may have some issues. His build was not functional using FastLED version 3.5, but once he swapped in FastLED 3.3 it started working correctly. If you are having issues with your LEDs staying bright white, displaying the wrong colors, or not updating – try out an older version of FastLED.
I received a few other notes that suggest trying different data pins, depending on the specific controller you are using. One person suggested that pin D2 didn’t work for them, but D5 did. Another suggested that Data_Pin 0 didn’t work, but LED_PIN 0 did work. If you are having issues such as the lights flickering or not lighting up at at all, verify what pins you are using.
Good Luck with your build!! If this post was helpful for you, or if you have any questions or comments, please let me know below.