Make Your Own METAR Weather Map

Posted in Tech Soup1 year ago • Written by Rick Gouin17 Comments

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!

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.

I’ve broken the guide down into 2 parts: Electronics Setup and Physical Construction.

Recommended Tools:

Materials Required:

  • 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.

Phase 1: Get your Electronics in Order

  1. Download and install drivers for your board.  This will allow your PC to discover it when you plug it in.
  2. Download and install the Arduino IDE.
  3. Fire up Arduino IDE.
  4. 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:
  5. 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.
  6. Select the board as a NodeMCU which might be under a submenu labeled ESP8266 as shown below.
  7. 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
  8. 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
  9. 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:

  • If you got the thinner LED from Aliexpress, then look for #define LED_TYPE and set it to WS2812B.  It should look like this:

  • If you got the thinner LED from Aliexpress, then look for #define COLOR_ORDER and set it to GRB.  It should look like this:

  • 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.

Phase 2: Physical Construction

  1. 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.
  2. Create a hole through the foam board where each airport is.  If you have one, use your Foamboard Hole Drill.
  3. Spray the foam-board with the Spray Adhesive.  Then affix the map to the foam-board.
  4. 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.
  5. Wire in your NodeMCU like you did before, this time, do it securely, I’d suggest soldering in place.
  6. 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! 
  7. 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.
  8. 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.
  9. Plug it in, fingers crossed!  I hope it worked for you!!

If this post was helpful for you, or if you have any questions or comments, please let me know below.

17 Comments so far. Feel free to join this conversation.

  1. Alan Meyer May 22, 2021 at 10:37 am - Reply

    I just saw a map on an FBO wall similar to this and I am interested in making one for myself. Thanks for posting all this and I just ordered the LED’s and accually have a couple of the NodeMCU’s at home.

  2. Rick Gouin May 25, 2021 at 12:13 pm - Reply

    My METAR map has been on 24×7 for the last 5 months and so far no problems!

  3. Alec July 20, 2021 at 8:05 pm - Reply

    Hey Rick, I’ve been working on my board. I’ve got the first three connections lighting up, but my first LED always is showing “LIFR”. My other two after that are showing VFR as they should, and the first one should be showing VFR as well. Any ideas?

    • Rick Gouin February 3, 2022 at 1:54 pm - Reply

      By default, at the top of the list of airports, the code example has the key to the map, where is lists all the colors for each type of weather. The first item in the list is LIFR. I would start by checking my list of airports and making sure I didn’t set LIFR as the first “airport”.

    • Brian Gaines April 12, 2022 at 4:25 pm - Reply

      Did you ever get this figured out. I have a similar problem where the first bulb is always green and super intense. Much stronger light than the normal green. I do have the airport correct. All of the others work perfectly. I am using the WS2811 bulbs. Wondering if this is a power issue or a code issue. Same issue on 2 separate light strings I tried

  4. Ben December 19, 2021 at 4:22 pm - Reply

    The Arduino has multiple 3v3 pins and multiple ground pins. Can you advise which pin. One combination lights up one LED only.

    • Rick Gouin February 3, 2022 at 1:56 pm - Reply

      They should all work.

  5. John Culp January 1, 2022 at 11:43 pm - Reply

    Thank you for putting this together it was a great base to get started, I used the same NodeMCU and with a DATA_PIN of 14 in the code, the data output pin is D5, not D2. I would also recommend using a true 5v power supply, I noticed the 3.3v output didn’t work for me that well.

    Great tutorial, now I am looking at all the things I can use WS2811 style lights on. The Arduino is a cool thing.

  6. Greg Laudick February 4, 2022 at 1:15 pm - Reply

    Hi Rick, I have the WS2811 lights, ESP8266 programmed, the WiFi is working, gathering weather data from the website like it should, but no lights. I’m using pin D2 (GPIO4) for data pin, have it coded that way and nothing lights. When I hook up the power wires up, random lights flicker for about 1/10 of a second. Is there another bit of the code I should be changing to make this work?

  7. Greg Laudick February 4, 2022 at 1:48 pm - Reply

    Do I need to change “digitalwrite(LED_BUILTIN, LOW) to something else to get the lights to come on?

  8. Greg Laudick February 9, 2022 at 11:07 am - Reply

    I worked on the code for 35-40 hours. Got nothing but yellow lights. Tried every output pin on the board, nothing worked. Without going into detail of the countless other things I tried to make it work, what did make it work was to change DATA_PIN 0 to LED_PIN 0. I’m using a WS2811 LED string and an ESP8266. Just in case someone else would be having troubles.

  9. Greg Laudick February 9, 2022 at 11:08 am - Reply

    Thanks to Rick Harmon for the code!!

  10. Alan March 12, 2022 at 1:54 pm - Reply

    I’ve tried the works here and I’m pulling my hair out – got the recommended set (thicker WS2811 off Amazon) with an ESP8266 and I can’t get it to pop up at all – I’ve even tried simply using an LED type controller to poll through the lights and still nothing – only thing I can assume is that the WS2811 strip, which flashes ever so briefly same as Greg, is now needing that solid 5V – I’ve tried using D5 as per John, setting to 14 and 5 pin, changing DATA_PIN to LED_PIN in the code – and nothing – going to see if I can somehow find the thinner LEDs without having to ship from aliexpress.

  11. Vivian March 17, 2022 at 10:49 am - Reply

    I was checking to see what my various options were for building the METAR board. I have all the hardware from other projects around the house. So my question is the to promising options are via nodemcu or raspberry pi. I would prefer to go the nodemcu path since I have so many boards laying around and only a handful of pi. The pi gives me the option to also display the METAR text in a small screen in addition to the led lights. I haven’t looked at the nodemcu code so I am not sure if this screen addon is doable from the existing Nodemcu code without too many revisions?

  12. Brian Clardy April 27, 2022 at 5:06 pm - Reply

    This is great. This has been a fun project in trying to learn Arduino. Something new and different as a hobby! I’m aiming to make a good size one, with 50+ airports (spread across two boards and strings of LEDs).
    The issue is that I got the board and LEDs connected and got the lights to come on just once while the sketch was loading. Once the upload finishes, the lights immediately go out. The first “airports” in the code are no LIFR or anything else.
    Adding to this, the serial monitor just returns ???? too. There’s no other data coming through. I can’t tell if it’s fully connected or not. Any thoughts would be helpful.

    • Brian Clardy May 4, 2022 at 8:31 am - Reply

      Okay… I got the whole thing working, all LEDs are lit, and I see the data coming into the board (via the serial monitor).
      The final issue seems to be that the LEDs are not refreshing with the color data — or changing at all. They remain exactly as they were. I can get them to change with simpler programs, but something in the code is preventing the refresh.
      Is there a reason they’re not refreshing? What am I missing? It seems like it should be fairly simple.

      • Brian Clardy May 4, 2022 at 8:55 am - Reply

        This is definitely an issue with whatever elements of the code write the LED colors. Something’s not working with this code (or another set I found online).
        Not sure what the issue is, but I’ve tried multiple data pins and hard reset the board (including power). Now when the code runs I only just get the first LED as orange.
        The LED type is definitely WS2811 and the color order is RGB. There’s a lot of extraneous code for the light sensor but I have that disabled so I don’t think it’s doing anything.
        Again, any additional thoughts or troubleshooting for this would be greatly appreciated.

Leave A Response