اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

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

    سلام

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


    پیشاپیش ممنون از نظرات دوستان و وقتی که میگذارند.

    Master:
    /*
    Wireless Serial using UDP ESP8266
    Hardware: NodeMCU
    Circuits4you.com
    2018
    Master Board creates Access Point
    */
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    const char *ssid = "circuits4you";
    const char *pass = "password";
    unsigned int localPort = 2000; // local port to listen for UDP packets
    IPAddress ServerIP(192,168,4,1);
    IPAddress ClientIP(192,168,4,2);
    // A UDP instance to let us send and receive packets over UDP
    WiFiUDP udp;
    char packetBuffer[9]; //Where we get the UDP data
    //=======================================================================
    // Setup
    //=======================================================================
    void setup()
    {
    Serial.begin(9600);
    Serial.println();
    WiFi.softAP(ssid, pass); //Create Access point
    //Start UDP
    Serial.println("Starting UDP");
    udp.begin(localPort);
    Serial.print("Local port: ");
    Serial.println(udp.localPort());
    }
    //======================================================================
    // MAIN LOOP
    //======================================================================
    void loop()
    {
    int cb = udp.parsePacket();
    if (!cb)
    {
    //If serial data is recived send it to UDP
    if(Serial.available()>0)
    {
    udp.beginPacket(ClientIP, 2000);
    //Send UDP requests are to port 2000

    char a[1];
    a[0]=char(Serial.read()); //Serial Byte Read
    udp.write(a,1); //Send one byte to ESP8266
    udp.endPacket();
    }
    }
    else {
    // We've received a UDP packet, send it to serial
    udp.read(packetBuffer, 1); // read the packet into the buffer, we are reading only one byte
    Serial.print(packetBuffer);
    delay(20);
    }
    }
    //======================================================================


    Slave:
    /*
    Wireless Serial using UDP ESP8266
    Hardware: NodeMCU
    Circuits4you.com
    2018
    Slave Board connects to Access Point
    */
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    const char *ssid = "circuits4you";
    const char *pass = "password";
    unsigned int localPort = 2000; // local port to listen for UDP packets
    IPAddress ServerIP(192,168,4,1);
    IPAddress ClientIP(192,168,4,2);
    // A UDP instance to let us send and receive packets over UDP
    WiFiUDP udp;
    char packetBuffer[9]; //Where we get the UDP data
    //======================================================================
    // Setup
    //======================================================================
    void setup()
    {
    Serial.begin(9600);
    Serial.println();
    WiFi.begin(ssid, pass); //Connect to access point

    Serial.println("");
    // Wait for connection
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    //Start UDP
    Serial.println("Starting UDP");
    udp.begin(localPort);
    Serial.print("Local port: ");
    Serial.println(udp.localPort());
    }
    //======================================================================
    // MAIN LOOP
    //======================================================================
    void loop()
    {
    int cb = udp.parsePacket();
    if (!cb)
    {
    //If serial data is recived send it to UDP
    if(Serial.available()>0)
    {
    udp.beginPacket(ServerIP, 2000); //Send Data to Master unit
    //Send UDP requests are to port 2000

    char a[1];
    a[0]=char(Serial.read()); //Serial Byte Read
    udp.write(a,1); //Send one byte to ESP8266
    udp.endPacket();
    }
    }
    else {
    // We've received a UDP packet, send it to serial
    udp.read(packetBuffer, 1); // read the packet into the buffer, we are reading only one byte
    Serial.print(packetBuffer);
    delay(20);
    }
    }
    //=======================================================================


    حالت دیگه ای هم وجود داره که یه تعدادی ماژول در یک شبکه بمشترک با هم ارتباط دارن که اون هم مد نظر من نیست و کدش به صورت زیر هست:

    /*
    Wireless Serial using UDP ESP8266
    Hardware: NodeMCU
    Circuits4you.com
    2018
    UDP Broadcast multi esp to esp communication
    */
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    const char *ssid = "circuits4you.com";
    const char *pass = "password";
    unsigned int localPort = 2000; // local port to listen for UDP packets
    IPAddress SendIP(192,168,43,255); //UDP Broadcast IP data sent to all devicess on same network
    // A UDP instance to let us send and receive packets over UDP
    WiFiUDP udp;
    char packetBuffer[9]; //Where we get the UDP data
    //======================================================================
    // Setup
    //=======================================================================
    void setup()
    {
    Serial.begin(9600);
    Serial.println();
    WiFi.begin(ssid, pass); //Connect to access point

    Serial.println("");
    // Wait for connection
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    //Start UDP
    Serial.println("Starting UDP");
    udp.begin(localPort);
    Serial.print("Local port: ");
    Serial.println(udp.localPort());
    }
    //======================================================================
    // MAIN LOOP
    //======================================================================
    void loop()
    {
    int cb = udp.parsePacket();
    if (!cb)
    {
    //If serial data is recived send it to UDP
    if(Serial.available()>0)
    {
    udp.beginPacket(SendIP, 2000); //Send Data to Master unit
    //Send UDP requests are to port 2000

    char a[1];
    a[0]=char(Serial.read()); //Serial Byte Read
    udp.write(a,1); //Send one byte to ESP8266
    udp.endPacket();
    }
    }
    else {
    // We've received a UDP packet, send it to serial
    udp.read(packetBuffer, 1); // read the packet into the buffer, we are reading only one byte
    Serial.print(packetBuffer);
    delay(20);
    }
    }
    //=======================================================================

    #2
    پاسخ : ارتباط دوسویه bidirectional از طریق دو ماژول ESP8266 و پروتکل UDP

    دوستان من در این ارتباط سوالاتی رو دارم که اگر بتونید پاسخ بدید ممنون میشم :

    1. برای ارتباط دو ماژول ESP8266 که در دید هم نیستن و مکان های متفاوتی دارن و به شبکه های اینترنت کاملا مجزایی متصل هستن ، بهترین روش ارسال و دریافت اطلاعات چی هست ؟ منظور سریعترین روش هست
    2. آیا در این کیس میشه از UDP استفاده کرد؟
    3. من میخوام هر دو ماژول هم اطلاعات بفرستن و هم دریافت کنن ، متاسفانه اطلاعات شبکه ای من کافی نیست و متوجه نمیشم که برای کاری که من میخوام بکنم آیا نیاز به تعریف Access Point و کلاینت هست ، اگر دو ماژول از نظر شبکه و مکان با هم متفاوت هستن ؟
    4. میتونم با UDP همزمان دو تا مقدار رو بفرستم ؟

    یک بار دیگه صورت مساله رو اینطوری بیان میکنم که :
    دو ماژول در دو مکان مختلف داریم که ارتباطی با هم ندارن از نظر شبکه وای فای
    به هر دوی ماژول ها پتانسیومتری متصل هست و هر کدوم دارای یک عدد ثابتی هستن به اسم x , y
    ماژول ها باید مقادیر پتانسیومترشون و مقدار ثابتشون رو از طریق اینترنت و UDP برای هم ارسال کنن و همزمان روی سریال مانیتور نمایش بدن که چی ارسال میکنن .


    ممنون پیشاپیش
    جدیدترین ویرایش توسط صادق ساعی; ۱۴:۱۲ ۱۳۹۷/۰۴/۲۴.

    دیدگاه

    لطفا صبر کنید...
    X