در ادامه ی آموزش اینترنت اشیاء و تبدیل خوشبو کننده به سیستم 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; }
در ادامه فیلمی را که برای شما تهیه کردم را ببینید که در آن توضیحات بیشتری هم قرار داده ام:
مطلبتون خیلی خوب بود