آموزش کنترل پین از طریق وب برای برد های مبنی بر ESP8266

در آموزش قبلی برای برد هایی نظیر NodeMCU، D1 Mini و Mini S1 که مبنی بر هسته ی ESP8266 هستند، صفحه ی وب ساده ای را ساختیم که مختصر اطلاعاتی را نمایش می داد. در این آموزش نیز با استفاده از یک Sketch ساده و نرم افزار Arduino این صفحه ی وب را کمی کامل تر و کاربردی تر می کنیم تا بتوان با استفاده از آن LED ماژول ESP8266 را خاموش و روشن کنیم.

 

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

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

/*

 AK ESP8266 Pin Control

*/

#include <ESP8266WiFi.h>

// تنظیمات شبکه ی خود را در این قسمت وارد کنید.

const char* ssid =      "ssid";      //نام شبکه

const char* password =  "password";  //رمز شبکه

// تعریف پین LED

int ledPin = 2; // GPIO2

// تعریف اولین مقدار به صورت پیش فرض HIGH

int value = HIGH;

WiFiServer server(80);

void setup()

{

 delay(1000);

 Serial.begin(115200);

 // تعریف پین LED به صورت خروجی

 pinMode(ledPin, OUTPUT);

 // خاموش نگه داشتن LED پس از هر بار شروع مجدد برد

 digitalWrite(ledPin, HIGH);

 // در حال برقراری ارتباط با مودم یا روتر

 WiFi.begin(ssid, password);

 // نمایش وضعیت ارتباط

 Serial.println();

 Serial.print("Connecting");

 while (WiFi.status() != WL_CONNECTED)

 {

   delay(500);

   Serial.print(".");

 }

 // نمایش ارتباط موفقیت آمیز

 Serial.println("success!");

 // نمایش ایپی برد

 Serial.print("IP Address is: ");

 Serial.println(WiFi.localIP());

 // شروع سرور

 server.begin();

 Serial.println("Server started");

}

void loop() {

 // بررسی وضعیت بازدید کننده

 WiFiClient client = server.available();

 if (!client) {

   return;

 }

  

 // منتظر ارسال فرمان بازدید کننده

 Serial.println("new client");

 while(!client.available()){

   delay(1);

 }

  

 // خواندن اولین خط درخواست بازدید کننده

 String request = client.readStringUntil('\r');

 Serial.println(request);

 client.flush();

 

 // بررسی درخواست بازدید کننده

 // چنانچه در درخواست دریافت شده مقدار /LED=ON وجود داشت

 if (request.indexOf("/LED=ON") != 1) {

   // پین خروجی و مقدار داده را LOW کن

   digitalWrite(ledPin, LOW);

   value = LOW;

 }

 // چنانچه در درخواست دریافت شده مقدار /LED=OFF وجود داشت

 if (request.indexOf("/LED=OFF") != 1){

   // پین خروجی و مقدار داده را HIGH کن

   digitalWrite(ledPin, HIGH);

   value = HIGH;

 }

 // ارسال پاسخ یا صفحه ی وب مورد نظر

 client.println("HTTP/1.1 200 OK");

 client.println("Content-Type: text/html");

 client.println("");

 client.println("<!DOCTYPE HTML>");

 client.println("<html>");

 //تنظیم نوشته در وسط صفحه

 client.println("<center>");

 // LED را روشن کن

 client.println("<a href=\"/LED=ON\">روشن کن</a> – ");

 // LED را خاموش کن

 client.println("<a href=\"/LED=OFF\">خاموش کن</a><br>");

 // ابوالفضل خزائی

 client.println("ابوالفضل خزائی");

 client.println("</center>");

 client.println("</html>");

 delay(1);

 // قطع ارتباط بازدید کننده

 Serial.println("Client disonnected");

 Serial.println("");

}