Air Freshener With ESP8266

پروژه تبدیل خوشبو کننده به اینترنت اشیا با ESP8266 (قسمت اول)

ESP8266 ماژولی است که ما در این سری از مطالب آموزشی IOT از آن استفاده می کنیم. این پروژه به دلیل حجم بالای مطالب آموزشی در شش قسمت تهیه شده است. در این پروژه یک دستگاه خوشبو کننده را مجهز به سیستم WiFi می کنیم. و برای آن رابط کاربری طراحی می کنیم که بتوان تنظیمات خود را از طریق آن انجام داد.

ESP8266

ESP8266

طبق معمول این پروژه هم با ESP8266 سری یک انجام شده است. هم ارزان تر از سری های دیگر می باشد. و هم مناسب پروژه های کوچک که نیاز به GPIO های زیاد ندارند، می باشد.

تنظیم ESP8266 در مد Access Point :

برای شروع کار در برنامه ی آردوینو مدل بورد خود را مشخص می کنیم. برای آشنایی بیشتر به مطالب قبلی مراجعه شود. بعد از آن کتابخانه ی esp8266WiFi.h را فرا خوانی می کنیم.

برای امنیت دستگاه در حالت AP، باید یک پسورد برای آن در نظر بگیریم. پس در مرحله اول یک اسم برای ماژول در نظر می گیریم، مانند تمام مودم ها که یک SSID دارند. و بعد از آن هم یک پسورد برایش در نظر می گیریم.

 

#include <ESP8266WiFi.h>

const char* ssid = "";
const char* password = "";
const char* mySSID = "SobhanIOT";
const char* passwordAP = "sobhanmovassagh";

تنظیم IP ثابت:

در مرحله ی بعد، باید یک آی پی برای ماژول در نظر بگیریم. تا از طریق آن بتوان، به ماژول، که قرار است نقش یک WebServer را داشته باشد، وصل شویم.

 

// Constant IP for APWiFi and WiFi
IPAddress ip(192, 168, 11, 22);
IPAddress gateway(192, 168, 11, 1);
IPAddress subnet(255, 255, 255, 0);

IPAddress ipWiFi(192, 168, 1, 22);
IPAddress gatewayWiFi(192, 168, 1, 249);
IPAddress subnetWiFi(255, 255, 255, 0);
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

در این مد ی که ما قرار است ESP8266  را روی آن تنظیم کنیم. هم ماژول به صورت AccessPoint عمل می کند و هم به صورت Station . یعنی هم می توان مستقیم به ESP8266 وصل شد و هم اینکه ماژول به یک WiFi وصل شود. برای همین منظور هم، ما هم یک یوزر، پسورد برای حالت Station در نظر می گیریم. و همچنین یک IP هم برای اتصال به WiFi برایش تعریف می کنیم.

WiFi.mode(WIFI_AP_STA);

برای اعمال تنظیمات در حالت AccessPoint از دستور WiFisoftAPConfig استفاده می کنیم. برای اعمال تنظیمات برای اتصال به WiFi هم از دستور WiFi.config استفاده می کنیم. دستور WiFi.softAP برای تنظیم SSID و پسورد می باشد.

 

// Start the server
  server.begin();
  Serial.println("Server started");

  //Start AP WiFi
  WiFi.softAPConfig(ip, gateway, subnet);
  WiFi.softAP(mySSID, passwordAP);
  Serial.println(WiFi.softAPIP());
//Connect to WiFi 
Serial.print(F("Connecting to "));
  Serial.println(ssid);
  Serial.print(F("With PassWord : "));
  Serial.println(password);
  WiFi.config(ipWiFi, gatewayWiFi, subnetWiFi);
  WiFi.begin(ssid, password);

در این پروژه چون به دو طریق می توان به دستگاه متصل شد، پس ممکن است، احتاجی نباشد که اصلا به WiFi متصل شود. یعنی شاید WiFi ای در آن مکان نباشد که بخواهد به آن متصل شود. برای همین این قسمت از برنامه را اضافه می کنیم تا برای مدت زمانی تلاش کند که به WiFi متصل شود. و اگر نتوانست اتصال پیدا کند به اجرای ادامه ی برنامه بپردازد. اگر به WiFi متصل شود یا نشود، با پیام های که در سریال می فرستد مارا متلع می کند.

for (int l = 0; l < 50; l++) {
    delay(500);
    Serial.print(F("."));
    if (WiFi.status() == WL_CONNECTED) {
      Serial.println(F("WiFi connected"));
      Serial.println(WiFi.localIP());
      break;
    }
  }
  if (WiFi.status() != WL_CONNECTED)
    Serial.println(F("SSID or PASSWORD is not Correct"));
}

در این قسمت ما پیامهایی که از طرف کلاینت ارسال می شود را خط به خط می خوانیم. توضیح کامل این قسمت در مطالب پیشین هم هست.

 

void loop() {

  // Check if a client has connected این قسمت تا وقتی که کلاینت چیزی ارسال نکند باعث می شود که بقیه ی برنامه اجرا نشود
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println(F("new client"));
  while (!client.available()) {
    delay(1);
  }
  //Read the first lines of POST request
  while (client.connected())
  {
    // read line by line what the client (web browser) is requesting
    if (client.available())
    {
      String line = client.readStringUntil('\r');
      Serial.print(line);
      // wait for end of client's request, that is marked with an empty line
      if (line.length() == 1 && line[0] == '\n')
      {
        break;
      }
    }
  }
  // Read the line of the POST request
  String req = client.readStringUntil('\r');
  Serial.println(req);

در ادامه فیلمی را که برای شما تهیه کردم را قرار می دهم:

 

 

دیدگاه ها :

من بات نیستم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *