Introduction: ESP8266 Weather Widget V2.0
Welcome to my new Weather Widget Project. Earlier I posted an Instructables on the weather widget, that uses a 0.96" OLED display to display the weather parameters. The main problem in the earlier version is that the display is very small in size, so you have to come very close to it for reading the parameters. That's why it was always in my mind to upgrade it to a larger color display with a nice 3D printed enclosure.
Recently I was browsing the Banggood website for purchasing a few components for my upcoming project, then I came across a desktop Weather Station. I showed the product to my wife and she was fascinated with it and wished to see it on her craft table. First I thought to gift her by purchasing it, but then I changed my mind and challenged myself to make a cool weather widget by using my skill and taking help from the open-source community.
In this Instructables, I will show you how to make a Weather Widget by using ESP8266 and a 2.8" touch screen display. The device retrieves localized weather information from https://openweathermap.org/ by WLAN and displays it on the Display module.
Support me On Patreon:
If you enjoy my work here on Instructables, consider joining my Patreon, it will be a great help for me to make more interesting projects in the future.
Patreon Link:https://www.patreon.com/opengreenenergy
The Widget displays the following things:
1. Current Time with Date
2. Current Day Weather Information like Temperature, Pressure, Humidity, and Rainfall.
3. Future forecasting for 7 days
Credit :
I would like to give credit to my friend Dani Eichhorn who did all of the programming parts. He is updating the software on his Github page regularly with new features. You can visit SquixTechBlog to see more projects on ESP8266.
Thank You, PCBWay:
This project is successfully completed because of the help and support from PCBWay. Guys if you have a PCB project, please visit their website and get exciting discounts and coupons.
PCBWay 4th PCB Design Contest: If you have a cool PCB project, you may participate in the 4th PCB Design Contest.
Step 1: Parts and Tools Required
Parts Used :
1. Wemos D1 Mini Pro ( Amazon / AliExpress / Banggood )
2. 2.8" TFT Display ( Amazon / AliExpress / Banggood )
3. 30 AWG Wires ( Amazon / AliExpress / Banggood )
4. USB Cable ( Amazon / AliExpress / Banggood )
5. PLA Filament ( Amazon / AliExpress / Banggood )
Tools Used :
1. 3D Printer ( Amazon / AliExpress / Banggood )
2. Soldering Iron ( Amazon / AliExpress / Banggood )
3. Wire Cutter ( Amazon / AliExpress / Banggood )
4. Wire Stripper ( Amazon / AliExpress / Banggood )
Step 2: Prepare the Wires
My plan is to place the weather display circuit inside a 3D-printed enclosure. But the enclosure that I am going to use is very compact, and there is little room to keep the Wemos board along with the connecting wires inside the housing.
So, we have to select thin wires to make the connection between the display unit and Wemos Board. Here, I have selected 30 AWG single-stranded wires.
Cut 14 numbers of wires with equal length by using a Nipper.
Then strip out the insulation from the wires by using a Wire Stripper.
Step 3: Solder Wires to the Display Unit
The TFT display has pre-soldered straight header pins to mount it to the breadboard or any other shield. You have two options
1. Desolder the header pins from the PCB and then solder the wires to the soldering pads
2. Directly solder to the header pins
I prefer the second one, it is much easier and requires less effort and skill.
Before soldering apply a small amount of soldering flux to all the header pins. Then tin the header pins by using a small amount of solder on the soldering iron tip. Tinning is required as it makes the soldering process easier and strong bonding between the wire and header pins.
Finally, solder the wires to all the header pins as shown in the above picture.
Step 4: 3D Printing
I have modified the enclosure in Autodesk Fusion 360 by taking reference from a nice model available in Thingiverse and designed by smily77. The dimensions of all the components are measured by a vernier caliper then the same were considered during the design.
The enclosure has 3 parts:
1. Housing Body
2. Back Cover
3. Base Cover
Download the STL files from Thingiverse ( If the link is broken, you may download the STL files here)
I have used my Creality CR-10 Mini 3D printer and 1.75 mm white PLA filament to print the parts.
My settings are:
Print Speed: 60 mm/s
Layer height: 0.2mm
Fill Density: 20%
Extruder Temperature: 210 deg C
Bed Temp: 60 deg C
Step 5: Install the Display
In this step, you have two options
1. First Install the Display into the enclosure then solder the wires to the Wemos Board
2. Make the wiring between display and Wemos board first, then install them into the enclosure later.
I have shown both ways in the above pictures. The pictures themselves are self-explanatory. My personal preference is the second option.
Step 6: Wiring Diagram
The wiring diagram is very straightforward. You have to connect the TFT display module ( ILI9341 ) pins with Wemos pins as per the schematic diagram. The schematic diagram is shown above. You may also follow the following pin mapping
TFT Display->Wemos ( ESP8266 )
VIN -> 3.3V
GND -> GND
CS -> D1
RESET -> RST
DC -> D2
SDI -> D7
SCK - D5
LED -> D8
SDO -> D6
T_CLK -> D5
T_CS -> D3
T_DIN -> D7
T_DO -> D6
T_IRQ -> D4
Step 7: Make the Circuit
First, download the schematic diagram, then take a printout. It Is really handy during the soldering and you will save a lot of time also. The most important thing is any mistakes in the connection may damage the display module or Wemos board. During the making of this project, I have fried my display unit touch screen IC due to some mistake in connection.
Step 8: Prepare the Arduino IDE for ESP8266 Board
The ESP8266 module isn't part of the Arduino-IDE, so we have to install it first. You can easily install it by going through the following steps:
1. Start Arduino IDE and open the Preferences window.
2. Enter https://arduino.esp8266.com/stable/package_esp826... into the File>Preferences>Additional Boards Manager URLs field of the Arduino IDE. You can add multiple URLs, separating them with commas.
3.Close this window with the OK Button. Open Boards Manager from Tools > Board menu and select the correct ESP8266 board.
4. Now you can choose LOLIN(WEMOS) D1 R2 & mini. Set the CPU frequency to 80MHz, Flash Size to "4MB (FS:3MB OTA:~512KB)", and the COM port.
Step 9: Download the Code and Libraries
You can download the Arduino code and supporting libraries from the following links.
Arduino Code:
https://github.com/ThingPulse/esp8266-weather-stat...
Libraries:
1. Mini Grafx by Daniel Eichhorn
2. ESP8266 WeatherStation by Daniel Eichhorn
3. Json Streaming Parser by Daniel Eichhorn
4. ThingPulse XPT2046 Touch by ThingPulse (forked from Paul Stoffregen), if you had previously installed the original XPT2046_Touchscreen then you need to uninstall that one!
After downloading the library unzip it and installed it with your Arduino Library Manager in
Sketch > Include Library > Manage Libraries...
Step 10: Get OpenWeatherMap API Key
The Weather Station real-time data is obtained from the OpenWeatherMap website. So you have to get the OpenWeatherMap API Key.
Now you can choose the free plan in the first column. There is no cost to apply for a free plan, which is more than sufficient for our requirements. Only the limitation of using the free plan is that you are limited to 60 calls per minute.
Now click on Get " API Key " then create a new account by filling up your credentials.
Note down the API key which will be required in our code in the next step.
Step 11: Upload the Software
After setting up Arduino IDE and installing all the libraries we can move to upload the code into the ESP8266 board ( Wemos D1 Mini Pro or any other board )
First, you have to unzip the code downloaded in the earlier step and then save it somewhere on your PC or Laptop. Remove the word master from the folder name, the final name shall be " esp8266-weather-station-color "
Now open the folder and click on "esp8266-weather-station-color.ino "
In one of the tabs, the IDE opened settings.h. Go through the file and adjust the two handfuls of configuration parameters. They are all documented inside the file directly. Everything should be self-explanatory. Most importantly you will need to set the OpenWeatherMap API key you obtained in a previous step.
Now you are ready to upload the code, just hit the upload arrow button.
Step 12: Install the Covers
After mounting the display unit and circuit board, we can move to box up the housing by using the two covers. The enclosure is designed with very tight clearance, so you don't need any glue or screw to hold the covers.
Align the cover with the slot in the enclosure and press it all around, you are done. The smaller cover is for the base part and the larger one is for the back side of the display part.
Step 13: Testing
If you are successfully uploaded the code into the ESP8266, you will immediately notice the display on the front page by searching the WiFi Network for connection. After connecting the device to your WiFi router, it will update the time and weather data from the web.
Now you will be able to see all the weather information along with all other parameters on the TFT display. You can swap between the different pages by using the stylus or touching with your finger.
Note: In the beginning, you will be asked to touch the screen for calibrating the touch screen display.
I am super happy with the final outcome of this little gadget. You may gift this little gadget to someone on any occasion.

Participated in the
DIY Summer Camp Contest
154 Comments
4 months ago
Agradezco por compartir el proyecto. Muy bueno!.
Le realicé algunas mejoras descriptas en https://github.com/villafapd/ClimaMza.git
6 months ago
do you need a touch screen or a simple one?
8 months ago
F:\esp8266-weather-station-color-master\esp8266-weather-station-color\esp8266-weather-station-color.ino:34:10: fatal error: XPT2046_Touchscreen.h: No such file or directory
34 | #include <XPT2046_Touchscreen.h>
| ^~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1
Compilation error: XPT2046_Touchscreen.h: No such file or directory
Any thoughts on how to solve this?
First time trying to make something like this
Question 1 year ago
I have successfully uploaded the project to nodemcu but my screen is stuck on "calibration initiated now release screen", the touchscreen is working as the led is blinking on touch please help.
Answer 8 months ago
Please see my comment in the post above yours. I think there is an issue when the code is loaded onto a ESP8266 and it's plugged into a computer using a data cable.
Answer 10 months ago
The issue is that the screen is permanently detecting a touch, hence the message, "now release screen". It could be from a broken screen or the screen is somehow pressing against the enclosure (verify with the screen and board removed).
I know this is two months old, but hopefully it'll help someone else out.
1 year ago
I have successfully uploaded the project to nodemcu but my screen is stuck on "calibration initiated now release screen". My Screen is NOT a Touch Screen. Please help
Reply 8 months ago
I have also discovered that the second one I built, would show this screen if connected to a computer with a USB data cable. If I used a plain old charging cable, or plugged it into a USB power supply, it worked as intended. I haven't yet figured out why that would be the case. It could simply be that a pin used is also being shared when the data cable is plugged in.
Reply 10 months ago
You need to either comment out or remove the Touch Screen calibration along with the code in the loop looking for a touch event.
9 months ago
Thanks for posting this. I built Daniel's original Color Weatherstation when Weather Underground had an API, but of course that went away. I am having a problem with your version though - won't connect to Wifi. I've verified my ESP8266 works as a separate wifi NTP clock program works, but your code just sits there and tries to connect forever. I've verified SSID and Password is correct, correct upper/lower case too. I have tried both of my wifi access points, and still cannot connect. I am running a Wemos D1 mini, and I built up everything on a new Win10 laptop on a fresh install of Arduino IDE 2.0.3. Edit: I loaded the example WifiScan into my ESP8266 board and it saw access points. So Wifi works on this board, but the compiled Color Weather Station code wifi doesn't.
2 years ago
Hey !
Help me remake the sketch for ESP32. If you compile a sketch for ESP32, then a lot of errors appear. How do I fix them?
Compilation log:
esp8266-weather-station-color:82:9: error: expected constructor, destructor, or type conversion before '(' token
E:\Home Made\Создать\1- ESP8266 Weather Widget V2.0\esp8266-weather-station-color\esp8266-weather-station-color.ino: In function 'void connectWifi()':
esp8266-weather-station-color:141:10: error: 'class WiFiClass' has no member named 'hostname'
E:\Home Made\Создать\1- ESP8266 Weather Widget V2.0\esp8266-weather-station-color\esp8266-weather-station-color.ino: In function 'void initTime()':
esp8266-weather-station-color:164:30: error: invalid conversion from 'const char*' to 'long int' [-fpermissive]
esp8266-weather-station-color:164:45: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
esp8266-weather-station-color:164:45: error: too few arguments to function 'void configTime(long int, int, const char*, const char*, const char*)'
In file included from E:\Home Made\Создать\1- ESP8266 Weather Widget V2.0\esp8266-weather-station-color\esp8266-weather-station-color.ino:29:0:
C:\Users\�����\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Arduino.h:173:17: note: declared here
extern "C" void configTime(long gmtOffset_sec, int daylightOffset_sec,
^
E:\Home Made\Создать\1- ESP8266 Weather Widget V2.0\esp8266-weather-station-color\esp8266-weather-station-color.ino: In function 'void loop()':
esp8266-weather-station-color:294:27: error: 'WAKE_RF_DEFAULT' was not declared in this scope
E:\Home Made\Создать\1- ESP8266 Weather Widget V2.0\esp8266-weather-station-color\esp8266-weather-station-color.ino: In function 'void drawAbout()':
esp8266-weather-station-color:627:48: error: 'class EspClass' has no member named 'getFlashChipRealSize'
esp8266-weather-station-color:629:47: error: 'class EspClass' has no member named 'getChipId'
esp8266-weather-station-color:630:44: error: 'class EspClass' has no member named 'getVcc'
esp8266-weather-station-color:646:55: error: 'class EspClass' has no member named 'getResetInfo'
Несколько библиотек найдено для "WiFi.h"
Используется: C:\Users\Игорь\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Не используется: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
expected constructor, destructor, or type conversion before '(' token
Reply 10 months ago
The problem with micro-controllers is that the software is very specific to each and every one, therefore what compiles on the ESP8266 won't compile, without a lot of work, on the ESP32.
I think an ESP32 is overkill for his application, 8266's are much cheaper and do just as good as job.
2 years ago
esp8266-weather-station-color:27:10: fatal error: settings.h: No such file or directory
27 | #include "settings.h"
| ^~~~~~~~~~~~
compilation terminated.
exit status 1
settings.h: No such file or directory
please i need help
Reply 10 months ago
Sometimes the Arduino IDE moves the project file into its own directory, but then does not have any of the other files it requires. The settings.h file is the first one it looks for.
Again, this is here in case anyone comes across this problem in the future.
I've made two of these now, and they do work fine.
1 year ago
hello..have a good day.!
we madw it for our thesis but our instructor suggested that we have to change the screen into bigger one so that the weather forecast looks wider..but I don't know if it will works to bigger screen..Can I have some advice..thank you in advance..
Reply 1 year ago
I have successfully uploaded the project to nodemcu but my screen is stuck on "calibration initiated now release screen",can you help me?
1 year ago
What should I do when I use the ili9488 3.5 . screen?
contains his library minigrfx ili9341 😑
Question 1 year ago
Have followed all the instructions religiously but am getting an error in the Arduino web-based IDE when compile (Verify) the *.ino file prior to downloading onto the Wemo. It seems to have a problem with the configTime() function call. Help please? See error message below.
/tmp/222332755/esp8266-weather-station-color/esp8266-weather-station-color.ino: In function 'void initTime()':
/tmp/222332755/esp8266-weather-station-color/esp8266-weather-station-color.ino:165:29: error: invalid conversion from 'const char*' to 'long int' [-fpermissive]
configTime(TIMEZONE.c_str(), NTP_SERVERS);
^
/tmp/222332755/esp8266-weather-station-color/esp8266-weather-station-color.ino:165:43: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
configTime(TIMEZONE.c_str(), NTP_SERVERS);
^
/tmp/222332755/esp8266-weather-station-color/esp8266-weather-station-color.ino:165:43: error: too few arguments to function 'void configTime(long int, int, const char*, const char*, const char*)'
In file included from /tmp/222332755/esp8266-weather-station-color/settings.h:25:0,
from /tmp/222332755/esp8266-weather-station-color/esp8266-weather-station-color.ino:28:
/home/builder/.arduino15/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/Arduino.h:297:17: note: declared here
extern "C" void configTime(long timezone, int daylightOffset_sec,
^
Error during build: exit status 1
1 year ago
I have successfully uploaded the project to nodemcu but my screen is stuck on "calibration initiated now release screen", the touchscreen is working as the led is blinking on touch please help.
1 year ago on Step 11
Arduino: 1.8.15 (Linux), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled (new aborts on oom), Disabled, All SSL ciphers (most compatible), 32KB cache + 32KB IRAM (balanced), Use pgm_read macros for IRAM/PROGMEM, 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"
In file included from /home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:2,
from /home/bear/Desktop/esp8266/ws/esp8266-weather-station-color-master/esp8266-weather-station-color/esp8266-weather-station-color.ino:33:
/home/bear/snap/arduino/current/Arduino/libraries/ThingPulse_XPT2046_Touch-1.4.0/XPT2046_Touchscreen.h:33:7: error: redefinition of 'class TS_Point'
33 | class TS_Point {
| ^~~~~~~~
In file included from /home/bear/Desktop/esp8266/ws/esp8266-weather-station-color-master/esp8266-weather-station-color/esp8266-weather-station-color.ino:31:
/home/bear/snap/arduino/current/Arduino/libraries/Adafruit_STMPE610/Adafruit_STMPE610.h:135:7: note: previous definition of 'class TS_Point'
135 | class TS_Point {
| ^~~~~~~~
esp8266-weather-station-color:88:40: error: no matching function for call to 'TouchControllerWS::TouchControllerWS(Adafruit_STMPE610*)'
88 | TouchControllerWS touchController(&ts);
| ^
In file included from /home/bear/Desktop/esp8266/ws/esp8266-weather-station-color-master/esp8266-weather-station-color/esp8266-weather-station-color.ino:33:
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:11:5: note: candidate: 'TouchControllerWS::TouchControllerWS(XPT2046_Touchscreen*)'
11 | TouchControllerWS(XPT2046_Touchscreen *touchScreen);
| ^~~~~~~~~~~~~~~~~
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:11:44: note: no known conversion for argument 1 from 'Adafruit_STMPE610*' to 'XPT2046_Touchscreen*'
11 | TouchControllerWS(XPT2046_Touchscreen *touchScreen);
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:9:7: note: candidate: 'constexpr TouchControllerWS::TouchControllerWS(const TouchControllerWS&)'
9 | class TouchControllerWS {
| ^~~~~~~~~~~~~~~~~
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:9:7: note: no known conversion for argument 1 from 'Adafruit_STMPE610*' to 'const TouchControllerWS&'
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:9:7: note: candidate: 'constexpr TouchControllerWS::TouchControllerWS(TouchControllerWS&&)'
/home/bear/snap/arduino/current/Arduino/libraries/esp8266-weather-station-color-master/TouchControllerWS.h:9:7: note: no known conversion for argument 1 from 'Adafruit_STMPE610*' to 'TouchControllerWS&&'
exit status 1
no matching function for call to 'TouchControllerWS::TouchControllerWS(Adafruit_STMPE610*)'
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.