آموزش Espآموزش آردوینوآموزش اینترنت اشیاپروژه های Espپروژه های اینترنت اشیا

ساخت صفحه وب برای کنترل پایه از اینترنت با ESP8266 و آردوینو

در مقاله قبلی به نام نحوه ساخت وب سرور با آردوینو و ESP8266، به اصول ساخت یک وب سرور آردوینو پرداختیم. اکنون، بیایید به یادگیری نحوه کنترل پین‌های GPIO برد آردوینو از طریق صفحه وب بپردازیم. در این آموزش، ما می خواهیم وضعیت LED را از یک صفحه وب تغییر دهیم که می توان از هر دستگاهی با اتصال به اینترنت به آن دسترسی داشت.

اما ابتدا اجازه دهید برخی از اصطلاحات ضروری را مرور کنیم:

  • وب سرور – نرم افزار، سخت افزار یا ترکیبی از هر دو که حاوی فایل های مورد نیاز برای پردازش و ارائه صفحات وب است.
  • وب کلاینت – هر دستگاهی که می تواند یک درخواست HTTP/Web را به یک وب سرور ارسال کند.
  • سرور محلی – یک وب سرور که فقط در داخل LAN شما (شبکه محلی) قابل بازدید است.
  • سرور جهانی – یک وب سرور که از طریق اینترنت WAN در هر نقطه ای از جهان قابل دسترسی است.
  • HTTP POST – یک درخواست وب که داده ها را به سرور منتقل می کند.
  • HTTP GET – یک درخواست وب که داده ها را از یک وب سرور دریافت می کند
  • پورت فرواردینگ – حالت تنظیم روتر که ترافیک را از یک پورت WAN به یک دستگاه خاص در داخل LAN شما هدایت می کند

مدار کنترل ال ای دی از اینترنت با آردوینو

با استفاده از سیم های جامپر، قطعات را مطابق شکل زیر وصل کنید:

مدار کنترل ال ای دی از اینترنت با آردوینو درست مانند قبل، ما از Arduino UNO برای برنامه ریزی ماژول ESP-01 استفاده می کنیم. برای انجام این کار، تراشه داخلی UNO را با اتصال پین RESET به GND غیرفعال می کنیم. ماژول ESP8266 را به عنوان برد در Arduino IDE تنظیم کنید. برای تنظیم ماژول ESP-01 در حالت برنامه نویسی، پایه GPIO0 را به GND وصل کنید. به طور مشابه، قبل از آپلود، پین RESET ماژول  ESP-01 را به GND متصل و جدا کنید.

برای این پروژه ما به قطعات زیر نیاز داریم:

  • آردوینو اونو
  • ماژول ESP8266 ESP-01
  • مقاومت 1 کیلو اهم
  • 2 * مقاومت 2 کیلو اهم
  • مقاومت 10 کیلو اهم
  • ال ای دی
  • برد بورد
  • سیم های جامپر
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد پروژه کنترل GPIO از طریق صفحه اینترنت

کد کامل در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را توضیح میدهیم. فقط به ESP8266WiFI.h نیاز داریم. این به همراه کتابخانه برد ESP8266 ارائه می شود، بنابراین نیازی به نصب آن نیست.

#include <ESP8266WiFi.h>

اطلاعات اتصال به مودم خانگی خود را اینجا وارد کنید.

const char* ssid = "WiFi name";
const char* password = "WiFi password";

شماره پورت وب سرور را روی 80 قرار دهید.

WiFiServer server(80);

در قسمت setup پین LED را به عنوان خروجی تنظیم کرده و آن را روی LOW مقداردهی اولیه کنید.

جالب اینجاست که LED داخلی ESP-01 به GPIO2 متصل است اما LOW فعال آن است. اگر پین GPIO2 را روی LOW تنظیم کنید، LED متصل به GPIO2 خاموش می شود در حالی که LED داخلی روشن می شود. تنظیمات سریال مانیتور انجام دهید. سریال مانیتور برای نمایش اطلاعاتی مانند آدرس IP ماژول ESP-01 استفاده می شود. همچنین به شناسایی خطاها کمک می کند.

در نهایت، راه اندازی وب سرور را با استفاده از server.begin() راه اندازی می کنیم.

void setup() 
{
  Serial.begin(115200);

  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(100);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
  Serial.print("IP: ");  Serial.println(WiFi.localIP());

server.begin();
}

سپس در قسمت loop تابع  ()server.available داریم. این تابع کلاینت های جدید را شناسایی می کند. وقتی هیچ موردی وجود ندارد دائماً مقدار false را بر میگرداند. برعکس، اگر کد یک کلاینت جدید را شناسایی کند، true میشود و به خط بعدی می رود.

WiFiClient client = server.available();
  if (!client) {
  return;
  }

سپس منتظر می ماند تا کلاینت درخواستی را ارسال کند.

  while(!client.available()){
  }

درخواست را می خواند و سپس آن را روی نمایشگر سریال چاپ می کند. تابع client.flush() مطمئن می شود که تمام کاراکترهای خروجی ارسال شده اند.

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

/LED=ON و /LED=OFF نام درخواست هایی هستند که برای روشن و خاموش کردن LED استفاده می کنیم. بعداً آنها را در کد HTML خواهیم دید.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
 int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
  digitalWrite(ledPin, HIGH);
  value = HIGH;
  } 
  if (request.indexOf("/LED=OFF") != -1){
  digitalWrite(ledPin, LOW);
  value = LOW;
  }

در نهایت یک صفحه وب با استفاده از () client.println ایجاد می کنیم.

  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); 

  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.print("LED status: "); 

  if(value == HIGH) 
  {
    client.print("ON");  
  } 
  else 
  {
    client.print("OFF");
  }
  client.println("<br><br>");
  client.println("Turn <a href=\"/LED=ON\">ON</a><br>");
  client.println("Turn <a href=\"/LED=OFF\">OFF</a><br>");
  client.println("</html>");

  Serial.println("");

در اینجا، می بینیم که چگونه درخواست ها را /LED=ON و /LED=OFF نامگذاری کردیم.

  client.println("Turn <a href=\"/LED=ON\">ON</a><br>");
  client.println("Turn <a href=\"/LED=OFF\">OFF</a><br>");

1. کد را آپلود کنید، سپس مانیتور سریال را باز کنید. گاهی اوقات مانیتور سریال داده های عجیب و غریب را نمایش می دهد و ESP-01 از اتصال خودداری می کند. یک راه حل آسان، اتصال و جدا کردن پین RESET ماژول ESP-01 به زمین است.داده های اشتباه در سریال مانیتور

2. آدرس IP داده شده را از مانیتور سریال در یک مرورگر وب که دارید وارد کنید. خط اول نشان می دهد که LED در حال حاضر روشن یا خاموش است. برای تغییر حالت آن، به سادگی روی لینک ها کلیک کنید.

کنترل ال ای دی از طریق اینترنت

در نظرات به ما اطلاع دهید که چطور این کد را اجرا کردید!

نکاتی برای عیب یابی:

  • هرگز فراموش نکنید که پین RESET ​​آردوینو را به GND وصل کنید.
  • مطمئن شوید که سرعت آپلود 115200 باشد.
  • ولتاژ مدار تقسیم کننده ولتاژ خود را بررسی کنید. باید 3.3 ولت به پین ​​RX شما بدهد.
  • اگر هنگام آپلود یک کد در ESP-01 با خطاهای مداوم مواجه می شوید، کتابخانه برد ESP8266 خود را در Boards Manager به نسخه 2.5.0 تنزل دهید.

موارد موجود در فایل : فایل سورس کامل

4 (5 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

5 نظر

  1. سلام .خسته نباشید
    داخل کد html تون ON
    این بک اسلش قبل از LED برای چیه ؟اگه نباشه چه اتفاقی می افته.
    ممنون از مطالب خوبتون

    1. سلام عزیز
      برای اضافه شدن ON به آدرس صفحه هست

  2. سلام وقت بخیر آیا امکان تغییر پس زمینه صفحه وب وجود دارد؟ ممنون میشم راهنمایی کنین خیلی ذهنم درگیرشه

    1. سلام عزیز
      بله میتوانید از کد های css استفاده کنید. دوره ESP32 و اینترنت اشیا حرفه ای برای شما مفید هست.

  3. سلام ممنون از مقاله خوبتون.
    فقط یه سوال داشتم چطور میتونم به اردوینو بگم وقتی یه نفر وارد سرور شد یه کاری رو انجام بده مثلا
    if(یه نفر وارد سرور شد){
    lcd.clear()}

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

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