Access point কী?
অ্যাক্সেস পয়েন্ট হল এমন একটি ডিভাইস যা একটি ওয়্যারলেস ল্যান (WLAN) তৈরী করে।
এখনও পর্যন্ত আমরা ESP8266 এর যতগুলো প্রজেক্ট করেছি সবগুলোতেই ESP8266 একটি ওয়াইফাই রাউটারের সাথে যুক্ত হয়েছে। আজকের প্রজেক্টটি একটু ভিন্ন। আজকে আমরা ESP8266 কে একটি ওয়েব সার্ভারের এক্সেস পয়েন্ট হিসেবে ব্যবহার করব। ওয়েব সার্ভারটিতে একটি DHT11 Temperature and humidity sensor এর ডেটা দেখা যাবে। এই প্রজেক্টটি করতে কোনো ওয়াইফাই রাউটারের প্রয়োজন নেই।
এই প্রজেক্টটি থেকে আমরা শিখবঃ
- কিভাবে ESP8266 কে SOFT-AP মোডে ব্যবহার করতে হয়।
- কিভাবে ESP8266 দিয়ে একটি ওয়েব সার্ভার তৈরী করা যায়।
- DHT11 Temperature & Humidity Sensor এর সাথে ESP8266 এর সঠিক কানেকশন এবং ডেটা রিড করা।
প্রয়োজনীয় যন্ত্রপাতি | পরিমাণ | লিংক |
ESP8266 NodeMCU V2 Development Board with CP2102 | 1 | link |
Breadboard | 1 | link |
Micro USB cable | 1 | |
DHT11 Temperature & Humidity Sensor | 1 | link |
সার্কিট ডায়াগ্রামঃ
কানেকশন চার্টঃ
ESP8266 NodeMCU V2 | DHT11 Temperature & Humidity Sensor |
3V3 | VCC |
GND | GND |
D1 (GPIO 5) | DOUT |
ESP8266 এর বিভিন্ন কমিউনিকেশন মোডঃ
ESP8266 মোট তিনটি মোডে কাজ করতে পারে। নিচে মোডগুলো নিয়ে আলোচনা করা হলঃ
Station mode:
সবার আগে জেনে নেওয়া যাক, ওয়াইফাই কমিউনিকেশনের ক্ষেত্রে Station অর্থ কী। Station হল এমন একটি ডিভাইস যা IEEE 802.11 প্রোটোকল অর্থ্যাৎ ওয়াইফাই ব্যবহারে সক্ষম। এটি হতে পারে একটি পিসি, ল্যাপটপ কিংবা মোবাইল ফোন। Station mode এ একটি রাউটার থাকে। ESP8266 সেই রাউটারের ওয়াইফাই নেটওয়ার্কের সাথে সংযুক্ত হয়।
Soft Access-point mode:
Soft Access-point mode হচ্ছে রাউটারবিহীন মোড। Access-point mode এ ESP8266 নিজেই একটি ওয়াইফাই হটস্পট হিসেবে কাজ করে। অন্যান্য ডিভাইস যেমন মোবাইল ফোন, কম্পিউটার ইত্যাদি ESP8266 এর ওয়াইফাই নেটওয়ার্কে যুক্ত হতে পারে। এই মোডে ESP8266 এর সাথে সর্বোচ্চ পাঁচটি ডিভাইস যুক্ত হতে পারে।
কখনও কখনও ESP8266 কে স্টেশন মোডে কোনো রাউটারের সাথে যুক্ত করার আগে Soft Access-point mode এ চালিত করা হয়। যখন SSID এবং পাসওয়ার্ড আগে থেকে জানা থাকে না তখন এই প্রক্রিয়া অনুসরণ করা হয়।
Station+Soft AP mode:
Mesh network তৈরীর ক্ষেত্রে Soft AP mode ব্যবহৃত হয়। ESP8266 একই সাথে স্টেশন মোড এবং সফট এপি মোডে অপারেট করতে পারে। এই অবস্থায় ESP8266 একটি Mesh network এর Node হিসেবে কাজ করে।
প্রয়োজনীয় লাইব্রেরিসমূহঃ
এই লাইব্রেরিগুলো অবশ্যই ইন্সটল করা থাকতে হবে।
প্রোগ্রামঃ
নিচের প্রোগ্রামটি ESP8266 এ আপলোড করুন।
#include <Arduino.h> #include <ESP8266WiFi.h> #include <Hash.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <Adafruit_Sensor.h> #include <DHT.h> const char* ssid = "ESP8266-Access-Point"; const char* password = "123456789"; #define DHTPIN 5 // Digital pin connected to the DHT sensor #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); float t = NAN; // current temperature float h = NAN; // current humidity AsyncWebServer server(80); unsigned long previousMillis = 0; const long interval = 10000; const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; } h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } .units { font-size: 1.2rem; } .dht-labels { font-size: 1.5rem; vertical-align: middle; padding-bottom: 15px; } </style> </head> <body> <h2>ESP8266 DHT Server</h2> <p> <span class="dht-labels">Temperature</span> <span id="temperature">%TEMPERATURE%</span> <sup class="units">Deg C</sup> </p> <p> <span class="dht-labels">Humidity</span> <span id="humidity">%HUMIDITY%</span> <sup class="units">%</sup> </p> <p id="sensor-status">%STATUS%</p> </body> <script> setInterval(function () { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { document.getElementById("temperature").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperature", true); xhttp.send(); }, 10000); setInterval(function () { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { document.getElementById("humidity").innerHTML = this.responseText; } }; xhttp.open("GET", "/humidity", true); xhttp.send(); }, 10000); </script> </html> )rawliteral"; String processor(const String& var) { if (var == "TEMPERATURE") { if (isnan(t)) { return "Sensor not connected"; } else { return String(t); } } else if (var == "HUMIDITY") { if (isnan(h)) { return "Sensor not connected"; } else { return String(h); } } else if (var == "STATUS") { if (isnan(t) && isnan(h)) { return "Sensor not connected"; } else { return ""; } } return String(); } void setup() { Serial.begin(115200); dht.begin(); Serial.print("Setting AP (Access Point)..."); WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) { request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest* request) { request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest* request) { request->send_P(200, "text/plain", String(h).c_str()); }); server.begin(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; float newT = dht.readTemperature(); float newH = dht.readHumidity(); if (isnan(newT) || isnan(newH)) { Serial.println("Failed to read from DHT sensor!"); t = NAN; h = NAN; } else { t = newT; h = newH; Serial.println(t); Serial.println(h); } } }
মোবাইল ফোনকে ESP8266 এর সাথে যুক্ত করাঃ
কোড আপলোড করার পর আপনার মোবাইল ফোন দিয়ে ওয়াইফাই নেটওয়ার্ক সার্চ করুন।
ESP8266-Access-Point নামের নেটওয়ার্কটিই হল আমাদের কোড আপলোড করা ESP8266। যা এখন নিজেই একটি ওয়াইফাই হটস্পট হিসেবে কাজ করছে।
123456789 পাসওয়ার্ড দিয়ে এই নেটওয়ার্কের সাথে ফোনকে যুক্ত করুন।
ফোনটি ESP8266-Access-Point এর সাথে যুক্ত হয়ে যাবে।
ওয়েব সার্ভার ওপেন করাঃ
আপনার মোবাইল ফোনের ইন্টারনেট ব্রাউজার ওপেন করুন। তারপর অ্যাড্রেস বারে 192.168.4.1 লিখে ভিজিট করুন। সার্ভারে DHT11 সেন্সরের ডেটা দেখা যাবে।
সেন্সরের কানেকশনে কোনো সমস্যা থাকলে এরকম দেখা যাবে।