Arduino UNO IoT Weather Monitoring System
Weather monitoring systems allow real-time tracking of environmental parameters such as temperature, humidity, and air quality. Using Arduino UNO and IoT, you can collect data and upload it to cloud platforms for monitoring anywhere.
This project demonstrates how to interface Arduino UNO with DHT22 (temperature and humidity) and MQ135 (air quality) sensors, and send data to IoT platforms like ThingSpeak using ESP8266 WiFi module.
The system is useful for environmental monitoring, smart home projects, and learning IoT and sensor integration with Arduino.
Why Build an IoT Weather Monitoring System?
Monitoring environmental conditions is essential for agriculture, health, and climate awareness. IoT enables remote access to live data, reducing the need for manual measurements.
This project teaches key concepts including sensor interfacing, analog and digital readings, WiFi communication, and cloud data visualization.
Required Components
Arduino UNO board
DHT22 temperature and humidity sensor
MQ135 air quality sensor
ESP8266 WiFi module (or NodeMCU for simplified setup)
Jumper wires and breadboard
Power supply (5V USB or external adapter)
IoT platform account (e.g., ThingSpeak)
About the Sensors
1. DHT22: Measures temperature and humidity with higher accuracy than DHT11. Communicates via a single digital data pin.
2. MQ135: Air quality sensor detecting harmful gases like CO2, ammonia, and smoke. Analog output is proportional to gas concentration.
Circuit Connections
DHT22 Sensor:
VCC → 5V, GND → GND, DATA → Pin 2 (with 10kΩ pull-up resistor)
MQ135 Sensor:
VCC → 5V, GND → GND, A0 → Arduino A0
ESP8266 WiFi Module:
VCC → 3.3V, GND → GND, TX → Arduino RX (Pin 0) via voltage divider, RX → Arduino TX (Pin 1)
Ensure stable power supply; ESP8266 draws more current than Arduino 3.3V pin can provide. Use a separate 3.3V regulator if needed.
Arduino Code
#include <DHT.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int mqPin = A0;
const char* ssid = "YourWiFiSSID";
const char* password = "YourWiFiPassword";
const char* server = "http://api.thingspeak.com/update?api_key=YOUR_API_KEY";
void setup() {
Serial.begin(9600);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int airQuality = analogRead(mqPin);
Serial.print("Temperature: "); Serial.println(temperature);
Serial.print("Humidity: "); Serial.println(humidity);
Serial.print("Air Quality: "); Serial.println(airQuality);
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "&field1=" + temperature + "&field2=" + humidity + "&field3=" + airQuality;
http.begin(url);
int httpCode = http.GET();
Serial.println("Data sent, response code: " + String(httpCode));
http.end();
}
delay(2000);
}
This code reads temperature, humidity, and air quality values, prints them to Serial Monitor, and uploads the data to ThingSpeak for remote monitoring.
Working Principle
DHT22 provides accurate temperature and humidity readings via a single digital pin, while MQ135 outputs an analog voltage proportional to air quality.
Arduino reads these values, formats them, and sends them via ESP8266 to the IoT platform using HTTP requests.
The cloud platform stores data and provides visualizations such as graphs and alerts.
Key Features
Real-time monitoring of temperature, humidity, and air quality
IoT-enabled for remote monitoring from anywhere
Low-cost and scalable
Easy to expand with additional sensors
Educational for learning IoT, sensors, and cloud data handling
Applications
Home environmental monitoring
Smart greenhouse or garden IoT monitoring
Air quality and climate awareness projects
Educational experiments for IoT and sensor integration
Remote monitoring for agriculture or urban farming
Common Mistakes
Connecting ESP8266 directly to Arduino 3.3V without proper current supply
Using DHT11 instead of DHT22 reduces accuracy
Not calibrating MQ135 sensor for local environment
Sending data too frequently, exceeding IoT platform rate limits
Loose wiring causing intermittent readings
Frequently Asked Questions
Q1: Can I use NodeMCU instead of Arduino UNO? A: Yes, NodeMCU has built-in WiFi, simplifying the circuit and code.
Q2: How often should I send data to ThingSpeak? A: Typically every 15–20 seconds is safe; avoid sending more than the platform's limit (1 update every 15 seconds for free accounts).
Q3: Can I add more sensors? A: Yes, you can add rainfall, light, or soil moisture sensors for a complete environmental monitoring system.
Q4: Is ESP8266 5V tolerant? A: No, ESP8266 RX pin is not 5V tolerant; use a voltage divider or level shifter.
Conclusion
The Arduino UNO IoT weather monitoring system is a comprehensive project that combines sensors, IoT communication, and cloud visualization.
It teaches fundamental concepts in Arduino programming, analog and digital sensor readings, wireless communication, and cloud data handling.
This system can be expanded to smart home integration, environmental monitoring for agriculture, and urban air quality awareness.
Building this project provides valuable hands-on experience for beginners and intermediate users interested in IoT and automation.