পাঠ ৩১/৩১: DHT11 এবং ESP01 SunFounder কিট ব্যবহার করে Wi-Fi-এর মাধ্যমে তাপমাত্রা ও আর্দ্রতা পরিমাপ করুন
এই প্রজেক্ট গাইডটি আপনাকে একটি ESP8266 (ESP-01) মডিউল এবং একটি DHT11 সেন্সর ব্যবহার করে একটি ওয়্যারলেস তাপমাত্রা এবং আর্দ্রতা মনিটরিং সিস্টেম তৈরি করার প্রক্রিয়ার মধ্য দিয়ে নিয়ে যায়। শেষে, আপনার কাছে এমন একটি ডিভাইস থাকবে যা নিজস্ব ওয়েব সার্ভার তৈরি করে, যা আপনাকে আপনার লোকাল নেটওয়ার্কের সাথে সংযুক্ত যেকোনো ডিভাইসে (যেমন স্মার্টফোন, ট্যাবলেট বা কম্পিউটার) রিয়েল-টাইম সেন্সর রিডিং দেখতে দেবে। এটি একটি মৌলিক IoT প্রজেক্ট যা দেখায় কিভাবে সেন্সরের শারীরিক জগৎকে ওয়েব ইন্টারফেসের ডিজিটাল জগতের সাথে সংযুক্ত করা যায়।
এখানে আপনি যে দক্ষতাগুলি শিখবেন তা অত্যন্ত স্থানান্তরযোগ্য। এই নির্দিষ্ট সেটআপটি বিভিন্ন ব্যবহারিক প্রয়োগের জন্য অভিযোজিত করা যেতে পারে, যার মধ্যে রয়েছে:
- সর্বোত্তম ক্রমবর্ধমান অবস্থা নিশ্চিত করতে একটি গ্রিনহাউস বা বাগানের জন্য একটি দূরবর্তী মনিটরিং স্টেশন তৈরি করা।
- একটি নির্দিষ্ট ঘরের জলবায়ু পর্যবেক্ষণের জন্য একটি সাধারণ হোম অটোমেশন সিস্টেম তৈরি করা, যেমন একটি ওয়াইন সেলার বা একটি শিশুর নার্সারি।
- স্কুলের বিজ্ঞান প্রজেক্টের জন্য একটি কম খরচের পরিবেশগত ডেটা লগার সেট আপ করা।
- একটি মৌলিক নিরাপত্তা বা সতর্কতা সিস্টেম তৈরি করা যা আপনাকে হঠাৎ তাপমাত্রা পরিবর্তন সম্পর্কে অবহিত করতে পারে।
হার্ডওয়্যার এবং উপাদানসমূহ
এই প্রজেক্টটি অনুসরণ করতে, আপনার নিম্নলিখিত উপাদানগুলির প্রয়োজন হবে। প্রাথমিক উপাদানগুলি হল ESP8266 মডিউল এবং DHT11 সেন্সর, তবে বাকিগুলি মডিউলটি প্রোগ্রামিং এবং পাওয়ারিংয়ের জন্য অপরিহার্য।
- ESP8266 (ESP-01S) মডিউল: অন্তর্নির্মিত Wi-Fi ক্ষমতা সহ মূল মাইক্রোকন্ট্রোলার।
- DHT11 তাপমাত্রা এবং আর্দ্রতা সেন্সর: সেন্সর যা পরিবেশগত ডেটা পরিমাপ করে।
- Arduino Uno বোর্ড (USB-থেকে-সিরিয়াল রূপান্তরের জন্য): এই প্রজেক্টে, মূল Arduino বোর্ডটি তার প্রসেসিং পাওয়ারের জন্য ব্যবহৃত হয় না। পরিবর্তে, এর USB-থেকে-সিরিয়াল চিপটি ESP8266 মডিউলটি প্রোগ্রাম করতে ব্যবহৃত হয়।
- 330-ওহম রোধক: প্রাথমিক LED ব্লিংক পরীক্ষার জন্য কারেন্ট সীমিত করতে ব্যবহৃত হয়।
- 1k-ওহম থেকে 10k-ওহম রোধক: DHT11 সেন্সরের ডেটা লাইনের জন্য একটি পুল-আপ রোধক।
- LED এবং জাম্পার তার: পরীক্ষার পর্যায়ে এবং সমস্ত প্রয়োজনীয় সংযোগ তৈরির জন্য।
- ব্রেডবোর্ড: সার্কিট সংযোগ তৈরি করার জন্য।
ওয়্যারিং গাইড
ওয়্যারিং প্রক্রিয়াটি ধাপে ধাপে সম্পন্ন হয়। প্রথমে, আমরা ESP-01 প্রোগ্রাম করার জন্য মৌলিক সার্কিট সেট আপ করব। এটি Arduino Uno-কে প্রোগ্রামার হিসেবে ব্যবহার করে। ভিডিওটি এই সেটআপটি স্পষ্টভাবে প্রদর্শন করে। মূল সংযোগগুলি নিম্নরূপ:
প্রোগ্রামিং মোডে প্রবেশ করতে, আপনাকে অবশ্যই IO1 (GPIO1) পিনটি গ্রাউন্ডের (GND) সাথে সংযুক্ত করতে হবে। এটি ESP8266-কে নতুন ফার্মওয়্যারের জন্য অপেক্ষা করতে বলে। প্রোগ্রামিংয়ের জন্য বাকি সংযোগগুলি হল:
- VCC (3.3V) থেকে EN (Enable): এটি মডিউলটি সক্রিয় করে।
- GND থেকে GND: সার্কিটের জন্য সাধারণ গ্রাউন্ড।
- VCC (5V) থেকে VCC (5V): প্রোগ্রামার বোর্ডে পাওয়ার দেওয়ার জন্য।
- RX (ESP) থেকে TX (Arduino): প্রোগ্রামার থেকে মডিউলে সিরিয়াল যোগাযোগের জন্য।
- TX (ESP) থেকে RX (Arduino): মডিউল থেকে প্রোগ্রামারে সিরিয়াল যোগাযোগের জন্য।
- RST (রিসেট) থেকে GND: এটি একটি অস্থায়ী সংযোগ যা প্রোগ্রামিংয়ের পরে মডিউলটি রিসেট করতে ব্যবহৃত হয়।
একবার ESP-01 প্রোগ্রাম করা হলে, সেন্সরের জন্য ওয়্যারিং সহজবোধ্য। DHT11 সেন্সরের স্থিতিশীল যোগাযোগ নিশ্চিত করতে তার ডেটা লাইনে একটি পুল-আপ রোধক প্রয়োজন।
সেন্সর সেটআপের জন্য, ওয়্যারিং নিম্নরূপ:
- DHT11 VCC (পিন 1) থেকে 3.3V: সেন্সরের জন্য পাওয়ার।
- DHT11 DATA (পিন 2) থেকে ESP-01-এর GPIO2 (IO2): সেন্সর রিডিংয়ের জন্য ডেটা লাইন। এই ডেটা লাইন এবং 3.3V পাওয়ার লাইনের মধ্যে একটি 1k-ওহম থেকে 10k-ওহম পুল-আপ রোধক সংযুক্ত করা উচিত।
- DHT11 GND (পিন 4) থেকে GND: সেন্সরের জন্য সাধারণ গ্রাউন্ড।
Arduino IDE প্রস্তুত করা
ESP8266 প্রোগ্রাম করতে, আপনাকে প্রথমে আপনার Arduino IDE-তে এর বোর্ড সাপোর্ট যোগ করতে হবে। এটি দুটি ধাপে সম্পন্ন হয়:
- বোর্ড ম্যানেজার URL যোগ করুন:
File > Preferences-এ যান। "Additional Boards Manager URLs" ফিল্ডে, নিম্নলিখিত URLটি পেস্ট করুন:http://arduino.esp8266.com/stable/package_esp8266com_index.jsonএবং "OK" ক্লিক করুন। - ESP8266 বোর্ড প্যাকেজ ইনস্টল করুন:
Tools > Board > Boards Manager...-এ নেভিগেট করুন। "esp8266" অনুসন্ধান করুন, "esp8266 by ESP8266 Community" খুঁজুন এবং "Install" ক্লিক করুন। ইনস্টলেশনের পরে, আপনিTools > Board > ESP8266 Boards > Generic ESP8266 Module-এ গিয়ে বোর্ডটি নির্বাচন করতে পারেন।
DHT সেন্সর লাইব্রেরি ইনস্টল করা
কোডটি DHT11 সেন্সরের সাথে ইন্টারফেস করার জন্য একটি লাইব্রেরির উপর নির্ভর করে। এই লাইব্রেরিটি আপনার Arduino IDE-তে ইনস্টল করা আবশ্যক।
Tools > Manage Libraries...-এ যান।- "DHT sensor library" অনুসন্ধান করুন।
- Adafruit-এর লাইব্রেরিটি খুঁজুন এবং "Install" ক্লিক করুন। এই লাইব্রেরিটি সেন্সর থেকে ডেটা পড়ার প্রক্রিয়াটি সহজ করে।
প্রজেক্ট 1: LED ব্লিংক পরীক্ষা
সেন্সর নিয়ে কাজ শুরু করার আগে, নিশ্চিত হওয়া জরুরি যে আপনি ESP-01 সফলভাবে প্রোগ্রাম করতে পারছেন। এটি ক্লাসিক "ব্লিংক" উদাহরণ দিয়ে করা হয়। ভিডিওতে কম্পাইল করা বাইনারি এক্সপোর্ট করার এবং আলাদা ব্যাচ ফাইল ব্যবহার করে ফ্ল্যাশ করার একটি প্রক্রিয়া দেখানো হয়েছে, যা নির্দিষ্ট USB-থেকে-সিরিয়াল সেটআপের জন্য একটি সমাধান। লক্ষ্য হলো অনবোর্ড LED ব্লিংক করা দেখা, যা নিশ্চিত করে যে প্রোগ্রামিং চেইন কাজ করছে। প্রোগ্রামিংয়ের পরে মডিউল চালানোর জন্য, আপনাকে IO1 এবং GND-এর মধ্যে সংযোগকারী তারটি খুলে ফেলতে হবে এবং তারপর RST পিনটি GND-এর সাথে মুহূর্তের জন্য সংযোগ করে মডিউলটি রিসেট করতে হবে।
প্রজেক্ট ২: সিরিয়াল মনিটরে DHT11 পড়া
প্রোগ্রামিং নিশ্চিত হওয়ার পরে, পরবর্তী ধাপ হলো DHT11 সেন্সর সংযোগ করা এবং এর ডেটা পড়া। এই প্রজেক্টটি Adafruit DHT সেন্সর লাইব্রেরির DHTtester উদাহরণ ব্যবহার করে। কোডটি সঠিক পিন এবং সেন্সর টাইপ ব্যবহার করার জন্য কনফিগার করা হয়েছে। এই প্রোগ্রামটি ফ্ল্যাশ করার পরে, আপনি সিরিয়াল মনিটর (9600 বাউডে সেট) খুলে তাপমাত্রা এবং আর্দ্রতার রিডিং দেখতে পারেন।
প্রজেক্ট ৩: ওয়েব সার্ভার সেটআপ করা
চূড়ান্ত প্রজেক্টটি সবকিছু একত্রিত করে। ESP8266 আপনার স্থানীয় Wi-Fi নেটওয়ার্কে সংযোগ করতে এবং একটি সাধারণ ওয়েব পৃষ্ঠা হোস্ট করার জন্য প্রোগ্রাম করা হয়েছে। এই পৃষ্ঠাটি লাইভ তাপমাত্রা এবং আর্দ্রতার রিডিং প্রদর্শন করে। কোডটি ESP8266 "HelloServer" উদাহরণের একটি পরিবর্তিত সংস্করণ। ভিডিওটি দেখায় যে একই নেটওয়ার্কের সাথে সংযুক্ত যেকোনো ডিভাইসের ওয়েব ব্রাউজারে ডিভাইসের IP ঠিকানা বা এর mDNS নাম (যেমন, robojaxDHT.local) প্রবেশ করে এই ডেটা কীভাবে অ্যাক্সেস করা যায়।
কোড ব্যাখ্যা
যেহেতু সম্পূর্ণ প্রোগ্রামটি ডাউনলোডের জন্য উপলব্ধ, এই বিভাগটি মূল ব্যবহারকারী-কনফিগারযোগ্য ভেরিয়েবলগুলির উপর ফোকাস করে যা আপনাকে আপনার নিজস্ব নেটওয়ার্ক এবং পছন্দ অনুযায়ী সামঞ্জস্য করতে হবে। কোডটি ESP8266 "HelloServer" উদাহরণের একটি পরিবর্তিত সংস্করণ। মূল লজিকটি সেন্সর পড়া এবং ডেটা প্রদর্শনের জন্য একটি HTML পৃষ্ঠা ফর্ম্যাট করার সাথে জড়িত।
এখানে কোডের গুরুত্বপূর্ণ অংশগুলি যা আপনাকে পরিবর্তন করতে হবে:
// Wi-Fi credentials - YOU MUST CHANGE THESE
const char* ssid = "YourWiFiSSID"; // Replace with your Wi-Fi network name
const char* password = "YourWiFiPassword"; // Replace with your Wi-Fi password
এটি পরিবর্তন করার সবচেয়ে গুরুত্বপূর্ণ অংশ। ssid এবং password ভেরিয়েবলগুলি অবশ্যই আপনার স্থানীয় Wi-Fi নেটওয়ার্কের সাথে হুবহু মিলতে হবে। Wi-Fi নামটি কেস-সংবেদনশীল, তাই নিশ্চিত করুন যে আপনি এটি সঠিকভাবে প্রবেশ করেছেন।
// DHT11 sensor configuration
#define DHTPIN 2 // Digital pin connected to the DHT sensor (GPIO2)
#define DHTTYPE DHT11 // DHT 11 sensor type
এই সংজ্ঞাগুলি সেন্সর সেটআপ করে। DHTPIN হলো ESP8266-এর GPIO পিন যার সাথে সেন্সরের ডেটা লাইন সংযুক্ত (এই গাইডে এটি GPIO2)। DHTTYPE নির্দিষ্ট সেন্সর মডেল সংজ্ঞায়িত করে। আপনি যদি DHT22 সেন্সর ব্যবহার করতেন, তাহলে আপনাকে DHT22-এর জন্য লাইনটি আনকমেন্ট করতে হবে এবং DHT11-এর জন্য লাইনটি কমেন্ট করতে হবে।
// Configurable variables
const long interval = 3000; // milliseconds between sensor readings
char temperature[] = "00.0";
char humidity[] = "00.0";
interval ভেরিয়েবল নিয়ন্ত্রণ করে কত ঘন ঘন সেন্সর পড়া হয় এবং ওয়েব পৃষ্ঠাটি আপডেট হয়। ডিফল্ট হলো 3000 মিলিসেকেন্ড (৩ সেকেন্ড)। আপনি আপডেটের ফ্রিকোয়েন্সি কমাতে এটি 5000 বা 10000-এর মতো উচ্চ মানে বাড়াতে পারেন।
কোডটিতে একটি ফাংশনও রয়েছে যা তাপমাত্রা রিডিং ফর্ম্যাট করে। আপনি sendTemperature() ফাংশনের লজিক পরিবর্তন করে তাপমাত্রা সেলসিয়াস বা ফারেনহাইটে প্রদর্শন করতে বেছে নিতে পারেন। ভিডিওটি ব্যাখ্যা করে যে Tvalue ভেরিয়েবলটি সেলসিয়াস রিডিং ধারণ করার জন্য সেট করা হয়েছে, তবে আপনি এটি পরিবর্তন করে ফারেনহাইট ভেরিয়েবল F ব্যবহার করতে পারেন।
লাইভ প্রজেক্ট প্রদর্শন
ভিডিওতে, সম্পূর্ণ প্রজেক্টটি প্রদর্শিত হয়েছে। কোডটি ফ্ল্যাশ করার এবং মডিউলটি রিসেট করার পরে, এটি Wi-Fi নেটওয়ার্কের সাথে সংযোগ করে। সিরিয়াল মনিটর সংযোগের অবস্থা এবং ডিভাইসের IP ঠিকানা প্রদর্শন করে। একটি ওয়েব ব্রাউজারে এই IP ঠিকানায় নেভিগেট করে, আপনি বর্তমান তাপমাত্রা এবং আর্দ্রতা দেখানো একটি সাধারণ পৃষ্ঠা দেখতে পারেন। প্রদর্শনটি দেখায় যে রিডিংগুলি রিয়েল-টাইমে আপডেট হচ্ছে। যখন DHT11 সেন্সরটি একটি হিট গান দিয়ে গরম করা হয়, তখন ওয়েব পৃষ্ঠার তাপমাত্রা রিডিং সেই অনুযায়ী বৃদ্ধি পায়। যদি সেন্সরের ডেটা তারটি সংযোগ বিচ্ছিন্ন হয়, তাহলে পৃষ্ঠাটি সেন্সর মানগুলির জন্য "None" প্রদর্শন করে, যা একটি সহায়ক সমস্যা সমাধানের বৈশিষ্ট্য।
অধ্যায়সমূহ
- [00:00] প্রজেক্টের পরিচিতি
- [01:33] ESP8266 এবং ওয়েব সার্ভার বোঝা
- [05:47] প্রোগ্রামিংয়ের জন্য ESP-01 ওয়্যারিং
- [08:51] Arduino IDE-তে ESP8266 বোর্ড সাপোর্ট ইনস্টল করা
- [11:47] প্রজেক্ট ১: ESP8266 দিয়ে LED ব্লিংক করা
- [20:28] DHT11 সেন্সর ওয়্যারিং
- [22:34] DHT সেন্সর লাইব্রেরি ইনস্টল করা
- [23:13] প্রজেক্ট ২: সিরিয়াল মনিটরে DHT11 পড়া
- [30:10] ওয়েব সার্ভার প্রজেক্টের জন্য কোড ব্যাখ্যা
- [36:14] প্রজেক্ট ৩: ওয়েব সার্ভার কোড ফ্ল্যাশ করা
- [38:42] প্রদর্শন: Wi-Fi-এর মাধ্যমে তাপমাত্রা দেখা
- [41:43] উপসংহার এবং সমস্যা সমাধান
/*
* Display temperature using DHT11, DHT22 with NodeMCU ESP8266
* over WiFi in local network on computer o mobile devices
*
* Written by Ahmad Shamshiri on Sep 27, 2019
* in Ajax, Ontario, Canada
* Watch video instruciton for this video: https://youtu.be/1A4-6hDARQc
*
* 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
* Download and resource page https://robojax.com/RJT614
*
Get this code and other Arduono codes from Robojax.com
* Code is available at https://robojax.com/RJT614
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int refresh=3;//3 seconds
// DHT settings starts
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
float tValue, hValue;//
char *simipleName="robojaxDHT";//android
// ****** DHT settings end (Robojax.com )
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#ifndef STASSID
#define STASSID "Robojax" // Your WiFi SSID
#define STAPSK "100%Right" //Your WiFi password
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
void sendTemp() {
String page = "<!DOCTYPE html>";
page +=" <meta http-equiv='refresh' content='";
page += String(refresh);// how often temperature is read
page +="'/>";
page +="<html dir=\"rtl\">";
page +="<body>";
page +="<h1>رطوبت و حرارت توسط دی اچ تی</h1>";
page +="<p style=\"font-size:150px;\">حرارت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(tValue, 2);
page +="°C</p>";
page +="<p style=\"font-size:150px;\">رطوبت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(hValue, 2);
page +="%</p>";
page +="</body>";
page +="</html>";
server.send(200, "text/html",page);
}
void handleNotFound() {
String message = "File Not Found";
message += "URI: ";
message += server.uri();
message += "Method: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "Arguments: ";
message += server.args();
message += "";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "";
}
server.send(404, "text/plain", message);
}
void setup(void) {
// Robojax.com code for ESP8266 and DHT11 DHT22
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(".");
}
if (WiFi.status() == WL_CONNECTED)
{
uint8_t macAddr[6];
WiFi.macAddress(macAddr);
Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin(simipleName)) {
Serial.print("or view http://");
Serial.println(simipleName);
}
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 ESP8266 and DHT11 DHT22
server.handleClient();
MDNS.update();//multicast DNS
float c = dht.readTemperature();// Read temperature as Celsius (the default)
float h = dht.readHumidity();// Reading humidity
float f = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
Serial.print(c);
Serial.println(F("°C "));
tValue =c;//save temperature for display
hValue =h;//save humidity for display
delay(300);// change this to larger value (1000 or more) if you don't need very often reading
// Robojax.com code for ESP8266 and DHT11 DHT22
}
Common Course Links
Common Course Files
সম্পদ ও রেফারেন্সসমূহ
এখনো কোনো সম্পদ নেই।
ফাইলসমূহ📁
আর্ডুইনো কোড (.ino)
-
ESP8266_ESP1_DHT111 codes for Lesson 31 of Sunfounder's 3-in-1
ESP8266_ESP1_DHT111_all.zip9.31 MB
ফ্রিটজিং ফাইল
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
ব্যবহারকারীর ম্যানুয়াল
-
DHT11 ব্যবহারকারীর ম্যানুয়াল
robojax-DHT11_manual.pdf0.82 MB