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

Program: IoT Weather Monitoring
#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.