وب سرور ESP8266 با DHT11 و DHT22؛ نمایش دما و رطوبت
وب سرور ESP8266 با DHT11 یکی از پروژههای جذاب برای شروع
کار با اینترنت اشیا یا همان IoT است. در این پروژه، ESP8266 اطلاعات دما و
رطوبت را از سنسور دریافت میکند، به شبکه Wi-Fi متصل میشود و نتیجه را
داخل یک صفحه وب نمایش میدهد.
نتیجه این کار بسیار کاربردی است: بهجای اینکه مقدار سنسور را فقط روی
Serial Monitor ببینید، میتوانید با موبایل، لپتاپ یا کامپیوتر وارد
آدرس ESP8266 شوید و وضعیت محیط را مشاهده کنید.
🌡️ این پروژه در یک نگاه
ESP8266 NodeMCU
DHT11 / DHT22
D8
Wi-Fi
مرورگر
چرا ESP8266 را به یک دماسنج تحت شبکه تبدیل کنیم؟
یک سنسور معمولی فقط مقدار اندازهگیریشده را در اختیار میکروکنترلر قرار
میدهد؛ اما ESP8266 میتواند همین اطلاعات را از طریق Wi-Fi منتشر کند.
به همین دلیل پروژه ساده اندازهگیری دما، به یک سیستم مانیتورینگ تبدیل میشود.
چنین ساختاری برای اتاق، گلخانه، انبار، آزمایشگاه و پروژههای آموزشی
بسیار کاربردی است. حتی میتوانید در مراحل بعدی ثبت اطلاعات، هشدار دما،
کنترل فن یا ذخیرهسازی داده را هم به پروژه اضافه کنید.
DHT11 یا DHT22؛ کدام را انتخاب کنیم؟
DHT11 و DHT22 هر دو دما و رطوبت را اندازه میگیرند، اما محدوده و دقت
آنها یکسان نیست. DHT22 معمولاً انتخاب بهتری برای پروژههایی است که
محدوده اندازهگیری و دقت بالاتری نیاز دارند. طبق مشخصات Adafruit،
DHT11 محدوده 0 تا 50°C و دقت حدود ±2°C دارد، در حالی که DHT22 حدود
40- تا 80°C و دقت حدود ±0.5°C ارائه میدهد.
| ویژگی | DHT11 | DHT22 |
|---|---|---|
| محدوده دما | 0 تا 50°C | 40- تا 80°C |
| دقت دما | حدود ±2°C | حدود ±0.5°C |
| رطوبت | 20 تا 80% | 0 تا 100% |


🎯 انتخاب سریع
پروژه ساده و آموزشی: DHT11
دقت و محدوده بیشتر: DHT22
سیمکشی DHT11 و DHT22 با NodeMCU
در اتصال پایه مقاله مرجع، VCC سنسور به 3.3V، زمین به GND و Data به
D8 متصل میشود. همچنین برای خط داده یک Pull-up حدود 10kΩ بین VCC و
Data قرار میگیرد.
| DHT | ESP8266 | وظیفه |
|---|---|---|
| VCC | 3.3V | تغذیه |
| DATA | D8 | داده |
| GND | GND | زمین |
⚠️ Pull-up را فراموش نکنید
اگر از سنسور خام استفاده میکنید، وجود مقاومت Pull-up روی خط DATA را
بررسی کنید. بعضی ماژولهای آماده این مقاومت را از قبل روی برد دارند.
قبل از ساخت Web Server، خود سنسور را تست کنید
این مرحله را عمداً قبل از شبکه قرار دادهایم. اگر DHT11 یا DHT22 درست
کار نکند، حتی سالم بودن Web Server هم کمکی نمیکند. بنابراین ابتدا
سنسور را بهصورت مستقل بخوانید و خروجی را در Serial Monitor بررسی کنید.
در Arduino IDE کتابخانه DHT sensor library by Adafruit
و همچنین Adafruit Unified Sensor را نصب کنید.
مقاله مرجع نیز همین دو کتابخانه را معرفی میکند.
📦 کتابخانههای لازم
- Arduino IDE را باز کنید.
- Library Manager را اجرا کنید.
- DHT sensor library by Adafruit را نصب کنید.
- Adafruit Unified Sensor را نیز نصب کنید.
کد تست DHT11 و DHT22؛ ساده و قابلاعتماد
کد زیر فقط وظیفه خواندن سنسور را دارد. اگر DHT22 دارید، همین نسخه را
اجرا کنید؛ برای DHT11 فقط مقدار نوع سنسور را تغییر دهید.
#include <DHT.h>
#define DHTPIN D8
#define DHTTYPE DHT22 // برای DHT11 این مقدار را تغییر دهید
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
Serial.println();
Serial.println("DHT Sensor Test");
}
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
}
🔧 اگر DHT11 دارید
این خط را:
#define DHTTYPE DHT22
به این تبدیل کنید:
#define DHTTYPE DHT11
پس از آپلود برنامه، Serial Monitor را روی 115200 قرار دهید. اگر مقدار
دما و رطوبت نمایش داده شد، بخش سنسور آماده است و میتوانید به مرحله بعد بروید.
حالا ESP8266 را وارد دنیای Web Server کنیم
در حالت STA، ESP8266 به یک شبکه Wi-Fi موجود متصل میشود و یک Web Server
روی پورت 80 اجرا میکند. سپس هر دستگاهی که به همان شبکه دسترسی داشته
باشد میتواند با وارد کردن IP برد، صفحه وب پروژه را باز کند. مقاله مرجع
نیز از همین معماری استفاده میکند.
📡 مسیر ارتباط
DHT → ESP8266 → Wi-Fi → Router → مرورگر موبایل یا کامپیوتر
کد کامل Web Server؛ نسخه ساده و قابل یادگیری
حالا که سنسور را جداگانه تست کردهاید، میتوانیم Web Server را اضافه کنیم.
این کد عمداً ساده نگه داشته شده تا هر بخش آن برای کاربر قابل فهم باشد.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTPIN D8
#define DHTTYPE DHT22 // برای DHT11 تغییر دهید
const char* ssid = "YOUR_WIFI_NAME";
const char* password = "YOUR_WIFI_PASSWORD";
DHT dht(DHTPIN, DHTTYPE);
ESP8266WebServer server(80);
void handleRoot() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
server.send(
500,
"text/plain",
"Failed to read DHT sensor"
);
return;
}
String html = "<!DOCTYPE html>";
html += "<html lang='fa' dir='rtl'>";
html += "<head>";
html += "<meta charset='UTF-8'>";
html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
html += "<title>ESP8266 Weather Station</title>";
html += "</head>";
html += "<body style='font-family:Arial;text-align:center;'>";
html += "<h1>ایستگاه دما و رطوبت</h1>";
html += "<h2>دما: ";
html += String(temperature, 1);
html += " °C</h2>";
html += "<h2>رطوبت: ";
html += String(humidity, 1);
html += " %</h2>";
html += "<p>ESP8266 + DHT</p>";
html += "</body></html>";
server.send(200, "text/html", html);
}
void handleNotFound() {
server.send(
404,
"text/plain",
"Page not found"
);
}
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
🧠 فقط دو بخش را حتماً تغییر دهید
نام Wi-Fi:
YOUR_WIFI_NAME
رمز Wi-Fi:
YOUR_WIFI_PASSWORD
اگر DHT11 دارید فقط یک خط تغییر میکند
ساختار کد برای DHT11 و DHT22 تقریباً یکسان است. تنها کافی است نوع سنسور
را در تعریف اولیه مشخص کنید:
#define DHTTYPE DHT11
برای DHT22 از همین مقدار استفاده کنید:
#define DHTTYPE DHT22
بعد از آپلود، IP را از کجا پیدا کنیم؟
پس از اتصال موفق به Wi-Fi، Serial Monitor را روی 115200 باز کنید.
ESP8266 آدرس IP محلی خود را نمایش میدهد. همان آدرس را در مرورگر
موبایل یا کامپیوتری که به همان شبکه متصل است وارد کنید.
برای مثال اگر Serial Monitor چنین آدرسی نشان دهد:
192.168.1.50
کافی است همین IP را در نوار آدرس مرورگر وارد کنید:
http://192.168.1.50
مقاله مرجع نیز پس از آپلود، مشاهده IP در Serial Monitor و ورود همان
IP در مرورگر را مرحله اصلی دسترسی به Web Server معرفی میکند.
📱 نتیجه کار
اگر همه چیز درست باشد، در مرورگر مقدار دما و رطوبت را مشاهده میکنید.
از اینجا به بعد، پروژه واقعاً وارد مرحله IoT میشود.
پشت پرده این کد چه اتفاقی میافتد؟
کتابخانه ESP8266WiFi اتصال برد به شبکه را مدیریت میکند
و ESP8266WebServer درخواستهای HTTP را دریافت میکند.
کتابخانه DHT نیز خواندن دما و رطوبت را ساده میکند. این ساختار همان
معماری اصلی مقاله مرجع است.
در setup()، سنسور راهاندازی میشود، ESP8266 به Wi-Fi متصل
میشود و مسیر اصلی سایت با server.on("/", handleRoot)
تعریف میشود.
وقتی مرورگر آدرس اصلی را درخواست میکند، تابع handleRoot()
اجرا میشود. این تابع دما و رطوبت را میخواند، HTML را میسازد و نتیجه
را با server.send() برای مرورگر میفرستد.
در پایان، server.handleClient() داخل loop()
درخواستهای جدید را پردازش میکند.
حالا ظاهر صفحه را زیباتر کنیم
نسخه فعلی عمداً ساده است تا تمرکز روی منطق پروژه باشد. بعد از اینکه
ارتباط درست شد، میتوانید HTML و CSS را تغییر دهید و دما و رطوبت را
داخل کارتهای زیبا، آیکونها یا یک داشبورد کامل نمایش دهید.
🎨 ایده برای طراحی داشبورد
دما و رطوبت را در دو کارت مجزا قرار دهید و مقدارها را با فونت بزرگ
نمایش دهید. سپس نام پروژه، وضعیت Wi-Fi و زمان آخرین بهروزرسانی را
هم به صفحه اضافه کنید.
نمایش خودکار اطلاعات بدون Refresh
سادهترین روش، Refresh خودکار صفحه است. مثلاً با اضافه کردن Meta Refresh
میتوان صفحه را هر چند ثانیه دوباره بارگذاری کرد:
<meta http-equiv="refresh" content="2">
این روش ساده است، اما هر بار تمام صفحه دوباره بارگذاری میشود. برای
داشبورد حرفهایتر میتوان از AJAX استفاده کرد و فقط عدد دما و رطوبت
را تغییر داد؛ مقاله مرجع نیز AJAX را مرحله بعدی توسعه پروژه معرفی میکند.
چرا DHT11 و DHT22 را نباید بیش از حد سریع بخوانیم؟
این سنسورها برای نمونهبرداری خیلی سریع طراحی نشدهاند. به همین دلیل
نباید در یک حلقه بدون تأخیر، بارها و بارها از آنها داده بخواهید.
مشخصات Adafruit برای DHT11 حدود یک خواندن در ثانیه و برای DHT22 حدود
یک خواندن در دو ثانیه را پیشنهاد میکند.
⏱️ نکته مهم برای Web Server
حتی اگر مرورگر هر نیم ثانیه صفحه را Refresh کند، سنسور الزاماً داده تازه
تولید نمیکند. بنابراین سرعت صفحه را با سرعت واقعی سنسور هماهنگ کنید.
اگر سنسور جواب نمیدهد، از اینجا شروع کنید
| مشکل | بررسی اول |
|---|---|
| خواندن DHT شکست میخورد | VCC / GND / DATA |
| خطای سنسور | DHTTYPE و کتابخانه |
| Wi-Fi وصل نمیشود | SSID و Password |
| IP نمایش داده نمیشود | اتصال Wi-Fi |
| صفحه باز نمیشود | IP و شبکه مشترک |
🔍 عیبیابی مرحلهبهمرحله
ابتدا کد تست DHT را اجرا کنید. اگر Serial Monitor مقدار دما و رطوبت
را نشان نداد، هنوز سراغ Web Server نروید.
وقتی سنسور سالم شد، اتصال Wi-Fi و سپس صفحه وب را بررسی کنید. این روش
باعث میشود مشکل سختافزاری را با مشکل شبکه اشتباه نگیرید.
اگر صفحه وب باز نمیشود چه کنیم؟
مطمئن شوید ESP8266 واقعاً به Wi-Fi وصل شده و IP گرفته است. موبایل یا
لپتاپ نیز باید به همان شبکه دسترسی داشته باشد. اگر IP در Serial Monitor
نمایش داده نمیشود، مشکل هنوز در مرحله اتصال شبکه قرار دارد.
همچنین Serial Monitor را روی سرعت درست، یعنی 115200، باز کنید تا پیامهای
عیبیابی را بدون کاراکترهای نامفهوم مشاهده کنید. مقاله مرجع نیز همین
سرعت را برای مشاهده IP و پیام شروع سرور استفاده میکند.
این پروژه را چطور به یک سیستم IoT واقعی تبدیل کنیم؟
وبسرور فعلی فقط مقدار لحظهای دما و رطوبت را نمایش میدهد، اما همین
ساختار پایه میتواند توسعه زیادی پیدا کند. ذخیرهسازی اطلاعات، نمودار،
هشدار دما، کنترل فن و ارسال اطلاعات به یک سرویس ابری از مراحل بعدی هستند.
🚀 ایدههای توسعه پروژه
DHT + Relay: کنترل فن بر اساس دما
DHT + SD: ذخیره تاریخچه دما و رطوبت
DHT + LCD: نمایش اطلاعات بهصورت محلی
ESP8266 + Cloud: ارسال داده برای دسترسی از راه دور
برای ساخت این پروژه چه قطعاتی نیاز دارید؟
نسخه پایه به NodeMCU، DHT11 یا DHT22، سیم و در صورت نیاز مقاومت Pull-up
احتیاج دارد. نسخههای پیشرفتهتر نیز میتوانند نمایشگر، رله، کارت
حافظه و سایر قطعات را در خود جای دهند.
🛒 قطعات پروژه IoT را از پژوهشگران تهیه کنید
برای ساخت پروژههای ESP8266 و اندازهگیری دما و رطوبت میتوانید
NodeMCU، DHT11، DHT22، مقاومت، بردبورد، نمایشگر، رله و سایر قطعات
موردنیاز را در فروشگاه پژوهشگران بررسی کنید.
مقالات بیشتر برای پروژههای ESP8266
📚 مقالات بیشتر پژوهشگران
آموزشهای بیشتر درباره ESP8266، ESP32، سنسورها، Web Server، Wi-Fi و
پروژههای IoT را در مجموعه مقالات پژوهشگران ببینید.
برای انتخاب قطعه یا طراحی پروژه مشاوره فنی بگیرید
🛠️ برای پروژه IoT سؤال دارید؟
اگر درباره انتخاب DHT11 یا DHT22، ESP8266، نمایشگر، رله یا نحوه
ساخت Web Server سؤال دارید، قبل از خرید میتوانید برای
مشاوره فنی با مجموعه پژوهشگران در ارتباط باشید.
انتخاب درست سنسور و معماری پروژه از همان ابتدا میتواند توسعه سیستم را سادهتر کند.
جمعبندی؛ یک دماسنج ساده یا شروع یک پروژه IoT؟
وب سرور ESP8266 با DHT11 پروژهای ساده اما بسیار آموزنده
است. در یک مدار کوچک، سنسور دیجیتال، میکروکنترلر، Wi-Fi، HTTP و HTML
کنار هم قرار میگیرند و نتیجه در اختیار مرورگر قرار میگیرد.
بهترین روش شروع این است که ابتدا DHT11 یا DHT22 را با کد تست مستقل
بررسی کنید. پس از اطمینان از عملکرد سنسور، Web Server را اضافه کنید
و در مراحل بعدی سراغ طراحی ظاهری، Refresh خودکار یا AJAX بروید.
⚡ چکلیست سریع پروژه
✔ نوع DHT را درست انتخاب کنید.
✔ VCC و GND را بررسی کنید.
✔ DATA را به D8 وصل کنید.
✔ Pull-up خط DATA را بررسی کنید.
✔ کتابخانههای لازم را نصب کنید.
✔ ابتدا کد تست سنسور را اجرا کنید.
✔ SSID و Password را وارد کنید.
✔ IP نمایشدادهشده در Serial Monitor را باز کنید.
✔ سپس صفحه را برای AJAX یا طراحی بهتر توسعه دهید.
💬 تجربه شما از DHT11 و ESP8266 چیست؟
اگر قبلاً با DHT11، DHT22 و ESP8266 کار کردهاید،
تجربه خود را درباره Web Server، خطاهای Wi-Fi، دقت سنسور یا طراحی
داشبورد با ما و سایر کاربران به اشتراک بگذارید.
اگر راهکار خاصی برای حل مشکل سنسور یا نمایش اطلاعات پیدا کردهاید،
در بخش نظرات همین پایین برای ما بنویسید.
سوالات متداول درباره وب سرور ESP8266 با DHT11
آیا DHT11 و DHT22 به ESP8266 وصل میشوند؟
بله. هر دو سنسور از یک خط داده برای ارتباط استفاده میکنند و در
اتصال این آموزش Data به D8 متصل میشود.
چرا سنسور DHT مقدار نمیدهد؟
VCC، GND، DATA، نوع سنسور در کد و مقاومت Pull-up را بررسی کنید.
بهتر است ابتدا کد تست مستقل سنسور را اجرا کنید.
چرا صفحه Web Server باز نمیشود؟
اتصال Wi-Fi، IP نمایشدادهشده در Serial Monitor و قرار داشتن موبایل
یا کامپیوتر در همان شبکه را بررسی کنید.
چرا مقدار دما خیلی سریع تغییر نمیکند؟
DHT11 و DHT22 سنسورهای سریع نیستند. DHT11 حدود یک خواندن در ثانیه
و DHT22 حدود یک خواندن در دو ثانیه را پشتیبانی میکند؛ بنابراین
Refresh بسیار سریع الزاماً اطلاعات جدیدتری ایجاد نمیکند.





