Menu Home

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!  If you are stopping by because you made a METAR map and it recently stopped working, scroll to the bottom for instructions to fix it.

** UPDATED 11/28/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.

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

  • 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.
  • Code versions matter.  I suggest using esp8266 version 3.0.2 and FastLED version 3.3.3.  You can choose which version of FastLED to use by going to Tools -> Manage Libraries -> select FastLED and choose what version you want to use, as shown below:
  • You can select which version of ESP8266 you use by going to Tools -> Board -> Boards Manager and selecting the version you want, 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:
  • 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:

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

  • 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!
    • Note: If your board is not showing up in your PC device manager, or the port is not showing up in your Arduino IDE, or you are getting ESPTOOL.PY errors, or anything else that seems like it could be related to connectivity, the first thing to try is changing your cable.  Many micro-USB cables are for charging only and are not suitable for data.  Try a different cable as a first step.
  • 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

Note: in the image above that the port numbers don’t match what is printed on the board.  For example, GPIO14 is labeled D5 on the board.  In the code, you’ll want to use the GPIO numbers, not the ones that are printed on the board.

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!!

** UPDATE May 2023 **

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.

**** Update November 2023 ****

On October 16th, 2023, the data format for the Aviation Weather website changed.  If you have an existing METAR map that stopped working around this time, all you have to do is update to the newest version of the code from Kyle Harmon, located here:

If you’ve customized your code already and don’t want to start from scratch, you can easily update your version by searching for these two lines:

and replace them with this:

That should fix your issue and get your lights working again.

**** Some Common Troubleshooting ****

Symptom: One light, frequently the first one, that lights up with an incorrect color, at a different intensity, or both.

In the beginning of the code, between ESP8266.WiFi.h and FastLED, include the following:

This fix was tested using FastLED v3.2.10 and esp8266 v3.1.2

Credit for this fix goes to Matt Lane, who posted it in the comments below.

Another Fix: Put a random airport that you don’t care about as your first one.  Then, cover that LED with electrical tape so you can’t see the light, and just stick it to the back of your map.  Now you don’t care if it lights up the wrong color or intensity since nobody can see it.


  • Board not showing in device manager
  • Port is not showing up in your Arduino IDE
  • Getting ESPTOOL.PY errors
  • You get an initial flicker of the lights and then they go dark

Fix: Try a different USB cable to connect to your PC when programming.  Many micro-USB cables are for charging only and don’t work for programming the board.

Symptom: Your board is not connecting to wifi
Fix:  Are you connecting to a 5Ghz wireless network?  The NodeMCU only supports 2.4Ghz wireless.

Symptom: None of your lights are turning on
Fix:  Validate that you are using the correct data pin.  Note that the pin number to use in code is not the same as the number shown on the board.  For example, the pin labeled D1 on the board would be GPIO5 in code.  Use the diagram in the post above to verify that your wiring and code are utilizing the same pin.

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.

Categories: Tech Soup

Rick Gouin

94 replies

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

    1. Finally, I can see the end of my on again off again project. I did have to leave a led on the back as a dummy because as some below stated the first one seemed to be a random color and just stay bright. It was working at one point but now staying on again. I paired out all the code having to do with the light sensor. A fun trial and error exorcise. However, I would have liked to put one of my real airports first then the key and then the rest of the airports so I wouldn’t have had to splice a long wire to the last one as it was close to the key. Try as I might as soon as I tried to rearrange the airport list the whole thing would go bust. I am still very much a newbie at coding so I have been going through the list to try to understand why the key has to be first. I would guess its in the key segment of the code but not sure. The other hang up was getting a map of my area as I sit right on the edge of KC and Omaha so I would get started then quit after trying to find the map that would print big. I was finally able to find a Tiff file of the 3 areas I needed and put them together and print a high-quality map. Anyway I made 4 as there will probably not be any more due to the cost of putting them together and pain in the but to get the map but I would love to post a picture. Thank you for the great project.

  2. 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?

    1. By default, at the top of the list of airports, the code example has the key to the map, where it 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”.

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

      1. I am having a similar issue where the first LED is displaying a magenta color at full brightness. It seems to be a code issue because I can write a few quick lines to manually assign a color to each led and they show correctly. Any resolution that worked for you?

      2. Did you ever figure this out? I have the same problem. It’s definitely code; but I can’t figure out where. When using the same setup() but replacing loop() with a simple program to flash up a bunch of various color combinations it works fine. Debug shows the proper color in the array right before the show call, so some odd FastLED thing.

        1. Hey Frank,
          Similar problem but my first bulb is showing just bright blue. Which is not assigned to any wx condition. Very new to all this, but did you find any solution?

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

    1. Thanks John, great point. I updated the post above with a diagram to show how the labels on the NodeMCU don’t match the pin to use in code. For example, the pin labeled D5 would be 14 in the code. I guess I always assume that people update the code with whatever pins they are going to actually use in their build.

  4. 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?

    1. Hello Greg, I am having this same issue and can’t figure out why- random lights flicker for 1/10 of a second when first plugging in then nothing. Did you ever figure this out?

      My serial monitor gets all of the METAR data, and then tells me No lighting; going to sleep for: 900000

      I tried changing DATA_PIN 14 to LED_PIN 14, also changed it where that variable gets passed later on in the code. Even tried a brand new string of WS2811 lights. Can’t get the lights on at all!

      1. I had that initial flicker when I was first setting up. In my case it was because my COM port was not found. It took me 5 hours just to figure that out. I think it was a combination of many things including that my USB cable did not support data. Very frustrating!

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

      1. If you open the code in the Arduino IDE, just search for “#define DATA_PIN”. The issue you and Greg are running into may be that the port currently defined in the code is not the same one you are connected to physically.

        In the article above, look at the graphic of the board that shows which ports are which. For example, if you are connecting your lights to the first pin on the right side of the board, labled D0, then you would update the data pin to be 16. Make sure that the pin in your code matches the pin you are actually connecting to.

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

    1. Where you able to install the thinner LEDs to see if that worked? I have the amazon LEDs and cannot get the lights to turn on.

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

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

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

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

        1. How did everything work out for you Brian?

          Rick wrote above “Brian C wrote in to let me know that His build was not functional using FastLED version 3.5, but once he swapped in FastLED 3.3 it started working correctly.”

          The 3.3 version is not published

          Anyone have 3.3?

          I am getting various errorsDocuments/Arduino/led-sectional/led-sectional.ino:9:1: error: stray ‘\’ in program e

  9. Thank you Rick Harmon for the code. I have the ESP8266 (CP2102) with the WS2812B LEDs. I soldered three lights together, updated the code like the instructions called for, and hooked everything up. All LEDs except the first operate as expected. The first LED is much brighter than the rest and it stays on a specific color depending on the version of FastLED I am using. I’ve tried all versions back to 3.0 but still no luck. Also, I cannot find version 3.4. Any ideas? Thank you!

  10. Just been and looked up the 12 sites in the philippines that have METAR info available RP…. is the codes map is coming and i need to find a piece of foam board. Ibhave loads of node mcu’s so a quick project over xmas when there is time…



  11. Hi Rick,
    thanks for that amazing project.
    I had a few difficulties but worked them out with the help from the comments.
    One Problem is still there. The first Airport is not Showing the right meter condition and is much brighter than the other Leds.
    And the first one is actual a airport and not a Metar Condition.

    I Use a NODE MCU ESP82666and W2812B LEDs When I run them in the Fast LED Programs, everything is going fine.
    Any ideas?


  12. I have a strange issue. I have 10 LEDS to test with and a list of 10 airports.

    The result is only the first 9 LEDS light up and it’s with the data from 2-10.

    I can do test of all VFR airports and one IFR airport. The result is the IFR airport shows up Red as it should, butg on one LED before the desired LED, leaving LED 10 with no data.

    Power on sequence is Orange on 1-9, #10 white
    Purple 1-9, #10 white

    As a hardware test, I did this:
    #define NUM_LEDS 10
    #define DATA_PIN 14
    CRGB leds[NUM_LEDS];

    void setup() {
    FastLED.addLeds(leds, NUM_LEDS);

    void loop() {
    leds[0] = CRGB::Red;
    leds[1] = CRGB::Green;
    leds[2] = CRGB::Blue;
    leds[3] = CRGB::Red;
    leds[4] = CRGB::Green;
    leds[5] = CRGB::Blue;
    leds[6] = CRGB::Red;
    leds[7] = CRGB::Green;
    leds[8] = CRGB::Blue;
    leds[9] = CRGB::Red;;

    All 10 LEDS light up in that exact order, telling me there’s something wonky in Kyle’s code. I just can’t find it.


  13. Hi Rick, thanks for that great guide.
    I’ve build it wit a ESP8266 Node MCU from AZ-Deliverys seems like the Data_Pin is 2 but on the Board it is D4.
    If you buy the Boards without pins, there is a bit more Space in the back.

    One Failure I still have and do not know how to fix is the wrong color at the first LED.
    Any recommendations?

    Thanks a Lot Marc

    1. Good question Marc. I’ve added a diagram to the article to show which pins are available and how they should be referred to in code. For example, the pin labeled D4 should be referred to as pin 2 in code.

      I often end up cutting the pins off of these boards, didn’t even realize I could buy one without them!

      The code treats the first LEDs as like a key or legend. Do you still have that in place? It would cause your first LED to be the wrong color.

  14. I’m hoping someone will be able to help me with this. I am relatively new to this code. I have followed the guide here and tried to set this up with just a single led for now and can’t get anything to light up at all. I’m wondering if it’s this line

    std::vector airports({
    “K21D”, // 1 order of LEDs, starting with 1 should be KKIC; use VFR, WVFR, MVFR, IFR, LIFR for key; NULL for no airport

    I just removed the rest of the airports from the example and entered my home airport. Does this need to be numbered?

    Also, am I supposed to define the NUM_AIRPORTS in more than one spot?

    Thanks in advance for any help

    1. A number helps with knowing exactly how many led’s you have for the total led count. eample:
      “K4J6”, // 1 LOGIC lED NOT FOR AN AIRPORT. order of LEDs, starting with 1 should be KKIC; use VFR, WVFR, MVFR, IFR, LIFR for key; NULL for no airport
      “K24J”, // 2 Live Oak
      “KNIP”, // 3 NAS Jax
      “KJAX”, // 4 Jax
      “KCRG”, // 5 Craig
      “KNRB”, // 6 Mayport
      “KFHB”, // 7 Fernindina
      “KSSI”, // 8 Saint Simons
      That number is for you. the ESP counts it a different way. There is only 1 spot for the NUM_AIRPORTS which is the total number of LEDS you connect including a logic LED if needed. You can see in my code that my first airport listed but that airport does not report weather besides being totally closed. That is where the text about using KKIC comes about. That airport does not report weather either. Before I rolled my esp and fastled drivers back, my first led would be brighter and not the correct color. After research and asking about it, it was thought that the led was acting as somesort of logic. So I put that one behind the map with tape so it could not be seen. Now that I have got the older code to work, it is off/out.

  15. I discovered that mine wouldn’t work when connect to a 5G WiFi network – all lights remained an orangish color and never refreshed. Connecting to 2.4Ghz solved this for me.

    I’m also using WS2811 LEDs on pin D5, and FastLED v. 3.4

    1. I pulled my hair out with this issue. If I assigned a static IP address, things worked, which told me that my router wasn’t handling a DHCP request from the board properly. Some routers in Smart WIFI mode are issues with this board. You can force the board to work as expected by adding these two lines:


      immediately before this line:

      WiFi.hostname(“LED Sectional ” + WiFi.macAddress());

  16. Okay so I found out something that may help a few. I decided to go with the thicker LEDs that were purchased off of amazon. After a couple hours of trying to figure out why the lights were not turning on, I decided to read the reviews about the lights. Turns out that they are directional lights and only will work going one direction. I flipped the wiring to the other side of the strand and they worked!!!

    Hope this helps!

  17. Finally (mostly) got mine up and running with the Amazon LEDs. Initially had all kinds of trouble controlling the LEDs; even though a simple program that cycles through colors worked fine. Backed off to FastLED 3.3 and it’s mostly good. The first LED is just not behaving. Lights up in a random color at full brightness and stays that way. Anyone have any ideas? For now that one is just left behind the board! Otherwise it works great! Thanks for the design and helpful notes!

  18. I built one for the Philippines. Due to the fast led issues i have rewritten the led handling using neopixel-bus that uses the i2s with DMA access to manage the leds. as above i didn’t use the diming section and i used a final led ( number of airports +1 ) as a holding buffer for the changes and updates due to lightning rain ect 63 airports with iata codes with only 10 reporting on the entire Philippine islands

    and yes occasionally the wifi drops i need to figure a response to no wifi that’s visible

    1. Steve, is your code with neopixel posted anywhere? I’d love to try using this instead as I am looking to drive the leds with a Wemos D1.

  19. Hi, I have been working on one of these charts since the end of December. I came across a Facebook post that showed theirs and the led’s they used. After reading this comment section and having similar issues, here is what I have found out to help with issues.

    I found an aeronautical map of Georgia through the Georgia DOT website. They used to print these maps but you can download the pdf (large file size) and pull out the map as a jpeg or similar file. I had staples print mine at 24×36. Many other states have similar maps such as Florida, South Carolina, and Tennessee. Some states such as Alabama have a state map showing airport location but the map is not an aeronautical type.

    I used these led’s:
    I suggest knowing how to solder and to use 24ga solid wire to connect them together if you go this route.

    I needed another driver for my computer to see the ESP., the CP210x driver.

    You will likely need your first led to be hidden to do what it wants. From what I could find, it is acting as a logic. However, this seems to only occur if you get your chart to work with new software versions of the esp8266 and fastled. I was able to do so some but it would freeze.

    It was suggested on the GitHub instructions for where the code comes from to use older drivers. I am using esp8266 ver. 2.7.4 and fastled ver. 3.3.0. To use these older versions, change your data pin back to 5 instead of 14. That is what I had to do to not get an error in Arduino and to be able to upload the sketch to the ESP.

    Next, in the code, your first airport needs to account for the logic led so you can put null or name it whatever that does not have weather. I named my K4J6 after the airport I learned to fly at. This led still needs to be considered in your led count. As for example, I have 95 airports and the logic for a total of 96 led’s. The last airport should not have a comma after it. It should look like this:

    “KCUB” // 96 COLUMBIA

    I will have a video up soon about mine to help with this.

  20. I just started building a Metar map. I started with the bullet pixels first to make sure I could make it work. I was having such a hard time until I scrolled down to the comments and saw that rolling back to a older FastLed worked for most people. My lights were working with a base color pallet sketch from Arduino so I knew it was wired and pinned correctly. After finding the 3.0.0 FastLed everything started working. I do have the same issue as others with the very first pixel being full brightness and a random color even with putting Null or an airport that does not report weather. That bulb will just get black tape and hidden behind the map. Now I’m off to learn how to mesh the sectionals together! Thank you for all the info and comments to help others out!

  21. Hi there. New to coding and I am stuck at #9. Open up the led-sectional.ino in Arduino, and you’ll need to do some editing.

    Am I supposed to download the led-sectional.ino file? If so, how do I download it…I can only seem to be able to copy that info.

  22. Success ! I have built 2 of these so far. One for the house, and another for a buddies hangar. I will build # 3 and donate it to the flight school I spend alot of time around. Some things I did to accomplish the task. I used a dremel tool with a small round cutting bit to make the holes over the airport. On the backside I used a conical sanding bit to enlarge the hole to accommodate the square LED of the LEDS listed above that were used. Instead of hot glue to adhere the led, I used foam safe cyanoacrylate glue (super glue) with the accelerator to glue the entire disc down. I did use a gob of hot glue to hold some wires down. Geographically, I’m located in a super congested airspace area in the Los Angeles sectional, so I ended up having lots of airports with weather available that are right on top of each other. I had to get creative in laying out the lights, including recessing some slightly with the dremel, shortening/lengthening wire, and soldering, over lapping discs of lights over each other, even cutting some of them to allow close spacing. Over all Im so happy with the project, all accomplished with the help of this page and the comments section. I do have one question though.

    I would like to set up a user wifi access that can be set by whoever I give the map to (I plan on giving these to fellow pilots for Christmas gifts/birthday gifts) I would like to set it to allow them to put their SSID and password to their wifi without having to hard code in arduino. Does anyone have a super simple way to allow this ?

    Thanks again!!

    1. There are a few different options, but none of them are super simple. Here are a few software based ideas:

      Another way people solve this is by using a small LCD, like 16×2 and some buttons. Use a library like MenWiz to create a menu that allows editing the SSID. MenWiz has a save function that will store the values in EEPROM, and you just grab those values at the top of the Setup function before you connect to wifi.

      Sorry I don’t have an easier solution!

      1. wifi manager library does just this. Sets up as an access point askes you to enter credentials then remembers them you need its library and preferences library it works ok

  23. I had many problems with this project, similar to a lot of other people. After a fair amount of headache, I got it working flawlessly. The 2 problems I had were the first LED sticking and I would always have 2 or 3 airports not showing anything, even though they were reporting on It turns out that the newest version of the ESP8266 library has some firmware bugs in it or something. Here are the steps I took to make it all work:

    * I had to start by cleaning up my Arduino install to remove the most recent version of the ESP8266 library. I uninstalled Arduino IDE from the windows settings menu then removed the following folders: %appdata%\Arduino IDE, %appdata%\arduino-ide, %localappdata%\arduino15, %localappdata%\arduino-ide-updater, Documents\Arduino.
    * Reinstall the newest version of Arduino IDE, which is 2.0.4 at time of writing.
    * Download FastLED 3.3.0 from and install it by going to sketch -> include library -> Add .ZIP Library
    * Install ESP8266 2.7.4. This is a bit of a process. I’m sure there’s a lot of ways to do it, but here is what worked for me:
    – Make sure you have Git for windows and Python3 installed.
    – Go to documents\arduino and make a hardware folder, then make an esp8266com folder in that. Should look like C:\Users\{your user profile}\Arduino\hardware\esp8266com
    – Open command prompt and enter ‘cd %USERPROFILE%\Documents\Arduino\hardware\esp8266com’
    – Enter ‘git clone esp8266′
    – ‘cd esp8266’
    – ‘git checkout 2843a5a’
    – ‘git submodule update –init’
    – ‘cd tools’
    – ‘Python3’
    – Close command prompt
    * At this point, you can follow the rest of the guide with the following changes:
    – Change #define DATA_PIN from 14 -> 5. This does NOT change what pin you use on the board – D5
    – Do NOT do steps 4 or 5 from the electronics section to set up the board manager. We already installed the board, so just skip these steps entirely!

    I think that was all I needed to do to get everything working. I’m no expert on Arduino or anything, but I can certainly try to help if anyone is having problems.

    1. Thanks for posting. I’ve updated the post with instructions on how you can choose various versions of the FastLED and Board software from within the Arduino IDE.

  24. I’ve built 2 maps, one using the WS2812B bulbs, and the other using the WS2811 bulbs. With both maps I am having the same issue with not all of the bulbs lighting at once. I will have at least 2 and up to 4 or 5 bulbs out after a refresh. But it’s always a different set of bulbs that are out when it does its 15 minute refresh. I’ve used different versions of FASTLED and different data pins. Version 3.3 works the best with the WS2811 bulbs and version 3.4 works with the WS2812B bulbs. I’ve never gotten any bulbs to light with FASTLED 3.5. Some airports are on both maps, there are times when an airport will light on one map, but not the other map. All of the code is basically the same except for the LED TYPE and the airports.
    I’ve also verified at
    when I bulb is not lit that it is reporting weather.
    I don’t know enough about coding to know if the issue exists in FASTLED or the code. I’m also using a 5V power supply. During the startup test they all light up as well.
    Any troubleshooting tips would be greatly appreciated.
    Thank you for putting the instructions together, your site is the most comprehensive and detailed instructions that I have found!

  25. I just resolved my issue of random lights not lighting after each refresh. I changed the board manager to 2.74 and Data Pin from 14 to 5 in the code. All good now!

  26. I’ve built 4 METAR maps using a couple different Pi models and different software. All work flawlessly. I decided to try out the ESP8266, and had a ton of headaches.

    First, wifi would not connect to a SmartWiFi router…and seems some others out there are having this issue. After several hours I fixed that by adding two lines of code before the WiFi.hostname call:


    I know that I should have 17 stations lit up (I’m looking at an existing map on the wall!), but there are only 14. For the life of me, I can’t figure out why. It’s the same airport list that’s working with other software. I’ve got NULL for the first LED due to the issue with the first LED always staying blue.

  27. Am I the only one who noticed this code isn’t actually checking for lightning? Rather, it checks for the string “TS” in the field . It’s quite possible to find “lightning distant”, and no thunderstorms. In that case, an LED will not blink white. The LTG thing is in the field , which is not used in the code at all. I’m trying to fix this.

    I enhanced the code to *blink* orange (vs staying on orange) for any airport with high winds, not just VFR airports, and to also blink white if there are thunderstorms. So a single airport can actually have 3 colors…flight category, blink orange for high winds, blink white for thunderstorms.

  28. How are you guys temporarily connecting without soldering? I got the thicker WS2811 and it has a connector itself but then also a 3 lose cable plug I’ve been plugging it into and trying to temp keep the cables connected or touching to figure out which are the right pins

    1. I use the breadboard jumper cables like these: I take a male to male one, and I use a pair of needle nose pliers to bend the male part into a tiny circle that just barely slides right over the pins on the NodeMCU. Then I can move that jumper around while I’m prototyping without any solder.

  29. In December 22 i built one for the Philippines islands and its 63 airports. i had trouble with the LED driver so rewrote the program using Neopixel-Bus and changing a few things (only 10 sites report in the Philippines)
    One thing that became obvious was my map is 1.6M tall and nearly a 1M wide and the power needs reinforcing to the pixels in a few places this shows itself as the blue colour not being as bright and showing more red and data corruption
    The node mcu needs to use a specific pin for the pixel output as it uses DMA to shift the data string to the pixels.
    The only other thing that is significant is the leds use a spare location at the end of the string. this is used to swap the LED colours when showing a condition like snow or lightning…

    It works well
    if you want a copy i have a zip file containing teh project. (too lazy to set up a github account)

  30. I seem to be able to get it to partially work, like vfr, mvfr those codes do change the color. But when I try and put the airport codes in some will work and others don’t but if I change the order or add different ones in between then some of the ones that don’t work start working and others stop…..

  31. Thank you for this awesome tutorial, Rick! I am just getting started. In your code it says:

    std::vector lightningLeds;
    std::vector airports({
    “LIFR”, // 1 order of LEDs, starting with 1 should be KKIC; use VFR, WVFR, MVFR, IFR, LIFR for key; NULL for no airport
    “IFR”, // 2
    “MVFR”, // 3
    “WVFR”, // 4
    “VFR”, // 5
    “NULL”, // 6
    “NULL”, // 7
    “KMRY”, // 8
    “KSNS”, // 9
    “KCVH”, // 10

    Should KKIC actually say KMRY?

  32. Hey hey – From Denmark here! Great project 🙂

    I’m having some issues with fetching airport-data. In my log it does the following:

    23:16:21.613 -> GET /adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3&mostRecentForEachStation=true&stationString=EKCH,EKRK,EKEB,EKBI,EKAH,EKYT HTTP/1.1
    23:16:21.644 -> Host:
    23:16:21.644 -> User-Agent: LED Map Client
    23:16:21.644 -> Connection: close
    23:16:21.644 ->
    23:16:21.743 -> Getting data
    23:16:21.937 -> EKYT: VFR 4G0kts LED 6 WX:
    23:16:22.033 -> EKEB: VFR 6G0kts LED 3 WX:
    23:16:22.131 -> EKCH: VFR 1G0kts LED 1 WX:
    23:16:22.196 -> EKRK: 2G0kts LED 2 WX:
    23:16:22.196 -> Refreshing LEDs.
    23:16:22.196 -> No lightning; Going into sleep for: 900000

    So it basically looks like it’s breaking up after 3 airports. If i change the order of them, just for testing – it still breaks up. I will get lights in the ones shown above (6, 3, 1) except for the halfway done one.. (2). What could be wrong? If i load the string in my browser, the XML shows fine.

  33. Great Job on the explanation! This has been a fun little project! the only issue that I am having is Ive got a large map of Michigan with 90 LEDs and Ive almost got it set but there are 4 or sometimes less airports that will turn off and on randomly after each refresh of the aviation weather and its almost random airports there’s no rhyme or rhythm. Its almost like the chip wont get enough time to read the website data and then it moves on to the next airport website while leaving that airport incomplete (dark). Any suggestions? Thanks!!!

  34. Looks like the server has changed over and there has been a code change from Harmon posted 3 hours ago. I’m thinking this is a fix for the issues that the server change caused and caused all of our maps to go inop. Let me know if this is correct, as I’m at work for a couple more days and wont be able to get home to throw the new code lines in the map

    1. I’ve updated the post above with a fix for this issue. Luckily it isn’t too bad. Make sure you keep your library and board versions at the correct levels when you update your map code.

  35. changed all of their URLs and METAR Maps will no longer work until they are pointed to the new URL, which I have yet to determine.

  36. For those who noticed on 10/16/23 that your map isn’t working, you need to update two lines of coding. The link is below, replace the pink with the green.

    If it still not working, you will need to change the COM port. How? In your PC’s Device Manager -> Ports (COM & LPT) -> Silicon Labs CP210x , right click Properties, select Port Settings, Advanced and then a new port number.

    From the Arduino sketcher, you’ll need to change the port there too (Tools -> Port) to match the new one you selected. Disconnect and reconnect the board from the PC, run the sketcher. If it still doesn’t work….someone way smarter than I will have to help.

  37. After AviationWeather updated their website this week it broke my METAR map I had bought off someone online. They provided no support for it, so I figured I’d work it out myself.

    I was able to take the information from this post to upload the updated software from github onto the NodeMCU (ESP12-E/F) used for the project.

    I had to DOWNGRADE several libraries to get this to work properly. I was getting white LEDs only (on the first 13 of the 25 leds only, oddly) until I did so.

    The DATA_PIN used was D4 as that is what was physically labeled on the NodeMCU.

    Working library Versions:
    -esp8266 version 3.0.2
    -FastLED version 3.3.3
    -Vector version 1.2.2

    I had issues with the program when using placeholders such as VFR/LIFR/NULL; only when I input valid airport identifiers into the array did the LEDs actually work right. Make sure to test the airport identifier on aviation weather to make sure it shows up. For smaller airports starting with F or L, put a K before them (even if they do not technically have an ICAO code for that airport). Example would be KF70 French Valley, KL18 Fallbrook

  38. Any ideas why I get this code error (see below) when I compile for the ESP8266 utilizing the 2.74 version and FastLED 3.3. Pin is coded as 14 as per instructions. Sketch will compile when pin is 1-10 but wont compile any thing higher. It throws the error when attempting to load on the NODE MCU 1.0, but will load and function on the Espino 12. Perplexed. Thinking something has changed on their end and looking for a fix.

    Error code:

    c:\Users\jbill\Documents\Arduino\libraries\FastLED/fastpin.h:207:2: error: static assertion failed: Invalid pin specified
    static_assert(validpin(), “Invalid pin specified”);

    exit status 1

    Compilation error: exit status 1

  39. All, I discovered today (after hours of investigation) that the website was updated on October 16, 2023 (see green notice at the top of It appears the update broke the METAR XML feed. I finally found an error message: “Our services aren’t available right now. We’re working to restore all services as soon as possible. Please check back soon.” I believe (hope) it is a temporary issue and they will push a fix soon so our METAR maps can start working again. Just FYI.

  40. I stumbled across a fix for the first led not showing the correct color. In the beginning of the code, between ESP8266.WiFi.h and FastLED, include the following:

    #define FASTLED_ALLOW_INTERRUPTS 0 // Used for ESP8266 with WS2812 LED’s. Ugh!!!

    I’m running FastLED v3.2.10 and esp8266 v3.1.2

  41. I’ve recently updated the website address and its working perfectly. I have run into a separate issue though. I’ve made a few of these for friends and have recently bought a couple Arduino NodeMCU ESP-12F modules to replace burnt out ESP-12Es. Though I’m using the exact same code as the 12Es, the 12Fs wont bring on a single light. I’m wondering if there is a different version of ESP8266 that I need to run for this different module. I ran 2.7.4 on the 12E and it worked just fine.

  42. Seems like my board will update fully now after a power cycle but after sometime it remains on the colors shown and does not update anymore? Thoughts?

  43. Could you use two strings of LEDs back to back with just one board? Or is there a limit to how many lights one board could run? (I’m using the AliExress thin lights with the ESP8266).

    Many thanks for putting this out there, much appreciated!

  44. I’m running esp8266 2.7.4 with FastLED-3.3.0 and have tried multiple combinations of boards/FastLED but I cannot get the colors blue or white to show up; All of the LEDs that should be purple are red, blue does not show up at all, and the white lightning flashes are yellow. Has anyone encountered this before?

  45. Anyone have one led blink a white about every 5 seconds?

    Btw – I was able to hook a couple of strands back-to-back, and has worked so far, so it looks like that is possible. (unless this blinking is a result of overloading them lol).

  46. any ideas on how to get a Led to blink yellow and current status when winds go above a certain speed?

Leave a Reply

Your email address will not be published. Required fields are marked *

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