การพัฒนาหุ่นยนต์ที่สามารถควบคุมผ่านเครือข่าย WiFi เป็นหนึ่งในแนวทางที่น่าสนใจในโลกของการสร้างโครงการอิเล็กทรอนิกส์และหุ่นยนต์ในปัจจุบัน ในบทความนี้เราจะสร้างหุ่นยนต์โดยใช้ ESP32 ซึ่งเป็นบอร์ดที่มีความสามารถในการเชื่อมต่อ WiFi และใช้งานด้วย Arduino IDE ซึ่งเป็นแพลตฟอร์มที่ใช้กันอย่างแพร่หลายในโครงการอิเล็กทรอนิกส์ต่าง ๆ

ESP32 ได้รับความนิยมอย่างมากในการพัฒนาโปรเจกต์ IoT (Internet of Things) ด้วยความสามารถที่มากมายที่มีอยู่ในชิปเบอร์เดียว ไม่ว่าจะเป็นการเชื่อมต่อ WiFi, Bluetooth, หรือความสามารถในการประมวลผลที่มีประสิทธิภาพ นอกจากนี้ยังมีความสามารถในการสร้างเว็บเซิร์ฟเวอร์ขึ้นมาบน ESP32 ด้วยไลบรารี ESPAsyncWebServer ซึ่งเป็นไลบรารีที่ทำให้การสร้างแอปพลิเคชัน IoT ที่มีการติดต่อกับเว็บแอปพลิเคชันเป็นเรื่องง่ายและรวดเร็วมากขึ้น

ESP32 Car Controller – WIFI แอปพลิเคชั่นมือถือนี้จะแนะนำให้คุณพัฒนารถยนต์อัจฉริยะด้วยบอร์ดพัฒนา esp32 และควบคุมรถอัจฉริยะของคุณผ่านเครือข่าย WIFI


วัตถุประสงค์

  • สร้างหุ่นยนต์ที่สามารถควบคุมผ่านเครือข่าย WiFi จาก ESP32
  • เรียนรู้การใช้งาน Arduino IDE ในการโปรแกรม ESP32
  • สร้างโครงการหุ่นยนต์ที่สามารถเชื่อมต่อและควบคุมผ่านเครือข่าย WiFi

อุปกรณ์ที่ใช้

1. RB-0024 4WD Smart Robot Car Chassis Kits
2. RB-0173 DevKitC V4 ESP32 Development Board
3. RB-0272 ESP32 Expansion Board 38Pins
4. RB-0003 Motor Driver Module L298N
5. RB-0019 รางถ่าน 18650 – 2 ก้อน
6. RB-0025 เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
7. RB-0049 แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno
8. RB-0042 เพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF Rocker Switch)
9. RB-0015 Jumper (F2M) cable wire 20cm Female to Male
10. RB-0021 ถ่านชาร์จ 18650 NCR18650B 3.7v 3400mAh 2 ก้อน
11. RB-0017 Jumper (F2F) cable wire 20cm Female to Female
12. RB-0106 Micro USB Cable Wire 1m for NodeMCU



ขั้นตอนการสร้าง


1.ประกอบหุ่นยนต์และเชื่อมต่อวงจร


บัดกรีสายมอเตอร์ โดย สายสีแดงอยู่ด้านบน และ สายสีดำอยู่ด้านล่าง ทั้ง 4 ตัว



ยึดมอเตอร์เข้ากับโครงหุ่นยนต์ (ด้านล่าง)



ยึดเสา 6 ต้น สำหรับใส่โครงหุ่นยนต์ด้านบน


การต่อวงจร



ยึด Expansion Board (บอร์ดขยายขา ESP32) , โมดูลขับมอเตอร์ และ รางถ่าน เข้ากับโครงหุ่นยนต์ด้านบน



ใส่บอร์ด ESP32 เข้ากับ บอร์ดขยายขา ESP32



ต่อสายไฟ จากรางถ่าน กับ แจ๊กขั้วถ่าน โดย สายสีแดง ต่อ ผ่านสวิตช์ปิดเปิด แล้ว เสียบแจ๊กขั้วถ่าน เข้ากับ DC 6.5 – 16V ของ บอร์ดขยายขา ESP32



ใส่ถ่าน 19650 จำนนวน 2 ก้อน และ เมื่อเปิดไฟเข้า ต้องมีไฟติดทั้ง 3 บอร์ด คือ บอร์ดขยายขา ESP32 , บอร์ด ESP32 และ โมดูลขับมอเตอร์


เชื่อมต่อวงจร ระหว่าง บอร์ดขยายขา ESP32 กับ โมดูลขับมอเตอร์



เชื่อมต่อ มอเตอร์ ทั้ง 4 ตัวเข้ากับ โมดูลขับมอเตอร์ (ตรวจสอบการต่อสายและสีของสาย)


ใส่ล้อและยึดน็อตโครงหุ่นยนต์ชั้นบนกับชั้นล่างเข้าด้วยกัน


ภาพรวมการต่อหุ่นยนต์



2.ติดตั้ง Arduino IDE


สิ่งแรกคือการติดตั้ง Arduino IDE เพื่อให้คุณสามารถค้นหา Arduino IDE ใน Google

จากนั้นคุณมีสองทางเลือก

หนึ่งคือการติดตั้งเวอร์ชัน1 หรือเพื่อติดตั้งเวอร์ชัน 2

เราจะติดตั้งเวอร์ชัน 2 เพราะมีคุณสมบัติเพิ่มเติมบางอย่าง แต่ไม่ว่าคุณจะเลือกอะไรมันจะทำงานเช่นกัน ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่ง



ดาวน์โหลด Arduino IDE จากที่นี่

https://www.arduino.cc/en/software

This image has an empty alt attribute; its file name is e1-1024x573.png




กำหนดค่าให้ รองรับบอร์ด ESP32


ไปที่ File > Preferences

This image has an empty alt attribute; its file name is e2-1024x633.png


คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

This image has an empty alt attribute; its file name is e3-1024x629.png



คลิกไอคอนตัวจัดการบอร์ดที่มุมด้านซ้าย ค้นหา ESP32 และกดปุ่มติดตั้งสำหรับ esp32 โดย Espressif Systems

This image has an empty alt attribute; its file name is e4-1024x633.png


3. ทดสอบ การเคลื่อนที่ของหุ่นยนต์


การทดสอบนี้ เป็นการตรวจสอบการต่อสายต่างๆ เช่น การเชื่อมต่อสายของมอเตอร์ ทั้ง 4 ตัว รวมทั้งสายอื่นๆ ของหุ่นยนต์ที่เราสร้าง ว่าถูกต้องหรือไม่ ถ้าถูกต้องหุ่นยนต์จะดำเนินการดังนี้

คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา


และนี่คือโค้ดที่ใช้ทดสอบ

int MA1 = 27;     // Motor A1
int MA2 =  26;     // Motor A2
int PWM_A =  14;   // Speed Motor A

int MB1 =  17;     // Motor B1
int MB2 =  16;     // Motor B2
int PWM_B =  4;  // Speed Motor B

int SPEED = 255;  // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255

void setup() {

  //Setup Channel A
  pinMode(MA1, OUTPUT); //Motor A1
  pinMode(MA2, OUTPUT); //Motor A2
  pinMode(PWM_A, OUTPUT); //Speed PWM Motor A

  //Setup Channel B
  pinMode(MB1, OUTPUT);  //Motor B1
  pinMode(MB2, OUTPUT);  //Motor B2
  pinMode(PWM_B, OUTPUT); //Speed PWM Motor B
}

void loop() {


  Stop(5000);
  Forward(600);
  Stop(200);
  Backward(600);
  Stop(200);
  turnLeft(600);
  Stop(200);
  turnRight(600);


}

void Backward(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, HIGH);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Forward (int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void turnLeft(int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);
}

void turnRight(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Stop(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);

}


ลิงค์โค้ด https://lungmaker.com/code/test-motor-esp32.ino


เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP32 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย

This image has an empty alt attribute; its file name is 9-1024x768.jpg



เลือกบอร์ด ESP32 ตามรุ่นที่ใช้ เป็น ESP32 Dev Module

This image has an empty alt attribute; its file name is 4-1024x583.png



เลือก Port โดยไปที่ Tools -> Port -> COM5
(โดย COM5 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)

This image has an empty alt attribute; its file name is 5-1024x691.png



คลิกที่ Upload


This image has an empty alt attribute; its file name is image-1-1024x576.png



แสดงการ Upload สำเร็จ



This image has an empty alt attribute; its file name is image-1024x576.png




วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ ESP32

ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป


4. ติดตั้ง ไลบรารี่ ESPAsyncWebServer


เขียนโค้ด หุ่นยนต์ ESP32 ควบคุมผ่านเครือข่าย WIFI ดังนี้

#include <Arduino.h>
#ifdef ESP32
#include <WiFi.h>
#include <AsyncTCP.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#endif
#include <ESPAsyncWebServer.h>
//#include <analogWrite.h>

#define S_FORWARD 11
#define S_BACKWARD 12
#define S_LEFT 13
#define S_RIGHT 14
#define S_FORWARD_LEFT 15
#define S_FORWARD_RIGHT 16
#define S_BACKWARD_LEFT 17
#define S_BACKWARD_RIGHT 18

#define M_FORWARD 21
#define M_BACKWARD 22
#define M_LEFT 23
#define M_RIGHT 24
#define M_FORWARD_LEFT 25
#define M_FORWARD_RIGHT 26
#define M_BACKWARD_LEFT 27
#define M_BACKWARD_RIGHT 28

#define F_FORWARD 31
#define F_BACKWARD 32
#define F_LEFT 33
#define F_RIGHT 34
#define F_FORWARD_LEFT 35
#define F_FORWARD_RIGHT 36
#define F_BACKWARD_LEFT 37
#define F_BACKWARD_RIGHT 38

#define STOP 0
#define START 1

// Motor A
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;

// Motor B
int motor2Pin1 = 16;
int motor2Pin2 = 17;
int enable2Pin = 4;

// Setting PWM properties 1
const int freq1 = 30000;
const int pwmChannel = 0;
const int resolution1 = 8;
int dutyCycle = 200;

// Setting PWM properties 1
const int freq2 = 30000;
const int pwmChanne2 = 1;
const int resolution2 = 8;
int dutyCycle2 = 200;

const char* ssid     = "MyDevelopmentBoard Car";
const char* password = "12345678";

AsyncWebServer server(80);
AsyncWebSocket ws("/ws");


void setup(void)
{
  // sets the pins as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enable1Pin, OUTPUT);

  // sets the pins as outputs:
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(enable2Pin, OUTPUT);

  // configure LED PWM functionalitites
  ledcSetup(pwmChannel, freq1, resolution1);
  ledcSetup(pwmChanne2, freq2, resolution2);

  // attach the channel to the GPIO to be controlled
  ledcAttachPin(enable1Pin, pwmChannel);
  ledcAttachPin(enable2Pin, pwmChanne2);

  Serial.begin(115200);

  WiFi.softAP(ssid, password);
  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  ws.onEvent(onWebSocketEvent);
  server.addHandler(&ws);

  server.begin();
  Serial.println("HTTP server started");

}

void loop()
{
  ws.cleanupClients();
}

void rotateMotor1(int x) {
  if (x == 1) {
    Serial.println("Moving Forward");
    digitalWrite(motor1Pin1, HIGH);
    digitalWrite(motor1Pin2, LOW);
  } else if (x == -1) {
    Serial.println("Moving Backward");
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, HIGH);
  } else {
    Serial.println("STOP");
    digitalWrite(motor1Pin1, LOW);
    digitalWrite(motor1Pin2, LOW);
  }
}

void rotateMotor2(int x) {
  if (x == 1) {
    Serial.println("Moving Forward");
    digitalWrite(motor2Pin1, HIGH);
    digitalWrite(motor2Pin2, LOW);
  } else if (x == -1) {
    Serial.println("Moving Backward");
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, HIGH);
  } else {
    Serial.println("STOP");
    digitalWrite(motor2Pin1, LOW);
    digitalWrite(motor2Pin2, LOW);
  }
}

void speedControl(int motor1, int motor2) {
  ledcWrite(pwmChannel, motor1);
  ledcWrite(pwmChanne2, motor2);
}

void processCarMovement(String inputValue)
{
  Serial.printf("Got value as %s %d\n", inputValue.c_str(), inputValue.toInt());
  switch (inputValue.toInt())
  {

    case S_FORWARD:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(215, 215);
      break;

    case S_BACKWARD:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(215, 215);
      break;

    case S_LEFT:
      rotateMotor1(1);
      rotateMotor2(0);
      speedControl(215, 215);
      break;

    case S_RIGHT:
      rotateMotor1(0);
      rotateMotor2(1);
      speedControl(215, 215);
      break;

    case S_FORWARD_LEFT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(215, 170);
      break;

    case S_FORWARD_RIGHT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(170, 215);
      break;

    case S_BACKWARD_LEFT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(215, 170);
      break;

    case S_BACKWARD_RIGHT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(170, 215);
      break;


    case M_FORWARD:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(235, 235);
      break;

    case M_BACKWARD:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(235, 235);
      break;

    case M_LEFT:
      rotateMotor1(1);
      rotateMotor2(0);
      speedControl(215, 215);
      break;

    case M_RIGHT:
      rotateMotor1(0);
      rotateMotor2(1);
      speedControl(235, 235);
      break;

    case M_FORWARD_LEFT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(235, 180);
      break;

    case M_FORWARD_RIGHT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(180, 235);
      break;

    case M_BACKWARD_LEFT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(235, 180);
      break;

    case M_BACKWARD_RIGHT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(180, 235);
      break;

    case F_FORWARD:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(255, 255);
      break;

    case F_BACKWARD:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(255, 255);
      break;

    case F_LEFT:
      rotateMotor1(1);
      rotateMotor2(0);
      speedControl(255, 255);
      break;

    case F_RIGHT:
      rotateMotor1(0);
      rotateMotor2(1);
      speedControl(255, 255);
      break;

    case F_FORWARD_LEFT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(255, 180);
      break;

    case F_FORWARD_RIGHT:
      rotateMotor1(1);
      rotateMotor2(1);
      speedControl(180, 255);
      break;

    case F_BACKWARD_LEFT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(255, 180);
      break;

    case F_BACKWARD_RIGHT:
      rotateMotor1(-1);
      rotateMotor2(-1);
      speedControl(180, 255);
      break;

    case STOP:
      rotateMotor1(0);
      rotateMotor2(0);
      break;

    default:
      rotateMotor1(0);
      rotateMotor2(0);
      break;
  }
}

void onWebSocketEvent(AsyncWebSocket *server,
                      AsyncWebSocketClient *client,
                      AwsEventType type,
                      void *arg,
                      uint8_t *data,
                      size_t len)
{
  switch (type)
  {
    case WS_EVT_CONNECT:
      Serial.printf("WebSocket client #%u connected from %s\n", client->id(), client->remoteIP().toString().c_str());
      ws.text(client->id(), String("connected"));
      break;
    case WS_EVT_DISCONNECT:
      Serial.printf("WebSocket client #%u disconnected\n", client->id());
      processCarMovement("0");
      break;
    case WS_EVT_DATA:
      AwsFrameInfo *info;
      info = (AwsFrameInfo*)arg;
      if (info->final && info->index == 0 && info->len == len && info->opcode == WS_TEXT)
      {
        std::string myData = "";
        myData.assign((char *)data, len);
        processCarMovement(myData.c_str());
      }
      break;
    case WS_EVT_PONG:
    case WS_EVT_ERROR:
      break;
    default:
      break;
  }
}


ลิงค์โค้ด https://lungmaker.com/code/robot-esp32-wifi.ino



ติดตั้ง ไลบรารี่ ESPAsyncWebServer



ในการสร้างเว็บเซิร์ฟเวอร์ เราจะใช้ไลบรารี ESPAsyncWebServer ที่ให้วิธีง่ายๆ ในการสร้างเว็บเซิร์ฟเวอร์แบบอะซิงโครนัส ใช้สถาปัตยกรรมแบบ non-blocking ทำให้ไม่มีการบล็อกการทำงานของ MCU (Microcontroller Unit) ในระหว่างการรอคำขอ (request) ซึ่งทำให้ ESP32 สามารถรับและตอบสนองคำขอได้อย่างรวดเร็วและมีประสิทธิภาพ

การติดตั้ง : ไปที่ LIBARY MANAGER ค้นหา ไลบรารี่ ชื่อ ESPAsyncWebServer คลิกที่ INSTALL เพื่อทำการติดตั้ง



คลิก INSTALL ALL เพื่อติดตั้ง ไลบรารี่อื่นๆ ที่เพิ่มเติมเข้ามาด้วย



แสดงการติดตั้ง ไลบรารี่ ESPAsyncWebServer สำเร็จ



เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP32 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย



เลือกบอร์ด ESP32 ตามรุ่นที่ใช้ เป็น ESP32 Dev Module



เลือก Port โดยไปที่ Tools -> Port -> COM5
(โดย COM5 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)



คลิกที่ Upload



แสดงการ Upload สำเร็จ



5. ติดตั้ง แอปพลิเคชั่น ESP32 Car Controller – WIFI


ใช้สมาร์ทโฟนดาวน์ ระบบปฏิบัติการแอนดรอยด์ (Android) ดาวน์โหลดและติดตั้งแอพ ESP32 Car Controller – WIFI จาก Google Play Store


เปิดการเชื่อมต่อ WI-FI แล้วเลือกเชื่อมต่อ MyDevelopmentBoard Car รหัสผ่าน คือ 12345678 ตามที่เราเขียนโค้ดไว้ (สามารถเปลี่ยนได้ตามความต้องการ)



แสดงการเชื่อมต่อสำเร็จ



เปิด แอปพลิเคชั่น ESP32 Car Controller – WIFI

เลือกเปิด ลำดับที่ 2 คือ Simple Remote Plus



เลือกที่ Not Connected เพื่อให้ทำการเชื่อมต่อ



ปุ่มเปลี่ยนเป็น Connected แสดงว่าสามารถเชื่อมต่อได้แล้ว สามารถทดสอบควบคุมรถ ณ ขณะนี้แล้ว




6. ทดสอบควบคุม หุ่นยนต์ ESP32 ควบคุมผ่านเครือข่าย WIFI

วิดีโอผลลัพธ์การทำงาน หุ่นยนต์ ESP32 ควบคุมผ่านเครือข่าย WIFI

การปรับปรุงและการขยาย

  • เพิ่มเซนเซอร์: เพิ่มเซนเซอร์ต่าง ๆ เช่น เซนเซอร์ระยะทาง ultrasonic, เซนเซอร์อินฟราเรด หรือเซนเซอร์อื่น ๆ เพื่อเพิ่มความสามารถในการตรวจจับและเคลื่อนที่ของหุ่นยนต์
  • การควบคุมผ่านอินเตอร์เน็ต: สามารถเชื่อมต่อหุ่นยนต์กับเซิร์ฟเวอร์อินเตอร์เน็ตเพื่อควบคุมผ่านเว็บไซต์หรือแอพพลิเคชันพร้อมทั้งใช้งานข้อมูลที่เกี่ยวข้องอื่น ๆ จากอินเตอร์เน็ต
  • การเพิ่มความสามารถในการใช้งาน: เช่น เพิ่มการตอบสนองด้านเสียง, การตรวจจับวัตถุ, หรือการเดินตามเส้นทาง



สรุป

การใช้หุ่นยนต์ ESP32 ที่สามารถควบคุมผ่าน WiFi ด้วย Arduino IDE มีข้อดีที่น่าสนใจมากมาย:

  1. การเชื่อมต่อไร้สาย: การใช้ WiFi ในการควบคุมหุ่นยนต์ทำให้ไม่จำเป็นต้องอยู่ใกล้หุ่นยนต์หรือต่อสายผ่าน USB เพื่อควบคุม ซึ่งเพิ่มความสะดวกในการใช้งานและการควบคุมหุ่นยนต์ได้ในระยะทางไกล

  2. ความยืดหยุ่นในการเชื่อมต่อ: การใช้ WiFi ในการควบคุมหุ่นยนต์สามารถเชื่อมต่อกับเครือข่าย WiFi ที่มีอยู่และสามารถควบคุมหลายหุ่นยนต์พร้อมกันได้ในเครือข่ายเดียวกัน

  3. ความสามารถในการสื่อสาร: WiFi มีความเร็วในการสื่อสารสูง ทำให้สามารถส่งข้อมูลไป-มาระหว่างหุ่นยนต์กับอุปกรณ์ควบคุมได้อย่างรวดเร็วและมีประสิทธิภาพ

  4. การทำงานแบบเสถียร: การเชื่อมต่อผ่าน WiFi ทำให้หุ่นยนต์สามารถทำงานอย่างต่อเนื่องโดยไม่มีการหยุดพัก เนื่องจากไม่จำเป็นต้องกลับมาต่อสายหรือเปลี่ยนโหมดการเชื่อมต่อ

  5. การทดสอบและพัฒนา: การใช้ WiFi ในการควบคุมหุ่นยนต์ทำให้สามารถทดสอบและพัฒนาซอฟต์แวร์ได้อย่างรวดเร็วและสะดวก เนื่องจากสามารถอัปโหลดโปรแกรมไปยังหุ่นยนต์ผ่านเครือข่าย WiFi ได้โดยตรง

  6. ความสามารถในการสร้างและควบคุมเครือข่าย: ESP32 มีความสามารถในการเป็น Access Point หรือ Station ในเครือข่าย WiFi ทำให้สามารถสร้างเครือข่ายหรือเข้าร่วมเครือข่ายที่มีอยู่ได้ตามความต้องการ




Leave a Reply

Your email address will not be published. Required fields are marked *

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save