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