IoTSimulator

Design a Color Weather Dashboard with Arduino

Build a small color weather dashboard with an Arduino Uno, a DHT22 temperature and humidity sensor, and an ILI9341 TFT display. The Arduino reads the room conditions, draws separate dashboard cards, and uses color to show whether the room feels cool, comfortable, warm, dry, or humid.

Io
IoTSim Editor
May 8, 2026
Design a Color Weather Dashboard with Arduino

Live project track

Interactive hardware & logic preview

Have you ever checked a weather app and understood the room at a glance, even before reading every number? That is the power of a dashboard. It does not only show data. It organizes the data so your eyes know what matters first.

In this project, you will build that same idea on a small Arduino setup. The DHT22 measures temperature and humidity, and the ILI9341 TFT display turns those two readings into a colorful room weather dashboard. The main concept is simple: a display becomes more useful when sensor numbers are grouped into clear visual areas with labels, color, and status.

DHT22 Readings Become Dashboard Cards

Think about a car dashboard. It could show every value as a plain line of text, but that would be tiring while driving. Instead, speed, fuel, warning lights, and status indicators each get their own space. Your eyes learn where to look.

This Arduino dashboard uses the same beginner-friendly idea. Temperature gets one card, humidity gets another card, and the comfort message gets a wide strip near the bottom. The Arduino still only has two sensor readings, but the screen layout makes those readings feel easier to understand.

DHT22 readings mapped into color dashboard cards
DHT22 readings mapped into color dashboard cards
Raw sensor valueDashboard meaningWhere it appears
Temperature in CHow warm or cool the room feelsLeft value card
Humidity in percentHow much moisture is in the airRight value card
Comfort decisionA human-readable room statusBottom status strip

The important lesson is that a dashboard is not just a prettier display. It is a decision about information priority. The big numbers answer what is happening now. The colored status strip answers what should I think about this reading? That second question is what makes the project feel more useful than printing values to Serial Monitor.

Color Makes Room Status Faster To Read

A 16x2 LCD can show the same temperature and humidity numbers, but it has very little room for layout. Serial Monitor can show even more text, but it is tied to the computer. A color TFT sits in the middle: it is still small, but it can draw sections, large text, and colored feedback.

Serial monitor LCD and color TFT compared for dashboard output
Serial monitor LCD and color TFT compared for dashboard output
Output styleWhat it is good forWhat feels limited
Serial MonitorDebugging while connected to a computerNot a standalone interface
Character LCDSimple values and short labelsVery little space for layout
Color TFTCards, status colors, labels, and dashboard screensNeeds more drawing code
For this project, the TFT is not just decoration. The color and layout are part of the lesson: sensor data becomes easier to read when the screen gives each value a clear role.

The dashboard uses yellow for the temperature value, cyan for humidity, and a changing color strip for the room status. That color strip is useful because the reader does not need to compare numbers every time. Green means comfortable. Cyan means cool. Orange means warm. Yellow points to dry air, and blue points to humid air.

Comfort Zones Turn Numbers Into Plain Language

Temperature and humidity are numbers, but people usually think in descriptions: cool, warm, dry, humid, or comfortable. The code creates those descriptions by comparing the DHT22 readings against simple thresholds.

A threshold is a line in the sand. If the temperature is below or equal to 20 C, the room is labeled cool. If it is above or equal to 28 C, the room is labeled warm. For humidity, 40 percent or lower is treated as dry, while 65 percent or higher is treated as humid.

Temperature and humidity comfort zones for the dashboard
Temperature and humidity comfort zones for the dashboard
  • Cool room appears when the temperature is 20 C or lower.
  • Warm room appears when the temperature is 28 C or higher.
  • Dry air appears when humidity is 40 percent or lower.
  • Humid air appears when humidity is 65 percent or higher.
  • Comfortable appears when the readings stay inside the middle range.

These thresholds are intentionally easy to change. They are not meant to be perfect weather science. They are a clear way to teach the dashboard pattern: read data, compare it to a few limits, then show a status that a person can understand quickly.

The DHT22 Refresh Pace Keeps the Dashboard Stable

The DHT22 is a steady environment sensor, not a fast button. It measures temperature and humidity slowly compared with many Arduino inputs. Reading it every two seconds is a safe beginner habit because it gives the sensor time to update before the next screen refresh.

DHT22 dashboard refresh cycle with two second delay
DHT22 dashboard refresh cycle with two second delay

The dashboard follows a gentle loop. It reads the sensor, checks whether the reading failed, redraws only the value areas, then waits before trying again. This is why the screen feels stable instead of constantly flickering. The layout stays in place, and only the parts that can change are refreshed.

Each Weather Dashboard Wire Has a Display or Sensor Job

The circuit has two groups of connections. The DHT22 group is small because the sensor only needs power, ground, and one data line. The TFT group is larger because a color screen needs power, a backlight line, and several SPI/control signals.

5V is the positive power supply from the Arduino. It is where the DHT22 and display get the energy they need to run. GND is the return path for electricity, like the negative terminal of a battery. All components must share GND so their signals mean the same thing electrically.

Pin Connection Map
DHT22
VCC
Arduino Uno
5V
Explanation

Powers the temperature and humidity sensor.

DHT22
SDA
Arduino Uno
D2
Explanation

Carries the digital temperature and humidity data to the Arduino.

DHT22
NC
Arduino Uno
Not connected
Explanation

This pin is unused and should be left open.

DHT22
GND
Arduino Uno
GND
Explanation

Shares the same electrical reference as the Arduino.

The ILI9341 display uses SPI. SPI is a fast way for the Arduino to send a stream of drawing commands and pixel data to the screen. MOSI carries data from the Arduino to the display, and SCK carries the clock that keeps the data timing organized.

Pin Connection Map
ILI9341
VCC
Arduino Uno
5V
Explanation

Powers the TFT display module.

ILI9341
GND
Arduino Uno
GND
Explanation

Completes the display power circuit and shares a signal reference.

ILI9341
CS
Arduino Uno
D10
Explanation

Selects the TFT display when the Arduino sends SPI data.

ILI9341
RST
Arduino Uno
D8
Explanation

Lets the sketch reset the display controller.

ILI9341
D/C
Arduino Uno
D9
Explanation

Tells the display whether incoming data is a command or screen content.

ILI9341
MOSI
Arduino Uno
D11
Explanation

Sends drawing data from the Arduino to the display.

ILI9341
SCK
Arduino Uno
D13
Explanation

Sends the SPI clock signal that times each data bit.

ILI9341
LED
Arduino Uno
D7
Explanation

Turns the display backlight on in this project.

ILI9341
MISO
Arduino Uno
Not connected
Explanation

This dashboard only sends data to the display, so the return data pin is not needed.

If the TFT backlight turns on but the screen stays blank, check CS, D/C, RST, MOSI, and SCK. Power alone can light the panel, but the control and SPI wires are what make it draw.

The Complete Color Weather Dashboard Sketch

This sketch reads the DHT22 every two seconds and updates a landscape dashboard on the ILI9341 display. The code uses helper functions because a dashboard has repeated drawing jobs: draw the fixed layout once, redraw changing values, show an error message, and choose the comfort label.

That makes this an intermediate project, but the idea is still friendly: each function has one clear job. If you want to tune the project later, the threshold constants near the top are the safest place to start.

C++ Source
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123

How the Weather Dashboard Code Works, Part By Part

The code is easier to understand if you follow the flow of the dashboard. First it names the pins and limits. Then it starts the sensor and screen. After that, the loop reads the room and sends the latest values to the drawing functions.

▸ Weather Dashboard Libraries and Tunable Limits

The sketch loads four libraries. SPI handles the fast display communication. Adafruit_GFX provides drawing tools like rectangles and text. Adafruit_ILI9341 knows the display controller, and DHT reads the temperature and humidity sensor.

C++ Source
1
2
3
4
5
6
7
8
9
10
11
12
13

The limit constants are the main settings for the project. Changing warmLimitC from 28.0 to 30.0 would make the dashboard wait for a warmer room before showing the warm status.

▸ Dashboard Objects Connect Code To Components

The DHT object stores the sensor pin and sensor type. The TFT object stores the display control pins. These objects are the bridge between readable Arduino code and the actual wires in the circuit.

C++ Source
1
2

▸ Setup Draws the Dashboard Frame Once

In setup(), the backlight pin is set as an OUTPUT, which means the Arduino controls it. Writing HIGH turns that pin on, so the TFT backlight becomes visible.

The sensor and display are then started with dht.begin() and tft.begin(). The display is rotated into landscape mode, and drawStaticLayout() draws the title, cards, and status outline once at startup.

C++ Source
1
2
3
4
5
6
7
8
9

▸ Loop Refreshes Only Changing Values

The loop asks the DHT22 for humidity and temperature. If either reading fails, isnan() catches it and the dashboard shows a wiring warning instead of pretending the numbers are valid.

C++ Source
1
2
3
4
5
6
7
8
9
10
11
12

The two-second delay is part of the design. It protects the DHT22 from being read too quickly and gives the screen a calm refresh rhythm.

▸ Value Cards Erase Before Redrawing

Before printing a new temperature or humidity value, the code fills the old value area with the same dark card color. This prevents leftover characters from previous readings. For example, without clearing the value area first, 24.0C could leave extra characters after a later shorter value.

C++ Source
1
2
3
4
5
6
7
8

▸ Status Strip Matches the Room Condition

The status strip uses two helper functions. One chooses the color, and the other chooses the text. Both functions look at the same readings, so the label and the color stay consistent.

C++ Source
1
2
3
4
5
6

▸ Threshold Order Decides the Message

The label function checks temperature before humidity. That means an obviously cool or warm room gets the main message first. If the temperature is in the comfortable middle range, the function then checks whether the air is too dry or too humid.

C++ Source
1
2
3
4
5
6
7
8
9
10
11
12
13

Adjusting the Dashboard For Your Room

If your room usually sits around 29 C and you do not want it labeled warm all day, raise warmLimitC. If your climate is naturally humid, raise humidLimitPercent. The point of named constants is that you can tune the behavior without digging through the drawing code.

You can also change the dashboard colors if you want a different visual language. Keep the same idea, though: each color should mean something. If every card uses a random bright color, the dashboard becomes harder to read instead of easier.

Taking It Further

Once this dashboard works, the most natural upgrade is a small trend indicator. You could store the previous temperature reading and show whether the room is getting warmer or cooler.

You could also add a fan relay, a buzzer, or an LED strip that responds to the same comfort zones. The useful part is that the dashboard already has the decision logic. New outputs can reuse the same labels and thresholds instead of inventing a second rule system.

Keywords
#Arduino #DHT22 #ILI9341 #TFT #Weather #Dashboard #Temperature #Humidity #Intermediate
Total word count: 1703 words

Project discussion

Questions, feedback, and community insights
No discussions yet. Be the first to start!