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.
I’ve broken the guide down into 2 parts: Electronics Setup and Physical Construction.
Recommended Tools:
- 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
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:
1http://arduino.esp8266.com/stable/package_esp8266com_index.json - 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:
1 2 |
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:
1 |
#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:
1 |
#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.
1 |
www.aviationweather.gov/adds/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&hoursBeforeNow=3&mostRecentForEachStation=true&stationString=KJFK |
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
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
- 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.
Categories: Tech Soup
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.
My METAR map has been on 24×7 for the last 5 months and so far no problems!
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.
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?
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”.
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
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?
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.
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?
The Arduino has multiple 3v3 pins and multiple ground pins. Can you advise which pin. One combination lights up one LED only.
Thanks for the comment! I updated the code above to show the various available pins and how to refer to them in code.
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.
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.
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?
Did you ever figure this out? I’m having the same issue and I’m sure it’s something simple
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!
Do I need to change “digitalwrite(LED_BUILTIN, LOW) to something else to get the lights to come on?
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.
Need some help as I have the same issues. Where is DATA_PIN 0 in the code?
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.
Thanks to Rick Harmon for the code!!
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.
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.
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?
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.
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.
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.
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 https://github.com/FastLED/FastLED/releases?page=1
Anyone have 3.3?
I am getting various errorsDocuments/Arduino/led-sectional/led-sectional.ino:9:1: error: stray ‘\’ in program e
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!
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…
Thanks
Steve
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?
Thanks
Marc
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:
#include
#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;
FastLED.show();
delay(30);
}
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.
Anyone?
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
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.
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
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.
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
Good callout Dave, I had the same issue with one of my builds.
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!
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!
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
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.
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: https://www.amazon.com/dp/B01DC0J0WS?ref=ppx_yo2ov_dt_b_product_details&th=1
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.
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!
Good thinking on the black tape!
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.
How to download files from GitHub: https://www.howtogeek.com/827348/how-to-download-files-from-github/
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!!
There are a few different options, but none of them are super simple. Here are a few software based ideas: https://www.circuitschools.com/change-wifi-credentials-of-esp8266-without-uploading-code-again/
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!