วันอาทิตย์ที่ 18 ตุลาคม พ.ศ. 2558

ESP8266 : UDP กับความง่ายในการส่งข้อมูลผ่าน network

 

Protocol หลากหลายที่ใช้กันอยู่ในโลกของ network เป็นรูปแบบที่ถูกกำหนดขึ้นโดยองค์กรใดๆ ให้เราทำตามมาตรฐาน จึงจะสามารถรับส่งข่าวสารกับคนอื่นได้ เช่น http (HyperText Transfer Protocol) TCP/IP (Transmission Control Protocol/ Internet Protocol)

ในส่วนของ UDP (User Datagram Protocol) เป็นการส่งข้อมูลแบบหลวมๆ มีรูปแบบที่ไม่เข้มงวดนัก การส่งข้อมูลเป็นการส่งที่ไม่สนใจว่าทางด้านรับจะได้รับหรือไม่ ไม่สนใจว่าข้อมูลที่ส่งไปถึงปลายทางครบถ้วนหรือไม่ ทำให้การส่งของมูลรวดเร็ว

UDP เหมาะกับการส่งข้อมูลแบบ streaming เช่น สัญญาณภาพ สัญญาณเสียง ที่ถึงแม้ว่าข้อมูลไม่ครบถ้วนก็ยังสามารถเห็นภาพ หรือได้ยินเสียง

ข้อดีอีกอย่างคือ ทำโปรแกรมเชื่อมต่อได้อย่างรวดเร็ว เปรียบกับการส่งข้อมูลด้วย RS232

เพื่อให้สามารถสื่อสารกันได้เข้าใจ อาจต้องสร้างจำเป็นต้องสร้างโปรโตคอลขึ้นเอง ตามชื่อของมัน

ตัวอย่างต่อไปจะเป็นการทดลองเขียนโปรแกรมใช้งานเบื้องต้นกับ ESP8266 ซึ่งน่าจะประยุกต์ใช้งานกับบอร์ด WiFi หรือ Ethernet แบบอื่นได้

ใช้ Arduino ESP (1.6.5) ในการทดสอบ สำหรับตัวอย่างแรกจะให้บอร์ดสองบอร์ดคุยกันผ่าน Serial monitor ของ IDE

#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
WiFiUDP Udp;
char packetBuffer[512];

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


  WiFi.begin("SSID","PASS");


  int dotCount = 0;
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
    if(++dotCount > 30){
      dotCount = 0;
      Serial.println();
    }
  }
  Serial.print("Connect to Wifi (");
  Serial.print(WiFi.localIP());
  Serial.println(")");
  Udp.begin(5555);
}

String sendText = "";

void loop() {
  int noBytes = Udp.parsePacket();
  if(noBytes){
    Udp.read(packetBuffer, noBytes);
    packetBuffer[noBytes] = '\0';
    Serial.print(millis() / 1000);
    Serial.print(" : ");
    Serial.println(packetBuffer);
  }

  while(Serial.available()){
    char ch = Serial.read();
    if(ch != '\n'){
      sendText += ch;
    }else{
      Serial.println(sendText);


      IPAddress ipDest(192,168,1,41);


      Udp.beginPacket(ipDest, 5555);
      Udp.print(sendText);
      Serial.print("Send status: "); Serial.println(Udp.endPacket());
      sendText = "";
    }
  }
}

ส้วนที่ทำตัวหนาไว้ต้องจัดการตามนี้

SSID กับ PASS เป็นของ Wifi Router ที่บอร์ดทั้งสองต่อเชื่อม

เมื่อเชื่อมต่อได้ จะได้รับ IP Address แนะนำให้เปิด Serial monitor ของ IDE เพื่อดูผลของการเชื่อมต่อ

เนื่องจากต้องทำการเชื่อมต่อบอร์ด 2 บอร์ด เมื่อรันครั้งแรก และได้ IP Address แล้ว ให้นำ IP Address ของบอร์ดอีกฝั่งมาใส่ที่ ipDest แล้วทำการ upload อีกที

ให้คงเปิด Serial monitor ไว้ พิมพ์ข้อความในช่อง แล้วกดปุ่ม Send ข้อความจะไปปรากฏที่อีกฝั่งหนึ่งทันที เมื่อรับข้อความแล้วจะนำไปใช้งาน ปิด เปิด หลอด LED หรืออะไรก็ว่าตามถนัด ด้วยการตีความข้อความที่ส่งไป

จะเห็นว่า มันไม่สะดวกนัก ถ้าจะต้องรู้ว่าอีกฝั่งมี IP Address อะไร ก่อนการเชื่อมต่อ สิ่งนี้มีการคิดไว้เรียบร้อยแล้ว และมีทางออกให้เราสามารถใช้งาน UDP ได้ง่ายขึ้น

ติดตามตอนต่อไป ในการเรียนรู้ UDP แบบ multicast และขั้นกว่าในการเชื่อมต่อบอร์ด โดยไม่ต้องมี WiFi router

ไม่มีความคิดเห็น:

แสดงความคิดเห็น