ESP32 তে টেম্পারেচার এবং হিউমিডিটি সেন্সর নিয়ে কাজ করতে চাইলে আমরা DHT11 সেন্সর ব্যবহার করতে পারি। এটি খুবি সস্তা একটা সেন্সর, যার সাহায্যে একই সাথে টেম্পারেচার এবং হিউমিডিটি ডেটা রিড করতে পারি।

তার জন্য আমরা এভাবে ওয়ারিং করে নিতে পারি। আর এর জন্য মিনিমাল কোড হচ্ছেঃ
#include <Arduino.h>
#include <DHT.h>
#define DHTPIN 15
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
delay(2000); // Wait 2 seconds between readings
float humidity = dht.readHumidity();
float tempC = dht.readTemperature();
if (isnan(humidity) || isnan(tempC)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% | Temp: ");
Serial.print(tempC);
Serial.println(" °C");
}
আমাদের কাছে কোন ডিসপ্লে থাকলে এই ডেটা ডিসপ্লেতে দেখাতে পারি। যেমন ESP32 এর সাথে SSD1306 ডিসপ্লে কানেক্ট করা লেখায় দেখেছি কিভাবে SSD1360 কিভাবে কানেক্ট করা যায়। এবার এই সেন্সর ডেটা আমরা ডিসপ্লেতে দেখাবো। ডিসপ্লে আগের পিন গুলতেই কানেক্ট করে নিব। যেমনঃ

এরপর এই কোড ডিপ্লয় করবঃ
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// OLED Screen Setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_SDA 21
#define OLED_SCL 22
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C // 0x3C standard address for SSD1306
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// DHT11 Sensor Setup
#define DHTPIN 15
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// Initialize DHT sensor
dht.begin();
// Initialize I2C for OLED (SDA=21, SCL=22)
Wire.begin(OLED_SDA, OLED_SCL);
// Initialize OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println("OLED initialization failed!");
} else {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Initializing...");
display.display();
}
}
void loop() {
delay(2000); // DHT11 requires 2 seconds between readings
float humidity = dht.readHumidity();
float tempC = dht.readTemperature();
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// Title Header
display.setTextSize(1);
display.setCursor(0, 0);
display.println("DHT11 Weather Monitor");
display.println("---------------------");
if (isnan(humidity) || isnan(tempC)) {
display.setCursor(0, 25);
display.println("Sensor Error!");
Serial.println("Failed to read from DHT sensor!");
} else {
// Temperature Display
display.setCursor(0, 24);
display.setTextSize(1);
display.print("Temp: ");
display.setTextSize(2);
display.print(tempC, 1);
display.setTextSize(1);
display.println(" C");
// Humidity Display
display.setCursor(0, 46);
display.setTextSize(1);
display.print("Humi: ");
display.setTextSize(2);
display.print(humidity, 1);
display.setTextSize(1);
display.println(" %");
// Console output
Serial.print("Temp: ");
Serial.print(tempC);
Serial.print(" °C | Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
display.display();
}
রেজাল্টঃ
