ESP8266 UDP SERVER

ارتباط بین دو ماژول ESP8266 از طریق پروتکل UDP

محتوا

ارتباط بین دو ماژول ESP8266 از طریق پروتکل UDP

به در خواست دوستان این بار آموزش ارتباط بین دو ماژول ESP8266 سری 01 رو اینجا قرار دادم ارسال و دریافت به صورت TEXT (متن) و از طریق پروتکل UDP می باشد یکی از ماژول ها به عنوان اکسس پوینت تعریف شده و یک LED به پایه GPIO2 وصل کردم و یکی دیگه رو به عنوان استیشن تعریف و هر 3 ثانیه یک بار رشته “1111” و “0000” رو ارسال می کند در نتیجه LED هر سه ثانیه روشن و سه ثانیه بعد دوباره خاموش می شود از اینجا کدها رو می تونید دانلود کنید ، دقت کنید که برای این پروژه از سری 01 استفاده شده که در صورت تمایل می تونید از دیگر سری ها هم استفاده کنید.

نمونه کد سمت اکسس پوینت در ماژول ESP8266

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

const char* ssid = "Turbodigital";
const char* pass = "123456789";    

unsigned int localPort = 12345;     
byte packetBuffer[512];
WiFiUDP Udp;

void printWifiStatus() {
  IPAddress ip = WiFi.softAPIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
}

void setup(){
  Serial.begin(115200);
  WiFi.disconnect();
  pinMode(2,OUTPUT);
  digitalWrite(2,0);
  WiFi.softAP(ssid,pass);
  WiFi.mode(WIFI_AP);
  
  Udp.begin(localPort);
  Serial.println();
  printWifiStatus();
}

void loop(){
  int noBytes = Udp.parsePacket();
  String received_command = "";
 
  if ( noBytes ) {
    Udp.read(packetBuffer,noBytes);
    for (int i=1;i<=noBytes;i++)
    {
      received_command += char(packetBuffer[i - 1]);
    } 
    Serial.println(received_command);
    if (received_command == "1111"){
      digitalWrite(2,1);
    }

    if (received_command == "0000"){
      digitalWrite(2,0);
    }
  }
  delay(10);
}



خط 1 و 2 کتابخانه های مورد نظر نیاز اضاف شده – خط 4 و 5 اسم و رمز اکسس پوینت تعریف شده – خط 7 و 8 و 9 پارامترهای مورد نیاز تعریف شده – خط 22 و 23 ماژول در حالت اکسس پوینت راه اندازی شده است – خط 25 UDP Server با پورت 12345 شروع می شود که در تابع Loop داده ها رو از طریق پروتکل UDP می خواد.

نمونه کد سمت استیشن در ماژول ESP8266

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>

const char* ssid = "Turbodigital";
const char* pass = "123456789";    

unsigned int localPort = 12346;     
WiFiUDP Udp;

void printWifiStatus() {
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
}

void setup(){
  Serial.begin(115200);
  WiFi.disconnect();
  Serial.println();
  Serial.println();
  WiFi.begin(ssid,pass);
  WiFi.mode(WIFI_STA);
  int tries=0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    tries++;
    if (tries > 30){
      break;
    }
  }
  Serial.println();
  printWifiStatus();
  Udp.begin(localPort);
}

void loop(){
    // Acknowlege package
    Udp.beginPacket({192,168,4,1}, 12345);
    Udp.write("1111");
    Udp.endPacket();
    delay(3000);

    Udp.beginPacket({192,168,4,1}, 12345);
    Udp.write("0000");
    Udp.endPacket();
    delay(3000);
}

 

بخش نظرات

این پست دارای 44 نظر است

  1. herorise1

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

    1. امیر امرایی

      اصلا نباید به مودم وصل بشه چون اونی که به مودم وصل نمیشه خودش به عنوان اکسس پوینت تعریف شده.
      UDP_RECIVE_ONLY_AP = اکسس پوینت
      UDP_SEND_ONLY = استیشن

      1. herorise1

        IP هم که در برنامه فرستنده وارد میشه، ip مربوط به گیرندست؟
        اگه درست باشه خب نمیدونم چرا وصل نمیشن به هم. من گوشیمو مودم تعریف کردم و ssid و pass اون رو میدم. اشتباه کردم؟ اصن نیاز هست بینشون مودم باشه

      2. امیر امرایی

        نه

  2. herorise1

    قربون شما. خیلی عالی بود. مشکلم حل شد.راستش من شماره پورت هر دو رو یکی کرده بودم 12345 شما فرستنده رو 12346 گذاشته بودید. چون فکر میکردم باید هردو یه پورت داشته باشند.
    آقای امرایی عزیز میشه پروتکل tcp رو هم برای این دو ماژول قرار بدین؟؟ بازم سپاسگزارم از زحماتتون

    1. امیر امرایی

      فردا میزارم

      1. herorise1

        داخل سایت های خارجی یه برنامه mesh network دیدم فقط نمیدونم تا چندتا نود ذو جواب میده همزمان

      2. herorise1

        استفاده کردم دوتا رو جواب داد ولی من هدفم اینه که اگه یکی از نود سرور رو ندید بتونه از نودهای کناری اطلاعاتشو به سرور بفرسته

  3. ajahangiri

    سلام بر دوستان گرامی مثل اینکه لینک دانلود کدها مشکل داره لظفا هر کدوم از دوستان داره یه جا آپ کنه.ممنون

    1. امیر امرایی

      در حال برطرف کردن این مشکل هستم
      یه کمی صبر کنید

  4. hamzeh

    با سلام و خسته نباشید من نتونستم کد رو مشاهده کنم اگه میشه برام تلگرام کنید ممنون میشم .خیلی خیلی سپاسگذارم اگر میشه دوماژول رو هم به صورت tcp/ip گد نویسی کنید ممنون میشم و اینکه با زبان بسکام….بی نهایت سپاسگذارم حمزه شماره تلگرام 09331425268

  5. hamzeh

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

    1. امیر امرایی

      مشکل برطرف شد

  6. Gholamdaei

    با سلام خدمت دوستان
    اقا بنده یه مشکلی دارم با esp8266 سری ۷ یعنیesp07!
    و اون اینه که هر دستوری بهش میفرستم همون رو بر میگردونه مثلا وقتی دستورAT رو میفرستم ماژول بجای ok دوباره AT رو برمیگردونه
    کسی میدونه مشکل چیه؟
    در ضمن wifi یش رو با گوشی میبینم و کانکت هم بهش میشه.

    1. Gholamdaei

      سلام مشکل حل شد
      ضاهرا تو مدل esp07اگه هر دو کاراکتر ۱۰ و ۱۳ که معرف cr و lf هست رو با هم اگه در انتهای هر پکت نفرستید at command ارسالی رو دوباره برمیگردونه!

      1. امیر امرایی

        Big Like

  7. m-ghanbari

    با عرض سلام خدمت مهندس عزیز
    میخواستم بدونم چطور با پروتکل udp مقادیر خوانده شده از adc رو از یک esp به یک esp دیگر بفرستیم

  8. taheriiman93@gmail.com

    سلام ببخشید 3 تا سوال داشتم.
    1- در صورتی که ماژول هایی که در مود Station قرار میگیرند را بخواهیم افزایش دهیم تا چه تعداد میشود افزایش داد.
    2-ایا می شود چند ماژول در حالت استیشن همزمان به اکسس پوینت ارسال داده کنند.
    3-ایا میشود در بعضی موارد در ماژول هایی که در حالت station قرار میگیرند را در حالت دریافت هم قرار داد؟
    با تشکر از سایت خوبتون
    امید وارم همیشه موفق باشید.

    1. امیر امرایی

      جواب سوال ۱:
      من تست نزدم ولی فکر نکنم بیشتر ۱۰ تا جواب بده , بستگی به حجم اطلاعات ارسالی و دریافتی داره
      جواب سوال ۲:
      بله
      جواب سوال ۳:
      منظور شما مد AP+STA اگه باشه باید بگم بله

  9. saeidsa

    سلام با تشکر از زحمات شما
    آیا این کد ها روی برد آردوینو آپلود میشه یا خود ماژول؟ اگه روی روی ماژول ریخته میشه چطور روی برد آپلود کنیم؟ تغییر خاصی باید تو کد داده بشه؟

  10. saeidsa

    نمیشه روی برد آردوینو آپلود کرد؟
    در واقع من میخوام دو تا برد آردوینو رو با وای فای بهم وصل کنم
    ممنون

    1. امیر امرایی

      می خواین از پین های ورودی خروجی آردوینو استفاده کنید یا ماژول خاصی رو به آردوینو وصل کنید؟
      من معمولا از خود ماژول استفاده می کنم مثل ESP-07 مگر اینکه کتابخونه که می خوام استفاده کنم رو esp جواب نده
      اونوقت از طریق پورت سریال اطلاعات رو بین برد های آردوینو جابجا می کنم یعنی در واقع ماژول های esp میشن تبدیل wifi to serial و بلعکس

  11. saeidsa

    میخوام از پین های ورودی و خروجی آردوینو استفاده کنم
    یه سری خروجی از برد دارم که به همون برد وای فای وصل کردم
    خالا یه وای فای دیگه دارم که با مبدل usb به serial به pc وصله و میخوام با دستورات at command اینی که به pc وصله رو به اونی که به برد آردوینو وصله کاننکت کنم منتها نمیشه

    1. امیر امرایی

      شما همونی رو که به pc وصله رو با آردوینو پروگرم کن بعد با pc فقط یه سری رشته برای ماژولی که به آردوینو وصل بفرست
      مقلا عدد ۱ پین شماره ۱ آردوینو رو HIGH کنه

  12. saeidsa

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

  13. مهدی

    سلام وقتتون بخیر
    میخوام با گوشی مستقیم به ماژول وصل بشم
    و خود ماژول اکسس پوینت باشه
    طفا راهنمایی کنید

    1. امیر امرایی

      WiFi.softAP(ssid,key);
      برای پیکربندی بر روی حالت اکسس پوینت

  14. مهدی

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

    1. امیر امرایی

      ارتباط با UDP است
      با نرم افزار packet sender می تونید این کار رو انجام بدید

  15. saeed

    سلام جناب امرایی . برنامه خیلی خوب و کاربردی هست . اما من میخواستم روی کد ارسالی شرط بزارم و با ورودی سریال کنترلش کنم.
    مثلا:
    void loop(){
    // Acknowlege package
    if (Serial.available()>0)
    {
    text = Serial.read();
    if (text == “saeed”)
    {
    Udp.beginPacket({192,168,4,1}, 12345);
    Udp.write(“1111”);
    Udp.endPacket();
    delay(3000);
    }

    if (text == “kave”)
    {
    Udp.beginPacket({192,168,4,1}, 12345);
    Udp.write(“0000”);
    Udp.endPacket();
    delay(3000);
    }
    }
    }
    این رو جواب نمیده و حتی اگه شرط روی پین 2 هم بزارم نمیشه.
    ممنون میشم اگه راهنماییم کنی

    1. امیر امرایی

      سلام بجای Serial.read() از Serial.readString() استفاده کنید

  16. ابوالفضل

    سلام
    ممنون از برنامتون
    مي خوام برنامه اندرويدي هم كه به اين اكسس پوينت(recive)وصل بشه و ديتا بفرسته رو بنويسم اگه در اين زمينه اطلاعات داريد ممنون ميشم راهنمايي كنيد.

    1. امیر امرایی

      با چه زبانی برنامه اندروید رو می خوای بنویسی؟

      1. ابوالفضل

        با Eclipse جاوا
        ممنون میشم اگه بشه تلفنی باهاتون تماس داشته باشم

      2. امیر امرایی

        ببخشید دیر جواب دادم
        ظاهرا مشکلی تو سایت بوده و این مدت اطلاع رسانی به من نمی
        شده
        شماره تماس رو براتون ایمیل می کنم

  17. علی

    سلام بر گل .
    میشه خط به خط برنامه رو توضیح بدی خواهش میکنم .

    1. امیر امرایی

      بله اجازه بدین آموزش رو آپدیت کنم و توضیحات رو اضاف می کنم

  18. علی

    سلام چجوری خودمون ip تعریف کنیم

    1. امیر امرایی

      یعنی آی پی استاتیک بدی؟
      اکسس پوینت یا استیشن؟

    1. امیر امرایی

      در بخش تماس با ما هست

  19. علی

    ببخشید یه سوال دیگه اموزش رو کجا گذاشتید

    1. امیر امرایی

      سلام هنوز آموزش رو آپدیت نکردم

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

×
×

سبد خرید


Notice: ob_end_flush(): Failed to send buffer of zlib output compression (0) in /home/turbodig/public_html/wp-includes/functions.php on line 5471