ESP32 তে টেম্পারেচার এবং হিউমিডিটি সেন্সর নিয়ে কাজ করা

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();
}

রেজাল্টঃ

Leave a Comment