ESP8266 কে web server এর Access Point হিসাবে ব্যবহার করা

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

সার্কিট ডায়াগ্রামঃ

using esp8266 as access point of web server - circuit diagram

কানেকশন চার্টঃ

ESP8266 NodeMCU V2 DHT11 Temperature & Humidity Sensor
3V3 VCC
GND GND
D1 (GPIO 5) DOUT
using esp8266 as access point of web server - circuit diagram
চিত্রঃ বাস্তব সার্কিট

ESP8266 এর বিভিন্ন কমিউনিকেশন মোডঃ

ESP8266 মোট তিনটি মোডে কাজ করতে পারে। নিচে মোডগুলো নিয়ে আলোচনা করা হলঃ

Station mode:

সবার আগে জেনে নেওয়া যাক, ওয়াইফাই কমিউনিকেশনের ক্ষেত্রে Station অর্থ কী। Station হল এমন একটি ডিভাইস যা IEEE 802.11 প্রোটোকল অর্থ্যাৎ ওয়াইফাই ব্যবহারে সক্ষম। এটি হতে পারে একটি পিসি, ল্যাপটপ কিংবা মোবাইল ফোন। Station mode এ একটি রাউটার থাকে। ESP8266 সেই রাউটারের ওয়াইফাই নেটওয়ার্কের সাথে সংযুক্ত হয়।

station mode
চিত্রঃ Station Mode

Soft Access-point mode:

Soft Access-point mode হচ্ছে রাউটারবিহীন মোড। Access-point mode এ ESP8266 নিজেই একটি ওয়াইফাই হটস্পট হিসেবে কাজ করে। অন্যান্য ডিভাইস যেমন মোবাইল ফোন, কম্পিউটার ইত্যাদি ESP8266 এর ওয়াইফাই নেটওয়ার্কে যুক্ত হতে পারে। এই মোডে ESP8266 এর সাথে সর্বোচ্চ পাঁচটি ডিভাইস যুক্ত হতে পারে।

কখনও কখনও ESP8266 কে স্টেশন মোডে কোনো রাউটারের সাথে যুক্ত করার আগে Soft Access-point mode এ চালিত করা হয়। যখন SSID এবং পাসওয়ার্ড আগে থেকে জানা থাকে না তখন এই প্রক্রিয়া অনুসরণ করা হয়।

soft access point mode
চিত্রঃ Soft Access-point mode

Station+Soft AP mode:

Mesh network তৈরীর ক্ষেত্রে Soft AP mode ব্যবহৃত হয়। ESP8266 একই সাথে স্টেশন মোড এবং সফট এপি মোডে অপারেট করতে পারে। এই অবস্থায় ESP8266 একটি Mesh network এর Node হিসেবে কাজ করে।

tation+Soft AP mode
চিত্রঃ Station+Soft AP mode

প্রয়োজনীয় লাইব্রেরিসমূহঃ

  1. ESPAsyncTCP.h
  2. ESPAsyncWebServer.h
  3. Hash.h
  4. Adafruit_Sensor.h

এই লাইব্রেরিগুলো অবশ্যই ইন্সটল করা থাকতে হবে।

প্রোগ্রামঃ

নিচের প্রোগ্রামটি 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। যা এখন নিজেই একটি ওয়াইফাই হটস্পট হিসেবে কাজ করছে।

connecting mobile phone to esp8266

123456789 পাসওয়ার্ড দিয়ে এই নেটওয়ার্কের সাথে ফোনকে যুক্ত করুন।

connecting mobile phone to esp8266

ফোনটি ESP8266-Access-Point এর সাথে যুক্ত হয়ে যাবে।

ওয়েব সার্ভার ওপেন করাঃ

আপনার মোবাইল ফোনের ইন্টারনেট ব্রাউজার ওপেন করুন। তারপর অ্যাড্রেস বারে 192.168.4.1 লিখে ভিজিট করুন। সার্ভারে DHT11 সেন্সরের ডেটা দেখা যাবে।

ESP8266 DHT11 Server

ESP8266 DHT11 Server

সেন্সরের কানেকশনে কোনো সমস্যা থাকলে এরকম দেখা যাবে।

ESP8266 DHT11 server

TSBlog
TSBlog

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.