شِفر (کود) جستجو

آموزش ESP32 51/55 - دما و رطوبت از طریق WiFi با DHT | کیت آموزش اینترنت اشیاء ESP32 سان‌فاندر

آموزش ESP32 51/55 - دما و رطوبت از طریق WiFi با DHT | کیت آموزش اینترنت اشیاء ESP32 سان‌فاندر

در این آموزش، ما یاد خواهیم گرفت که چگونه از ماجیول SunFounder ESP32 با حساس(حس کننده) DHT11 یا DHT22 برای اندازه‌گیری دما و رطوبت استفاده کنیم. این پروژه به ما این امکان را می‌دهد که داده‌های حساس(حس کننده) را در دستگاه‌های موبایل یا مرورگرهای خود از طریق وای‌فای بخوانیم و قابلیت‌های ESP32 را به عنوان یک سرور وب نمایش دهیم. ما ESP32 را راه‌اندازی خواهیم کرد، اجزا را به درستی متصل خواهیم کرد و شِفر (کود) لازم را برای راه‌اندازی روان همه چیز خواهیم نوشت (در ویدیو در :15).

esp32-51-dht-wifi

میکروکنترلر ESP32 یک دستگاه قدرتمند با Wi-Fi و Bluetooth داخلی است. این امکان را فراهم می‌کند تا به اینترنت متصل شویم و داده‌های حساس(حس کننده) را به صورت بی‌سیم ارسال کنیم. حساس(حس کننده) DHT دما و رطوبت را اندازه‌گیری کرده و سپس بر روی یک صفحه وب که از طریق آدرس IP ESP32 قابل دسترسی است، نمایش داده می‌شود. این تنظیمات برای نظارت بر شرایط محیطی به صورت دور از دسترس ایده‌آل است.

توضیحاتی درباره سخت‌افزار

برای این پروژه، ما از اجزای اصلی زیر استفاده خواهیم کرد:

  • میکروکنترلر ESP32:این هسته پروژه است که اتصال Wi-Fi را مدیریت می‌کند و به عنوان یک سرور وب برای نمایش داده‌های حساس(حس کننده) عمل می‌کند.
  • حساس(حس کننده) DHT11 یا DHT22این سنسورها دما و رطوبت را اندازه‌گیری می‌کنند. DHT11 برای برنامه‌های اساسی مناسب است، در حالی که DHT22 دقت بهتری و دامنه وسیع‌تری را ارائه می‌دهد.

حساس(حس کننده) DHT با ESP32 از طریق یک پایه داده‌ی واحد ارتباط برقرار می‌کند. این حساس(حس کننده) دما و رطوبت را در قالب دیجیتال ارسال می‌کند که ESP32 می‌تواند به راحتی آن را تفسیر کند. سپس ESP32 یک صفحه وب میزبانی می‌کند که این خوانش‌ها را به صورت آنی نمایش می‌دهد.

جزئیات برگه مشخصات

تولیدکننده آدافرودیت
شماره قطعه دی اتچ تی ۱۱/دی اتچ تی ۲۲
ولتاژ منطق/ورودی و خروجی ۳.۳ ولت - ۵.۵ ولت
ولتاژ تأمین ۳.۳ ولت - ۵.۵ ولت
جریان خروجی (به ازای هر کانال) ۰.۵ میلی‌آمپر (به‌طور متوسط)
جریان اوج (به ازای هر کانال) ۲.۵ میلی آمپر (حداکثر)
زمان پاسخ‌دهی ۱ ثانیه (معمولی)
محدوده رطوبت 20٪ تا 90٪ رطوبت نسبی
دامنه دما -۴۰°C تا ۸۰°C
بسته DIP-4

  • اطمینان حاصل کنید که حساس(حس کننده) DHT به پایه GPIO صحیح بر روی ESP32 متصل است.
  • از مقاومت‌های Pull-up برای تثبیت خط داده استفاده کنید.
  • به ولتاژ منبع تغذیه توجه کنید؛ هم DHT11 و هم DHT22 در ۳.۳ ولت به خوبی کار می‌کنند.
  • سیم‌کشی را کوتاه نگه‌دارید تا از کاهش کیفیت سیگنال جلوگیری شود.
  • بررسی نصب صحیح کتابخانه برای سنسورهای DHT در محیط توسعه آردوینو.

دستورالعمل‌های سیم‌کشی

ESP32-28_dht_temperature-sensor-wiring

برای اتصال حساس(حس کننده) DHT به ESP32، پایه‌های زیر را به هم متصل کنید:

  • حساس(حس کننده) DHT VCC:به پایه ۳.۳ ولت روی ESP32 متصل شوید.
  • سرزمین حساس(حس کننده) DHT:به پایه GND روی ESP32 متصل شوید.
  • داده‌های حساس(حس کننده) DHT:به GPIO 14 در ESP32 وصل شوید (این در شِفر (کود) به عنوانDHTPIN).

اطمینان حاصل کنید که مقاومت صحیح (معمولاً 4.7kΩ) بین VCC و پایانه داده متصل شده است تا سیگنال به درستی حفظ شود. اگر از DHT22 استفاده می‌کنید، به سادگی تغییری درDHTTYPEدر شِفر (کود) ازDHT11بهDHT22برای سازگاری با تفاوت‌های ویژگی‌های حساس(حس کننده).

نمونه‌های شِفر (کود) و راهنمایی

در شِفر (کود)، ما با از جمله کردن کتابخانه‌های لازم و تعریف چند شناسه کلیدی شروع می‌کنیم. به عنوان مثال،refreshبه ۳ ثانیه تنظیم شده است، که تعیین می‌کند دما و رطوبت چه زمانی به‌روزرسانی می‌شوند.

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

TheshowSerialاین متغیر به ما این امکان را می‌دهد که کنترل کنیم آیا خوانش‌ها به مانیتور سری چاپ شوند یا خیر. سپس، ما پایه حساس(حس کننده) و نوع آن را تعریف می‌کنیم:

#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_مرورگر_Wifi

پس از بارگذاری شِفر (کود) روی ESP32، باید آدرس IP در نمایشگر مسلسل نمایش داده شود. یک مرورگر وب باز کنید و آدرس IP را وارد کنید تا خوانش‌های دما و رطوبت را مشاهده کنید. مقادیر هر ۳ ثانیه به‌روز می‌شوند و داده‌های واقعی زمان را ارائه می‌دهند (در ویدئو در ۱۲:۳۰).

از افت‌های رایج احتیاط کنید، مانند اطمینان از اینکه ESP32 و دستگاه شما به یک شبکه Wi-Fi متصل هستند. اگر با مشکلاتی مواجه شدید، سیم‌کشی را بررسی کرده و اطمینان حاصل کنید که حساس(حس کننده) DHT به درستی کار می‌کند.

ویدیو زمان‌بندی‌ها

  • ۰۰:۰۰ شروع
  • ۱:۴۵ مقدمه‌ای بر پروژه وای‌فای DHT
  • ۳:۵۹ شِفر (کود) آردوینو برای ESP32 DHT Wifi
  • ۱۳:۳۱ انتخاب برد ESP32 و پورت COM در Arduino IDE
  • ۱۵:۱۳ نمایش دما از طریق وای‌فای

تصاویر

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  
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

هیچ فایلی موجود نیست.