وب سرور ESP32 برای نمایش دما و رطوبت DHT11
محتویات
میکروکنترلرهای سری ESP32 میکروکنترلرهای کم هزینه و کم مصرف هستند که دارای Wi-Fi یکپارچه و بلوتوث دو حالته هستند. سری ESP32 با ریزپردازنده Tensilica Xtensa LX6 در دو نوع (دو هسته ای و تک هسته ای) عرضه می شوند و دارای سوئیچ های آنتن داخلی، RF balun، تقویت کننده پاور، تقویت کننده گیرنده کم نویز، فیلترها و ماژول های مدیریت انرژی هستند.
قبلاً پروژههای مبتنی بر اینترنت اشیا زیادی از جمله ایستگاه هواشناسی با استفاده از DHT11 و وب سرور نه فقط با دستگاه های Raspberry Pi، ESP8266 و Arduino، بلکه برنامههای زیادی با ماژول Wi-Fi محبوب ESP32 ساختهایم. امروز ما یک وب سرور مبتنی بر ESP32 برای نمایش مقادیر دما و رطوبت با استفاده از سنسور DHT11 خواهیم ساخت. برد ESP32 داده های دما و رطوبت را از سنسور DHT11 خوانده و در صفحه وب نمایش می دهد. در اینجا همچنین از IFTTT برای ارسال اعلان ایمیل، زمانی که دما از حد خاصی فراتر میرود استفاده میشود.
وسایل مورد نیاز
- ESP-32 Devkit V1
- ماژول سنسور DHT11
- سیم های جامپر
اتصالات DHT11 و ESP32
اتصالات مورد نیاز برای سنسور دما و رطوبت DHT11 با ESP32 در زیر آورده شده است.
رابط ارتباطی سنسور DHT11 با ESP32 بسیار ساده است زیرا تنها سه پایه دارد. پایه VCC و GND سنسور را به پایه 3.3 ولت و GND ESP32 وصل کنید. سپس پایه Data سنسور را به پایه D2 ESP32 وصل کنید. بعد از ایجاد اتصالات، سخت افزار من به شکل زیر در آمده است:
تنظیم IFTTT برای اندازه گیری دما و رطوبت
IFTTT یک سرویس رایگان مبتنی بر وب است که به کاربران اجازه میدهد زنجیرهای از عبارات شرطی ساده به نام « recipes» ایجاد کنند که بر اساس تغییرات سایر سرویسهای وب مانند جیمیل، فیسبوک، اینستاگرام و پینترست فعال میشوند. IFTTT مخفف « If This Then That» است.
در این پروژه از IFTTT برای ارسال ایمیل در زمانی که دما یا رطوبت از حدی که از پیش تعریف شده فراتر رفت استفاده می شود. ما قبلاً از IFTTT در بسیاری از پروژههای مبتنی بر اینترنت اشیا برای ارسال ایمیل یا پیامک در مورد رویدادهای خاص مانند مصرف بیش از حد برق، نرخ پالس بالا، ورود مزاحمان و غیره استفاده کردیم.
ابتدا با اطلاعات کاربری خود وارد IFTTT شوید یا اگر حساب کاربری ندارید، ثبت نام کنید.
اکنون «Webhooks» را جستجو و روی بخش Webhooks in Services کلیک کنید.
اکنون، در پنجره Webhooks، روی “Documentation” در گوشه سمت راست بالا کلیک کنید تا private key را دریافت کنید.
این key را کپی کنید. بعدا در برنامه استفاده خواهد شد.
پس از دریافت private key، اکنون یک applet با استفاده از Webhooks and Email services ایجاد می کنیم. برای ایجاد یک applet روی نمایه خود کلیک کنید و سپس روی ” Create” کلیک کنید.
اکنون در پنجره بعدی، روی نماد “This” کلیک کنید.
اکنون Webhooks را در بخش جستجو، جستجو کنید و روی “Webhooks” کلیک کنید.
اکنون راه انداز ‘Receive a Web Request’ را انتخاب کنید و در پنجره بعدی نام event را temp_event وارد کنید و سپس روی create a triggerکلیک کنید.
پس از این کار، بر روی “Then That” و سپس بر روی Email کلیک کنید.
اکنون در قسمت Email ، روی “send me an email” کلیک کنید و موضوع و متن ایمیل را وارد کنید و سپس بر روی گزینه create action کلیک کنید.
در مرحله آخر بر روی Finish کلیک کنید تا تنظیمات applet کامل شود.
توضیح کد
در اینجا از Arduino IDE برای برنامه ریزی برد ESP32 استفاده می کنیم، برای این کار فایل برد ESP32 را در Arduino IDE دانلود و نصب کنید.
کد کامل این پروژه ESP32 DHT11 در انتهای مقاله آورده شده است. در اینجا قسمت های مهم از برنامه را توضیح می دهیم.
طبق معمول، کد را با گنجاندن تمام کتابخانه های مورد نیاز شروع کنید. برای این پروژه به سه کتابخانه WiFi، DHT (برای سنسور DHT) و Wire (برای I2C) نیاز داریم.
#include <WiFi.h> #include <Wire.h> #include "DHT.h
سپس نوع DHT و پینی که به آن متصل است را مشخص کنید.
#define DHTTYPE DHT11 // DHT 11 uint8_t DHTPin = D2; DHT dht(DHTPin, DHTTYPE);
سپس، متغیرهایی برای ذخیره کردن نام Wi-Fi، رمز عبور Wifi، نام host IFTTT و private key ایجاد کنید.
const char* ssid = "Wi-Fi Name"; const char* password = "Password"; const char *host = "maker.ifttt.com"; const char *privateKey = "Private key";
پس از آن، برای دسترسی به تابع WiFiServer، یک شی از کتابخانه WifiServer را تعریف می کنیم. پورت را روی 80 تعریف میکنیم به خاطر اینکه 80 پورت پیش فرض برای HTTP است.
WiFiServer server(80);
در داخل تابع Void setup() باود ریت و سنسور DHT را با استفاده از تابع start() مقداردهی کنید و سپس ماژول را با استفاده از نام کاربری و رمز عبور به Wi-Fi متصل کنید. هنگامی که ESP32 به Wi-Fi متصل شد، آدرس IP ESP32 را چاپ می کند.
Serial.begin(115200); pinMode(DHTPin, INPUT); dht.begin(); Serial.print("Connecting to Wifi Network"); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Connected to WiFi."); Serial.println("IP address of ESP32 is : "); ……………………………….. ………………………………….
در تابع void loop()، داده های دما و رطوبت را بخوانید و این داده ها را در متغیرهای مختلف با استفاده از تابع DHTdht.read() ذخیره کنید.
Temperature = dht.readTemperature(); Humidity = dht.readHumidity();
پس از آن، صفحه وب را با استفاده از HTML طراحی کنید و اسکریپت را با استفاده از تابع ()client.println چاپ کنید.
WiFiClient client = server.available(); if (client) { Serial.println("Web Client connected "); String request = client.readStringUntil('\r'); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // the connection will be closed after completion of the response client.println("Refresh: 10"); // update the page after 10 sec client.println();
در اینجا از CSS برای استایل دادن به متن و پس زمینه استفاده می شود. شما می توانید کد CSS را تغییر دهید تا ظاهر و احساس صفحه وب مطابق با سلیقه شما تغییر کند.
client.println("<style>html { font-family: Cairo; display: block; margin: 0px auto; text-align: center;color: #333333; background-color: ##f3ffee;}"); client.println("body{margin-top: 50px;}"); client.println("h1 {margin: 50px auto 30px; font-size: 50px; text-align: center;}"); client.println(".side_adjust{display: inline-block;vertical-align: middle;position: relative;}"); client.println(".text1{font-weight: 180; padding-left: 15px; font-size: 50px; width: 170px; text-align: left; color: #3498db;}"); …………. ………….
در کدهای HTML از تگهای <div> برای نمایش هر دو پارامتر یعنی دما و رطوبت استفاده میشود.
client.println("<div class=\"side_adjust text1\">Humidity:</div>"); client.println("<div class=\"side_adjust data1\">"); client.print(Humidity); client.println("<div class=\"side_adjust text1\">%</div>"); client.println("</div>"); client.println("<div class=\"data\">"); client.println("<div class=\"side_adjust text2\">Temperature:</div>"); client.println("<div class=\"side_adjust data2\">"); client.print(Temperature); client.println("<div class=\"side_adjust text2\">*C</div>"); ……….. ………..
پس از آن، از شرط if برای شروع event استفاده می شود. بنابراین این کد هر زمان که دما از 20 گذشت، یک فرمان به IFTTT ارسال می کند.
if ( Temperature >= 20) { send_event("temp_event"); }
تست کارکرد ESP32 با DHT11
حالا ESP32 را با لپ تاپ وصل کنید و برد و پورت را به درستی انتخاب کنید و سپس روی دکمه Upload کلیک کنید.
مطمئن شوید که لپ تاپ و ESP32 شما به یک شبکه Wi-Fi متصل هستند. پس از آپلود کد، serial monitor را باز کنید، باود ریت را به 115200 تغییر دهید.
اکنون برای دسترسی به صفحه وب، آدرس IP ESP32 را کپی کرده و در مرورگر پیست کنید. صفحه وب به شکل زیر خواهد بود:
اکنون، هر زمان که مقدار دما از 20 گذشته باشد، event IFTTT شروع به ارسال یک ایمیل برای اطلاع از اینکه دما از مقادیر بحرانی عبور کرده است، می کند.
به این صورت است که حسگر DHT11 را می توان با ESP32 برای ساخت یک سیستم اندازه گیری دما و رطوبت مبتنی بر اینترنت اشیا متصل کرد.
کد کامل به همراه یک ویدیوی در زیر آورده شده است.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
کد ایراداتی دارد در تعریف پینمود D2 نوشته شده درستش 2 هست
خط بیست سوم هم یک سری نوشته اضافه هست