متوسط⏱ 15 دقیقه مطالعه

سنسور DHT11/DHT22 یکی از پرکاربردترین سنسورهای دما و رطوبت است. این سنسور با یک پروتکل دیجیتالِ زمان‌بندی‌شدهٔ اختصاصی روی یک سیم داده کار می‌کند؛ در دنیای آردوینو، کتابخانهٔ محبوب DHT sensor library (ساختهٔ Adafruit) همهٔ این پیچیدگی را مدیریت می‌کند.

نصب کتابخانه

از منوی Sketch > Include Library > Manage Libraries، عبارت «DHT sensor library» (نوشتهٔ Adafruit) را جستجو و نصب کنید؛ Arduino IDE به‌طور خودکار وابستگی «Adafruit Unified Sensor» را هم پیشنهاد می‌دهد که باید آن را هم نصب کنید.

CPP
#include <DHT.h>

#define DHT_PIN 15
#define DHT_TYPE DHT22   // یا DHT11 اگر از آن مدل استفاده می‌کنید

DHT dht(DHT_PIN, DHT_TYPE);

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

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

  if (isnan(temp) || isnan(hum)) {
    Serial.println("خطا در خواندن سنسور!");
  } else {
    Serial.print("دما: ");
    Serial.print(temp);
    Serial.print("°C   رطوبت: ");
    Serial.print(hum);
    Serial.println("%");
  }
  delay(2000);
}
⚠️ هشدار

سنسور DHT حداکثر هر ۲ ثانیه یک‌بار قابل خواندن است. خواندن سریع‌تر از این باعث دریافت مقدار نامعتبر (NaN) می‌شود.

مدیریت خطا با isnan()

وقتی خواندن سنسور با خطا مواجه شود (نویز، اتصال شل، تایم‌اوت)، کتابخانه مقدار NaN («عدد نیست») برمی‌گرداند. تابع استاندارد C++‎ به‌نام isnan() این حالت را تشخیص می‌دهد — معادل مفهومی try/except OSError در نسخهٔ میکروپایتون.

شبیه‌سازی زندهٔ سنسور DHT22 — دقیقاً همین کد روی پایهٔ ۱۵ باز کردن در Wokwi ↗
در حال بارگذاری شبیه‌ساز… (ممکن است چند ثانیه طول بکشد)

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود. اگر جعبهٔ بالا بیش از حد سیاه/خالی ماند، صفحه را رفرش کنید یا از دکمهٔ «باز کردن در Wokwi» بالا استفاده کنید.

🛠️ کارگاه عملی

کارگاه عملی: مقادیر دما و رطوبت را در دو متغیر جداگانه ذخیره کنید و اگر دما از ۳۰ درجه بیشتر شد، پیام هشدار «گرم است!» چاپ کنید.

❓ وقتی کتابخانهٔ DHT نتواند مقدار معتبری بخواند، چه مقداری برمی‌گرداند؟
طراحی و توسعه: امین شیخ نجدیglcd.ir | نسخهٔ افزونه: 1.21.0