آردوینو آموزش آردوینو برد ESP8266 برد Nodemcu برد ویموس Wemos پروژه های آردوینو

ساخت اکسس پوینت و کلاینت در Esp8266

how-to-create-access-point-with-esp8266-digispark-
نوشته شده توسط نیلوفر مهرنیا

اکسس پوینت یا نقطه دسترسی که به‌صورت اختصاری به آن AP یا ( WAP (Wireless Access Point گفته می‌شود، این امکان را برای ما فراهم می‌کند که بتوانیم سیگنال‌ را از دستگاه‌های وایرلس مختلف دریافت یا ارسال کنیم. در این آموزش از یک Wemos D1 mini برای اکسس پوینت و از یک Nodemcu برای کلاینت استفاده شده است. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

با تعریف یک اکسس پوینت می‌توان ارتباط چندین کلاینت (مشتری) را با هم برقرار کرد و یک شبکه محلی داشت و  توسط آن به یک یا چند دستگاه، دستورات یا دیتاهایی را ارسال و دریافت کرد. در ادامه این آموزش قصد داریم روش تعریف Access Point یا همان AP و client را در برد ESP8266 یا بردهای Nodemcu یا Wemos D1 mini آموزش دهیم.  در این پروژه به دو مورد از بردهای گفته‌ شده نیاز داریم که یکی از آن‌ها را به‌ عنوان اکسس پوینت و دیگری را کلاینت در نظر می‌گیریم و از آن‌ها می‌خواهیم متن‌هایی را برای هم ارسال و در سریال مانیتور نمایش دهند.

 


کد آردوینو کلاینت


 

#include<ESP8266WiFi.h>
#include <WiFiClient.h>

char ssid[] = "mynameaccesspoint";
char pass[] = "passwordaccesspoint";

IPAddress server(192,168,1,102);

void setup() {

  Serial.begin(9600);
  WiFi.begin(ssid,pass);
  while(WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(500);
  }
  Serial.println("connected to WiFi");
  Serial.print("IP: "); Serial.println(WiFi.localIP());
  Serial.print("SSID: "); Serial.println(WiFi.SSID());  
}

void loop() {

  WiFiClient client;
  if(client.connect(server,80)){
    client.print("hello, I am client  \r");
    String answer = client.readStringUntil('\r');
    Serial.print("from server: ");
    Serial.println(answer);
    client.flush();
  }
}

 

در این قسمت،  رشته hello, I am client را به اکسس پوینت فرستاده و یک‌ رشته به نام answer که از سمت اکسس پوینت می‌آید را دریافت و چاپ می‌کند.


کد آردوینو اکسس پوینت


 

#include <ESP8266WiFi.h>
#include <WiFiClient.h>

const char* ssid = "mynameaccesspoint"; //نام دلخواه اکسس پوینت
const char* password = "passwordaccesspoint";//پسورد دلخواه

WiFiServer server(80);
IPAddress local_IP(192,168,1,102);//ip دلخواه
IPAddress subnet(255,255,255,0);

void setup(void){  
  Serial.begin(115200);
  WiFi.mode(WIFI_AP);
  Serial.print("Setting soft_AP configuration ...");
  Serial.println(WiFi.softAPConfig(local_IP,local_IP,subnet) ? "Ready" : "Failed");
  Serial.print("Setting soft_AP ...");
  Serial.println(WiFi.softAP(ssid,password) ? "Ready" : "Failed");
  server.begin();
  Serial.print("IP: " );
  Serial.println(WiFi.softAPIP());

}

void loop(void){
    WiFiClient client = server.available();
     if(!client) return ;
     String request = client.readStringUntil('\r');
     Serial.print("from client: " ); Serial.println(request);
     client.print("Hi client. I am server."); client.println("\r");
     client.flush();
     client.stop();

}

توضیحات موردنیاز در کد کامنت شده است. در این قسمت، یک ‌رشته به نام request که از سمت کلاینت می‌آید را دریافت و چاپ می‌کنیم و رشته Hi client. I am server را به کلاینت ارسال می‌کنیم. به‌این‌ترتیب به‌ سادگی ارتباط بین دو برد را برقرار شده است. به‌جای ارسال رشته می‌توان دیتا جایگزین کرد و برای مثال در برد دیگر از دیتای سنسورهایی که به برد دیگری متصل است، دسترسی داشت و استفاده کرد.

ساخت اکسس پوینت با ESP8266 - دیجی اسپارک

 

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

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک   دانشجوکیت    digispark    daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

نیلوفر مهرنیا

مهندس نرم افزار

تبادل نظر و رفع عیب با ثبت دیدگاه

۶۲ دیدگاه

  • سلام
    با تشکر از آموزش خوبتون.
    اگر دو ESP8266 یا NodeMCU دائما بهم متصل باشند و ارسال و دریافت داده داشته باشند، در دراز مدت مشکلی براشون پیش نمیاد؟ و عمر برد کوتاه نمیشه؟

    • سلام
      ممنون.
      اگر باعث داغ شدن زیاد بردها شود ممکن است در عمر آن تاثیر داشته باشد.
      فکر میکنم بهتر است به صورت عملی تست کنم، نتیجه را اطلاع می دهم.

  • سلام خسته نباشید آموزش فوق العاده ای بود
    میشه ایندفعه یه آموزش بزارید درمورد اینکه با آردوینو یچیزی بسازیم که بشه فلش رو بهش وصل کرد وبشه اطلاعات درون فلش رو از آردوینو بصورت بیسیم دریافت کرد بدون نیاز به اینترنت

    • سلام
      احتمالا در کدنویسی اشتباه کرده اید.
      لطفا کدتان را به صورت کامل، کپی و ارسال کنید تا بررسی کنم.

      • ممنونم مشکل حل شد. فقط من میخوام از اکسس پوینت به پین d1 بعنوان کلید ورودی بدم و در کلاینت در پین d1 خروجی لحظه ای بگیرم. اگه امکانش هست راهنمایی فرمایید

        • با client.print مقدار ورودی را ارسال میکنید و در کلاینت آن را به شیوه ی گفته شده دریافت و استفاده میکنید.

            • نمیدانم از پین D1 میخواهید چه چیزی را بگیرید اما هر چه هست مقدار آن را داخل متغیری مثلا به نام x میریزید و سپس با (client.print(x آن را برای کلاینت ارسال میکنید و در کلاینت به روش گفته شده آن مقدار را خوانده و هر جا که نیاز دارید استفاده میکنید.
              موفق باشید 🙂

                • دقیقا مانند زمانی است که پوش باتن و ال ای دی بر روی یک برد قرار داشته باشند.
                  میتوان اینگونه برنامه را در اکسس پوینت نوشت که وقتی کلید فشرده شد مقدار ۱ ارسال شود و وقتی فشرده نشد مقدار ۰ ارسال شود.
                  در سمت کلاینت هم میگوییم اگر مقدار خوانده شده ۱ بود ال ای دی را روشن کن و اگر صفر بود ال ای دی خاموش شود.

  • با سلام و خسته نباشید
    ماژول میتونه به صورت همزمان هم اکسس پوینت باشه و هم کلاینت ؟

    • سلام ممنونم
      اینکار را انجام نداده ام اما شنیده ام با استفاده از مود زیر میتواند هم اکسس پوینت و هم کلاینت باشد:
      WiFi.mode(WIFI_AP_STA);

  • سلام وقتی با نت ایرانسل میخام ب esp8266 وصل بشم صفحه بالا نمیاد
    ولی وقتی با مودمی که esp8266 بهش وصله به IP متصل میشم بالا میاره
    مشکل از چیه؟

  • سلام من میخوام بپرسم که میشه این ماژول های وای فای و به عنوان اکسس پوینت برنامه ریزی کرد و به مودم adsl ساده که هم خروجی lan داره هم usb وصل کرد و تبدیل مه مودم وایرلس بشه؟

  • سلام من یک سوالی داشتم
    چرا زود زود discconect میشن چون من با گوشی انجام دادم و با tcp که گوشی کلاینت بود؟؟

    • سلام مشکل قطع و وصل سریع ماژول منبع تغذیه هستش که ماژول در حالت اکسس پوینت توان بیشتری استفاده می کنه به همین خاطر باید توان مورد نیازش تامین بشه برای منم همین مشکل بوجود میومد که منبع رو از اردوینو میگرفتم در حالت کلاینت مشکلی نبود ولی قطع و وصل شدیدی در حالت اکسس پوینت وجود داشتش وقتی از منبع تغذیه جداگانه استفاده کردم این مشکل حل شدش فقط این رو هم باید درنظر بگیرید که وقتی از usb – ttl استفاده می کنید باید GND اونو با منبع تغذیه به هم وصل بکنید تکرار مییکنم فقط GND.

  • سلام اگر ۸ تابرد آردیونو داشته باشم که بخوام هرکدوم آدرس کلاینت متفاوتی روداشته باشند وبرای یک سرور بفرستم با این برنامه میشه؟

    • سلام میتواند چندین کلاینت متصل داشته باشد
      اگر با مشکل مواجه شدید خط WiFi.mode(WIFI_AP);
      را بعد از خط دستور WiFi.softAP بنویسید.
      برای شناسایی دیتاهای کلاینت ها از هم دیگر برای مثال میتوانید آنها را نام یا شماره گذاری کنید و همراه دیتا بفرستید.

      • سلام و خسته نباشید
        اونجا که به ماژول میگیم با این پورت و id به سرور وصل شو ، فقط یکی از کلاینت ها میتونه متصل بشه و تبادل اطلاعات کنه؟؟ یعنی باید این client.stop بشه تا بعدی وصل بشه و تبادل اطلاعات کنه؟؟
        چون برد سرور من فقط اطلاعات اولین کلاینتی که متصل میشه را میخونه و بقیه را نمیتونه بخونه؟
        راه حلی هست که همه بتونند تبادل اطلاعات کنند
        ممنون میشم راهنمایی کنید

        • سلام ممنونم
          بیشتر از یک کلاینت تست نشده است.
          مثال های کتابخانه ی مربوطه را مطالعه کنید.

            • احتمالا این کتابخانه این قابلیت را ندارد.
              از کتابخانه های مشابه استفاده کنید.

            • مثلا من برای اینکار از کتابخانه زیر استفاده کردم و یک کلاینت اپ اندروید و یک کلاینت که esp8266 دیگری بود را هندل کردم:
              ESP8266WebServer

  • سلام دوستان
    خسته نباشید
    ببخشید من ی دستگاه لازم دارم به اینصورت که با قطع اینترنت ی رله عمل کنه با وصل اینترنت هم همون رله قطع بشه
    همچین دستگاهی هست؟
    اگر اره اسمش چیه؟

  • سلام
    من میخام برای کامپیوترم یک وایرلس بسازم یعنی کامپیوترم رو با اتصال بیسیم به وایفای وصل کنم مثل اون قطعه های وایرلسی که تو بیرون میفروشند
    یا با ماژول ای اس پی یا هر چیز دیگه
    آیا میشه؟؟
    خیلی ممنون میشم در این مورد راهنمایی کنید

  • سلام یک سوال دیگه داشتم
    آیا سایتی دارید که درباره قفل درب اثر انگشتی آموزش داشته باشه
    میشه لینکش رو هم بدید

    • سلام
      آموزش های مربوط به این مطلب در اینترنت بسیار زیاد هستند.
      در یوتیوب هم میتوانید فیلم هایش را پیدا کنید.

  • سلام
    میخوام یه ماژول esp8266 که مثلا یه LED رو با اینترنت کنترل میکنه، رو به wifi گوشی موبایل وصل کنم. ولی توی مرحله اول نام شبکه و رمز اون رو فرضا نمیدونم. میخوام جوری باشه که توی صفحه موبایل یه صفحه بیاد و اونا رو وارد کنم بعد اینا توی ماژول ذخیره بشن برای دفعات بعدی.
    ممنون میشم راهنمایی کنید

  • سلام ممنون از توضیحات خوبتون
    چطور میتونم اتصال کاربری ک به نقطه دسترسی ماژول وصل شده رو قطع کنم؟؟

  • سلام پروژه بدون ارور اجرا میشه نام وای فای هم میاد ولی در سریال مانیتور ادرس ip نشون نمیده علت چیه؟

    • سلام
      اگر ارتباط بین این دو برد برقرار نشده است ssid و پسورد را چک کنید.
      اگر ارتباط برقرار است اما در سریال مانیتور چیزی نمایش داده نمیشود baudrate را چک کنید.

  • آیا میشه با این ماژول دیتای usb رو بین یک کامپیوتر و پرینتر رد و بدل کنیم یعنی پرینتر وایرلس بشه ؟

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

  • سلام من میخوام گوشی رو بهش وصل کنم و یک اپی دارم که به سرور دیتا بفرسته و میخوام وقتی که گوشی وصل شد LED که روی برد تعبیه شده روی حالت زن سوئیچ کنم و وقتی که یک دیتا رو به طور مدام ارسال کردم دیگه از حالت چسمک زن در بیاد و به طور مدام تا زمانی که گوشی به سرور وصل هست و دیتا میفرسته روشن باشه و پس از اون خاموش بشه باید چیکار کنم؟ اگه آموزشی در این باره هست ممنون میشم لینکش رو بفرستین!!

    • با سلام
      برای اجرای این عملیات در ماژول ESP8266 یا ESP32 (که معمولا برای اتصال به Wi-Fi و ارتباط با سرورها استفاده می‌شوند)، باید از یک کد Arduino استفاده کنید که قابلیت اتصال به Wi-Fi داشته باشد و بتواند داده‌ها را از گوشی به سرور ارسال کند. در ادامه یک نمونه برنامه ساده تقدیم شما میشود که برنامه به Wi-Fi متصل می‌شود و LED را روشن می‌کند (به عنوان نمایشگر وضعیت). سپس در حلقه loop، اگر به شبکه Wi-Fi متصل باشد (isConnected true باشد)، داده‌ها به سرور ارسال می‌شوند و LED روشن می‌ماند. اگر به شبکه متصل نباشد، LED خاموش می‌شود.
      با این رویکرد، وقتی گوشی به شبکه وصل شود، LED روشن می‌شود و داده‌ها به سرور ارسال می‌شوند. همچنین، اگر ارتباط قطع شود، LED خاموش می‌شود.
      برای ارسال داده به سرور، می‌توانید از کتابخانه‌هایی مانند HttpClient یا WiFiClient در Arduino استفاده کنید.
      #include

      const char* ssid = “نام_شبکه”;
      const char* password = “رمز_عبور”;

      bool isConnected = false;

      void setup() {
      pinMode(LED_BUILTIN, OUTPUT);
      digitalWrite(LED_BUILTIN, LOW);

      // اتصال به شبکه Wi-Fi
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.println(“Connecting to WiFi…”);
      }

      Serial.println(“Connected to WiFi”);

      // فعالسازی ارسال داده به سرور
      isConnected = true;
      }

      void loop() {
      if (isConnected) {
      // اگر گوشی وصل شده باشد
      digitalWrite(LED_BUILTIN, HIGH); // LED را روشن کن
      sendDataToServer(); // ارسال داده به سرور
      } else {
      digitalWrite(LED_BUILTIN, LOW); // LED را خاموش کن
      }
      }

      void sendDataToServer() {
      // اینجا کد ارسال داده به سرور قرار می‌گیرد
      // این تابع ممکن است بر اساس نیاز شما تغییر کند
      // مثلاً از تابعی مانند HttpClient استفاده کنید
      // برای ارسال درخواست HTTP به سرور
      }

      شاد و پیروز باشید.