How to Build a Remote Weather Monitoring System | DHT22 + NodeMCU ESP8266

preview_player
Показать описание
Want to monitor temperature and humidity remotely using IoT? In this tutorial, we’ll show you how to build a remote weather monitoring system using the DHT22 sensor and NodeMCU ESP8266. Whether you're a beginner or an enthusiast, this step-by-step guide will get you started with environmental sensing and real-time data display.

What You'll Learn:

How to connect DHT22 to NodeMCU

Reading temperature and humidity data

Sending data to a web server or cloud (ThingSpeak/Blynk/Custom API)

Real-world IoT project demonstration

Components Required:

NodeMCU ESP8266

DHT22 Temperature & Humidity Sensor

Breadboard

Jumper Wires

Micro USB Cable

Subscribe for more IoT and DIY tech projects!
Рекомендации по теме
Комментарии
Автор

Code:

#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

// WiFi Credentials
const char* ssid = "[Write you Wifi name as it in these inverted commas]";
const char* password = "[Write you Wifi password as it in these inverted commas]";

// ThingSpeak
unsigned long channelID = [Write your channel id here] ;
const char* writeAPIKey = "[Write your writeAPIkey here in these inverted commas]";

// DHT Sensor
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// OLED Display
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

WiFiClient client;

void setup() {
Serial.begin(115200);
dht.begin();

// OLED Initialization
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x27)) {
Serial.println("OLED initialization failed!");
while (true);
}
display.clearDisplay();
display.setTextSize(1);

display.setCursor(0, 0);

display.display();

// WiFi Connection
Serial.println("Connecting to WiFi...");
display.println("Connecting to WiFi...");
display.display();

WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
attempts++;
display.print(".");
display.display();

if (attempts > 60) { // Timeout after 30 seconds
Serial.println("\nWiFi connection failed!");
display.println("WiFi failed!");
display.display();
delay(5000);
ESP.restart();
}
}

Serial.println("\nWiFi connected!");
Serial.print("IP Address: ");


display.clearDisplay();
display.setCursor(0, 0);
display.println("WiFi Connected!");
display.print("IP: ");

display.display();

// Initialize ThingSpeak
ThingSpeak.begin(client);
}

void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();

// Check if DHT sensor reading is successful
if (isnan(temp) || isnan(hum)) {
Serial.println("DHT read failed!");
display.clearDisplay();
display.setCursor(0, 0);
display.println("DHT Error!");
display.display();
delay(2000);
return;
}

// Print to Serial and OLED Display
Serial.printf("Temp: %.1f °C, Hum: %.1f %%\n", temp, hum);
display.clearDisplay();
display.setCursor(0, 0);
display.printf("Temp: %.1f C\n", temp);
display.printf("Hum : %.1f %%\n", hum);
display.display();

// Send data to ThingSpeak
ThingSpeak.setField(1, temp);
ThingSpeak.setField(2, hum);
int status = ThingSpeak.writeFields(channelID, writeAPIKey);

// Display ThingSpeak response
display.setCursor(0, 40);
if (status == 200) {
Serial.println("ThingSpeak update success");
display.println("ThingSpeak: OK");
} else {
Serial.println("ThingSpeak error: " + String(status));
display.println("TS Error: " + String(status));
}
display.display();

// Delay before next update
delay(15000); // Respect ThingSpeak's 15-second free tier limit
}

vaibhavpratapsingh
visit shbcf.ru