ارسال دستور با متد POST به سروری که با ماژول ESP8266 ایجاد کرده ایم، را بررسی می کنیم. یک برنامه ی ساده هم می نویسیم تا بیشتر با این نوع برنامه نویسی آشنا شویم.
برنامه نوشته شده برای ESP8266 در آردوینو
اول از همه ما برنامه ای را که نوشته ایم قرار می دهیم:
#include <ESP8266WiFi.h> const char* ssid = "********"; const char* password = "**********"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); // prepare GPIO0 pinMode(0, OUTPUT); digitalWrite(0, 0); // Connect to WiFi network Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); } String sVal = ""; int val; void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("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); // Match the request Serial.println("----------------------------------------------------"); for (int j=0; j<20;j++) { Serial.println((int)req[j]); } Serial.println("----------------------------------------------------"); if (req.indexOf("txt") > 0) { int i=5; while(req[i] != '\0') { sVal += req[i]; i++; delay(1); } val = sVal.toInt(); Serial.println(val); sVal=""; } // Set GPIO0 according to the request analogWrite(0, val); client.flush(); // Prepare the response String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<form method=""post"">"; s += "<input name=""txt"" type=""number"" id=""textfield"" max=""1024"" min=""0"" step=""1"">"; s += "<input type=""submit"">"; s += "</form>"; s += "GPIO is now "; s += (String)val; s += "</html>\n"; // Send the response to the client client.println(s); delay(1); Serial.println("Client disonnected"); // The client will actually be disconnected // when the function returns and 'client' object is detroyed }
برای آموزش نحوه ی اتصال به اینترنت با ESP8266 به پست های قبلی مراجعه شود.
توجه داشته باشید که در قسمت WiFi باید اسم وایفای خود و رمز مودم خود را بنویسید. در اینجا من از ESP8266 سری یک استفاده کرده ام. پایه ی صفرش را خروجی کرده و با یک مقاومت به LED وصل کردم. شما اگر از ماژول دیگری استفاده می کنید این را مد نظر قرار دهید.
توجه داشته باشید که در خود HTML لازم نیست که این علامت (“) را دوبار تکرار کنیم. ولی در برنامه نویسی به زبان سی پلاس پلاس ما باید این علامت را دوبار پشت سر هم بنویسیم. تا برنامه ارور ندهد. از دیگر علامت هایی که باید دوبار تکرار شود (//) اسلش است. یا می توانید در اول استرینگ از یک @ استفاده کنید، تا جمله را همان طور که هست قبول کند.
در ادامه فیلمی که برای شما قرار داده ام که به طور کامل به شرح این برنامه پرداخته ام.
دیدگاه ها :