كود البحث

برنامج تعليمي ESP32 51/55 - قياس درجة الحرارة والرطوبة عبر WiFi باستخدام DHT | مجموعة تعلم IoT ESP32 من SunFounder

برنامج تعليمي ESP32 51/55 - قياس درجة الحرارة والرطوبة عبر WiFi باستخدام DHT | مجموعة تعلم IoT ESP32 من SunFounder

في هذا الدرس، سنتعلم كيفية استخدام SunFounder ESP32 مع مستشعر DHT11 أو DHT22 لقياس درجة الحرارة والرطوبة. سيمكننا هذا المشروع من قراءة بيانات المستشعر على أجهزتنا المحمولة أو المتصفحات عبر الواي فاي، مما يظهر قدرات ESP32 كخادم ويب. سنقوم بإعداد ESP32، وتوصيل المكونات بشكل صحيح، وكتابة الكود اللازم لتشغيل كل شيء بسلاسة (في الفيديو عند 00:15).

esp32-51-dht-wifi

الميكروكنترولر ESP32 هو جهاز قوي مزود بوظائف واي فاي وبلوتوث مدمجة. مما يتيح لنا الاتصال بالإنترنت ونقل بيانات المستشعرات لاسلكيًا. سيقوم مستشعر DHT بقياس درجة الحرارة والرطوبة، والتي ستظهر بعد ذلك على صفحة ويب يمكن الوصول إليها من خلال عنوان IP الخاص بـ ESP32. هذا الإعداد مثالي لمراقبة الظروف البيئية عن بُعد.

تفسير الأجهزة

لهذا المشروع، سنستخدم المكونات الرئيسية التالية:

  • وحدة التحكم الدقيقة ESP32:هذا هو جوهر المشروع الذي يتعامل مع اتصال الواي فاي ويعمل كخادم ويب لعرض بيانات المستشعر.
  • حساس DHT11 أو DHT22:تقوم هذه المستشعرات بقياس درجة الحرارة والرطوبة. يعتبر DHT11 مناسبًا للتطبيقات الأساسية، بينما يوفر DHT22 دقة أفضل ونطاقًا أوسع.

يتواصل حساس DHT مع ESP32 باستخدام دبوس بيانات واحد. يقوم بإرسال قراءات درجة الحرارة والرطوبة بتنسيق رقمي، يمكن لـ ESP32 تفسيره بسهولة. بعد ذلك، سيستضيف ESP32 صفحة ويب تعرض هذه القراءات في الوقت الفعلي.

تفاصيل ورقة البيانات

الصانع أدا فروت
رقم الجزء DHT11/DHT22
جهد المنطق/المدخلات والمخرجات 3.3 فولت - 5.5 فولت
جهد الإمداد 3.3 فولت - 5.5 فولت
تيار الخرج (لكل قناة) 0.5 مللي أمبير (تقريباً)
التيار الذروي (لكل قناة) 2.5 مللي أمبير (كحد أقصى)
وقت الاستجابة 1 ث (نوعي)
نطاق الرطوبة 20% إلى 90% رطوبة نسبية
نطاق درجة الحرارة -40°C إلى 80°C
حزمة DIP-4

  • تأكد من أن حساس DHT متصل بالدبوس GPIO الصحيح على ESP32.
  • استخدم المقاومات السحب لتثبيت خط البيانات.
  • يرجى الانتباه إلى جهد إمداد الطاقة؛ كل من DHT11 و DHT22 يعملان جيدًا عند 3.3 فولت.
  • احتفظ بأسلاك قصيرة لتجنب تدهور الإشارة.
  • تحقق من التثبيت الصحيح للمكتبة الخاصة بمستشعرات DHT في بيئة تطوير Arduino.

تعليمات التوصيل

ESP32-28_dht_temperature-sensor-wiring

لربط مستشعر DHT بـ ESP32، قم بتوصيل الدبابيس التالية:

  • مجس DHT VCC:توصيل إلى دبوس 3.3 فولت على ESP32.
  • مستشعر DHT GND:اتصل بدبوس GND على ESP32.
  • بيانات مستشعر DHT:اتصل بـ GPIO 14 على ESP32 (هذا محدد في الشيفرة كDHTPIN).

تأكد من أنك تستخدم المقاومة الصحيحة (عادةً 4.7kΩ) متصلة بين الـ VCC ورقمة البيانات لضمان سلامة الإشارة. إذا كنت تستخدم الـ DHT22، قم ببساطة بتغيير الـDHTTYPEفي الشيفرة منDHT11إلىDHT22لتلائم الفروق في خصائص المستشعرات.

أمثلة على الكود وشرح مفصل

في الكود، نبدأ بإدراج المكتبات الضرورية وتعريف بعض المعرفات الأساسية. على سبيل المثال،refreshمُعين على 3 ثوانٍ، مما يحدد عدد المرات التي يتم فيها تحديث قراءات درجة الحرارة والرطوبة.

const int refresh=3; // read every 3 seconds
boolean showSerial = true; // true or false

المshowSerialتسمح لنا المتغيرات بالتحكم فيما إذا كنا سنقوم بطباعة القراءات على الشاشة التسلسلية. بعد ذلك، نحدد دبوس المستشعر ونوعه:

#define DHTPIN 14  // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

هنا، الDHTيتم إنشاء كائن، مربوط بالدبوس المحدد ونوع المستشعر. يتم تعريف الوظيفة الرئيسية لإرسال بيانات درجة الحرارة عبر الويب كـsendTemp():

void sendTemp() {
    String page = "\n";
    page += "\n";
    page += "\n";
    page += "\n";
    page += "\n";
    // Additional HTML content...
}

تقوم هذه الوظيفة بإنشاء صفحة HTML تعرض قراءات درجة الحرارة والرطوبة. يتم تحديث الصفحة استنادًا إلىrefreshالفترة المعرفة سابقًا. للحصول على تفاصيل الكود بالكامل، يرجى الرجوع إلى الكود الكامل المحمل أسفل المقال.

عرض / ماذا تتوقع

DHT_متصفح_واي فاي

بعد تحميل الكود على ESP32، يجب أن ترى عنوان IP مطبوعاً في المراقب التسلسلي. افتح متصفح الويب وأدخل عنوان IP لعرض قراءات درجة الحرارة والرطوبة. ستتحدث القيم كل 3 ثوانٍ، مما يوفر بيانات في الوقت الحقيقي (في الفيديو عند 12:30).

كن حذرًا من الفخاخ الشائعة، مثل التأكد من أن ESP32 وجهازك متصلان بنفس شبكة Wi-Fi. إذا واجهت مشكلات، تحقق من الأسلاك وتأكد من أن مستشعر DHT يعمل بشكل صحيح.

توقيتات الفيديو

  • :00 بدء
  • ١:٤٥ مقدمة لمشروع الواي فاي DHT
  • 3:59 كود أردوينو لـ ESP32 DHT واي فاي
  • اختيار لوحة ESP32 ومنفذ COM في Arduino IDE
  • 15:13 عرض درجة الحرارة عبر الواي فاي

الصور

ESP32-28_dht_temperature-sensor-wiring
ESP32-28_dht_temperature-sensor-wiring
esp32-51-dht-wifi
esp32-51-dht-wifi
DHT_Wifi_browser
DHT_Wifi_browser
368-ESP32 Tutorial 50/55- Display temperature on Browser screen using DHT11, DHT22 with ESP32
اللغة: C++
/*
 * Display temperature on Browswer screen using DHT11, DHT22 with ESP32
 * 
 * Written by Ahmad Shamshiri on Dec 18, 2023
 📚⬇️ Download and resource page https://robojax.com/RJT385
 * 
 * Watch video instruciton for this video:  https://youtu.be/drrW1EHqKuM
 * 
 * I have combined DHT library of Adafruit with ESP8266 WebServer both links 
 * Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
 * and 
 * ESP8266 on GitHub : https://github.com/esp8266/Arduino
 * 
   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

const int refresh=3;//read every 3 seconds
boolean showSerial =true;//true or false

unsigned int unit=0;//0=C, 1=F, 
char *title[]={"Temperature","Temperature","Humidity"};
char *unitText[]={"°C","°F","%"};\

#include "DHT.h"
#define DHTPIN 14  // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11 
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float temperatureValue,temperatureFValue, humidityValue;// 


#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>

const char *ssid = "dars";
const char *password = "5152535455";

WebServer server(80);

void sendTemp() {
//see video 
  String page = "<!DOCTYPE html>\n";
  page +="<html>\n";  
  page +="<head>\n";
  page +="<title>Robojax DHT</title>\n";
  page +="    <meta http-equiv='refresh' content='";
  page += String(refresh);// how often temperature is read
  page +="'/>\n";  

  page +="<head>\n";  
  page +="<body>\n"; 
  page +="<h1>Robojax.com DHT Code</h1>\n";  
  page +="<p style=\"font-size:50px\"> \n";  
  page +=title[unit];  
  page +=": ";
  if (DHTTYPE ==DHT11){
    page += String((int)temperatureValue);  
  }else{
    page += String(temperatureValue, 1);
  }
  page +=unitText[unit]; 
  page +="<br/>\n";
  //humidity starts
  page +=title[2];  
  page +=": \n";  
  page += String((int)humidityValue);      
  page +=unitText[2];  
  //humidity ends
  page +="</p>\n"; 
  
  page +="</body>";  
  page +="</html>\n";  
  server.send(200,  "text/html", page);

}



void handleNotFound() {
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";

  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }

  server.send(404, "text/plain", message);

}

void setup(void) {
   dht.begin();
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("Open: http://");
  Serial.print(WiFi.localIP());
  Serial.println(" to read temperature");

  if (MDNS.begin("robojaxDHT")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", sendTemp);

  server.on("/inline", []() {
    server.send(200, "text/plain", "this works as well");
  });
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.println("HTTP server started");
}

void loop(void) {
  //Robojax.com code for ESP32 DHT11 DHT22
  server.handleClient();
  temperatureValue = dht.readTemperature();// Read temperature as Celsius (the default)
  humidityValue = dht.readHumidity();// Reading humidity 
  temperatureFValue = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)

    if(showSerial){
        Serial.print(title[unit]);
        Serial.print(": ");
        if (DHTTYPE ==DHT11){
      Serial.println((int)temperatureValue);  
        }else{
        Serial.print(temperatureValue,1);
        }
        
    }
  Serial.println();//just adds new line

  delay(300);// change this to larger value (1000 or more) if you don't need very often reading
  // Robojax.com code for ESP32 and DHT11 DHT22  
}

الأشياء التي قد تحتاجها

ملفات📁

لا توجد ملفات متاحة.