Air Freshener With ESP8266

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

در ادامه ی آموزش اینترنت اشیاء و تبدیل خوشبو کننده به سیستم IOT ، به قسمت خواندن دستورات و پیام ها یی که از طرف کلاینت ارسال شده است رسیدیم. در این بخش با نحوه ی ارسال و چگونه تفکیک کردن این دستورات آشنا می شویم.

خواندن دستورات از قسمت POST توسط esp8266 :

ما چون در صفحه ای که ایجاد کرده ایم از دو تگ form استفاده کرده ایم. پس برای ما به دو طریق می تونه پیام ها و دستورات ارسال شود.

if (req.indexOf("SSID=") > 0) {
    int i = 6;
    while (req[i] != '&')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    _SSID = sVal;
    ssid = &_SSID[0];
    Serial.println(ssid);
    sVal = "";
  }
  if (req.indexOf("SSID_Pass=") > 0) {
    int i = req.indexOf("SSID_Pass=") + 10;
    while (req[i] != '\0')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    _PASSWORD = sVal;
    password = &_PASSWORD[0];
    Serial.println(password);
    sVal = "";
    flagConnectWiFi = true;
  }

در خط اول دستور if  چک می کنه و اگر کلمه ی ssid  را دید، دستورات داخل خودش را اجرا می کند. خانه ای با ایندکس 6 که همان هفتمین خانه میشود، از استرینگی که گرفته و در req است را گرفته و در متغیری ذخیره می کند. در این حلقه به ترتیب به ایندکس خانه ها اضافه کرده و به هم چسبانده و در داخل متغیر sVal  قرار می دهد. این کار را تا وقتی انجام می دهد که به کارکتر & برسد. در خط های بعدی هم که آدرس ارایه ی SSID مانرا در داخل یک متغیر ذخیره می کنیم. چون کلاسهایی که ما برای esp8266 فرا خوانی کردیم با این آدرس کار می کنند.

برای قسمت بعدی هم که SSID_Password می باشد هم به همان ترتیب عمل می کنیم.

قسمت های mode و timespray هم به همان ترتیب است. فقط با این تفاوت که استرینگ بدست آمده را باید تبدیل به Int کنیم.

در ادامه برنامه ی این قسمت را قرار می دهم:

 /////////////////////////////////////////////////////////////////////////////////////////////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);

  // Match the request
  ///////////////////////////////////////////////////////////////////////////////////////Set SSID And PassWord
  if (req.indexOf("SSID=") > 0) {
    int i = 6;
    while (req[i] != '&')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    _SSID = sVal;
    ssid = &_SSID[0];
    Serial.println(ssid);
    sVal = "";
  }
  if (req.indexOf("SSID_Pass=") > 0) {
    int i = req.indexOf("SSID_Pass=") + 10;
    while (req[i] != '\0')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    _PASSWORD = sVal;
    password = &_PASSWORD[0];
    Serial.println(password);
    sVal = "";
    flagConnectWiFi = true;
  }
  ///////////////////////////////////////////////////////////////////////////////////////set time of Spray
  if (req.indexOf("TimeSpray=") > 0) {
    int i = 11;
    while (req[i] != '&')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    val = sVal.toInt();
    Serial.println(val);
    sVal = "";
  }
  /////////////////////////////////////////////////////////////////////////////////////////Setting Mode
  if (req.indexOf("Mode=") > 0) {
    int i = 19;
    while (req[i] != '\0')
    {
      sVal += req[i];
      i++;
      delay(1);
    }
    flagLight = sVal.toInt();
    sVal = "";
  }
  switch (flagLight) {
    case 11:
      ModeOfSpray = "Working With Light";
      Serial.println(F("Mode in on Light"));
      break;
    case 22:
      ModeOfSpray = "Working With Dark";
      Serial.println(F("Mode in on Dark"));
      break;
    case 33:
      ModeOfSpray = "Working All Time";
      Serial.println(F("Mode in on AllTime"));
      break;
  }

در ادامه فیلمی را که برای شما تهیه کردم را ببینید که در آن توضیحات بیشتری هم قرار داده ام:

 

 

 

دیدگاه ها :

من بات نیستم

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

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