โปรเจค นี้จะเป็นการนำ  WeMos TTgo ESP32 มาทำเป็น หุ่นยนต์ Robot car  และ ควบคุมด้วยแอพ Blynk 2.0 ผ่าน WiFi

บอร์ด ESP32 จากทาง WeMos เจ้าที่ทำบอร์ด ESP ออกมาอย่างหลากหลายและประสบความสำเร็จมาแล้วหลายบอร์ด และบอร์ดนี้เป็นบอร์ดที่พัฒนาเพิ่มขึ้นมาจากบอร์ดเดิม ที่นำเอา ESP32 มาลงบอร์ดและจัดขาให้เหมือนกับบอร์ด Arduino Uno ทำให้บอร์ดนี้สามารถรองรับ shield จากทางบอร์ด Arduino ได้หลายๆตัวเลยทีเดียว นอกจะใช้ shield ร่วมกันได้แล้ว ยังมีขาที่เหลือมาเพิ่มให้ได้ต่อ IO ได้มากขึ้นอีกต่างหาก และข้อดีของ ESP32 คือมี WiFi + Bluetooth ทั้งยังมีความเร็ว และ ความจำที่มากกว่า การเชื่อมต่อต่อแบบ MicroUSB และใช้ชิป USB เป็น CH340 

Blynk คืออะไร?

Blynk เป็นแพลตฟอร์มการพัฒนาแอปพลิเคชันที่ออกแบบมาเพื่อให้ผู้ใช้สามารถควบคุมอุปกรณ์ IoT ได้ โดยการใช้งานแอปพลิเคชันบนสมาร์ทโฟนหรือแท็บเล็ตของพวกเขา สิ่งที่น่าสนใจกับ Blynk คือความสามารถในการสร้างอินเตอร์เฟซผ่านการลากและวาง (drag-and-drop) ที่ใช้งานง่าย ไม่ว่าคุณจะเป็นนักพัฒนามืออาชีพหรือไม่ก็ตาม คุณสามารถสร้างแอปควบคุมอุปกรณ์ IoT ได้ในเวลาอันสั้น



คุณสมบัติและการใช้งานของ Blynk

สนับสนุนหลายแพลตฟอร์ม: Blynk สามารถใช้งานได้กับหลายแพลตฟอร์มอุปกรณ์ IoT ที่มีอินเตอร์เฟซที่สามารถทำงานร่วมกับแอปพลิเคชันได้ เช่น Arduino, Raspberry Pi, ESP32, และอุปกรณ์ IoT อื่นๆ

การสร้างอินเตอร์เฟซที่กำหนดเอง: Blynk มีเครื่องมือในการสร้างอินเตอร์เฟซที่ใช้งานง่าย คุณสามารถเพิ่มปุ่ม สวิตช์ และกราฟเพื่อควบคุมและตรวจสอบสถานะของอุปกรณ์ได้

ควบคุมผ่านอินเทอร์เฟซสมาร์ทโฟน: คุณสามารถควบคุมอุปกรณ์ IoT ของคุณจากที่ไหนก็ได้ ทั้งจากบ้าน ที่ทำงาน หรือที่ไหนก็ตามที่มีการเชื่อมต่ออินเทอร์เน็ต

หลักการทำงานของหุ่นยนต์ TTGO ESP32 ควบคุมด้วยแอป Blynk 2.0

หุ่นยนต์ TTGO ที่ใช้บอร์ด TTGO ESP32 เป็นสมองหลัก จะสามารถควบคุมทิศทางการเคลื่อนที่ผ่าน แอป Blynk 2.0 บนสมาร์ตโฟนได้ โดยมีหลักการทำงานดังนี้:

หยุด = หยุดหมุนล้อทั้งหมด

การเชื่อมต่อ Wi-Fi และเซิร์ฟเวอร์ Blynk
TTGO ESP32 จะเชื่อมต่อกับเครือข่าย Wi-Fi และทำการเชื่อมต่อกับเซิร์ฟเวอร์ของ Blynk Cloud ผ่าน Token และ Device ID ที่กำหนดไว้ในโค้ดโปรแกรม

รับคำสั่งจากแอป Blynk 2.0
เมื่อผู้ใช้กดปุ่ม (เช่น: เดินหน้า ถอยหลัง เลี้ยวซ้าย เลี้ยวขวา หรือหยุด) บนแอป Blynk 2.0
ข้อมูลจะถูกส่งผ่านทางอินเทอร์เน็ตเข้าสู่ TTGO ESP32 แบบเรียลไทม์

ประมวลผลและควบคุมมอเตอร์
TTGO ESP32 จะทำการประมวลผลข้อมูลจาก Blynk และสั่งงานโมดูลควบคุมมอเตอร์ (Motor Driver)
ให้ควบคุมล้อของหุ่นยนต์เพื่อเคลื่อนที่ตามคำสั่ง เช่น:

เดินหน้า = หมุนล้อซ้ายและขวาไปข้างหน้า

ถอยหลัง = หมุนล้อซ้ายและขวาย้อนกลับ

เลี้ยวซ้าย = หมุนเฉพาะล้อขวา

เลี้ยวขวา = หมุนเฉพาะล้อซ้าย



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

1. 2WD Smart Car Robot Chassis Kits

2. WeMos TTgo ESP32 WiFi + Bluetooth UNO D1 R32

3. Micro USB Cable Wire 1m for NodeMCU

4.  Motor Drive Module L298N

5. Jumper (M2M) cable 20cm Male to Male

6. Jumper (F2M) cable 20cm Female to Male

7. สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม.

8. รางถ่าน 18650 แบบ 2 ก้อน

9. ถ่านชาร์จ 18650 Panasonic NCR18650B 3.7v  จำนวน 2 ก้อน


ขั้นตอนการทำโปรเจค

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


เริ่มต้นด้วยการ ประกอบ 2WD Smart Car Robot Chassis Kits



ภาพรวม การประกอบ รางถ่านแบบ 18650 และ เชื่อมต่อ Motor Drive Module L298N  เข้ากับ ESP32 ตามรูป


เริ่มด้วย ใช้ สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม. ยึด รางถ่านแบบ 18650 และ เชื่อมต่อ สายสีแดง ขั้วบวก เข้าที่ เพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF )



ใช้ สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม. ยึด Motor Drive Module L298N



ใช้ จั้มเปอร์ ผู้-ผู้ สีแดง ต่อจาก สวิทช์ อีกด้าน เข้า ไฟ+ Motor Drive  และ ใช้ จั้มเปอร์ ผู้-ผู้ สีดำ ต่อจากสายสีดำ ของรางถ่าน เข้า GND ของ Motor Drive 



ใช้ จั้มเปอร์ ผู้-ผู้ สีเหลือง และ สีส้ม ต่อจาก Motor Driver ไปยัง มอเตอร์ด้านขวา ของหุ่นยนต์และ ใช้ จั้มเปอร์ ผู้-ผู้ สีน้ำเงิน และ สีเขียว ต่อจาก Motor Driver ไปยัง มอเตอร์ด้านซ้ายของหุ่นยนต์ 




การต่อมอเตอร์ ด้านล่างของหุ่นยนต์

ใช้ จั้มเปอร์ ผู้-ผู้ สีส้ม ต่อจาก ไฟ+ ของ Motor Driver เข้า ขา 5V ของ ESP32

และ ใช้ จั้มเปอร์ ผู้-ผู้ สีดำ ต่อจาก GND ของ Motor Driver เข้า ขา GND ของ ESP32



ใช้ จั้มเปอร์ ผู้-เมีย ในการเชื่อมต่อ ระหว่าง Motor Driver กับ ESP32

Driver <-> ESP32

IN1 <-> 16
IN2 <-> 17
IN3 <-> 12
IN4 <-> 13



2.ติดตั้ง Arduino IDE

ดาวน์โหลด 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. ทดสอบ การเคลื่อนที่ของหุ่นยนต์


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

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


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

int MA1 = 17;  // Motor A1
int MA2 = 16;  // Motor A2

int MB1 = 12;  // Motor B1
int MB2 = 13;  // Motor B2


void setup() {

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

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

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);

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);

  delay(time);
}

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


  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);

  delay(time);
}

ใช้สาย MicroUSB เชื่อมต่อระหว่าง คอมพิวเตอร์ กับ ESP32


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


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



คลิกที่ Upload


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



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



4: ทดสอบ เชื่อมต่อ WiFi ของ ESP32


การทดสอบว่า ESP32 เชื่อมต่อ WiFi ได้สำเร็จหรือไม่? เช่น ชื่อ WiFi และ รหัสผ่าน WiFi รวมทั้ง การทำงานของเครือข่าย WiFi โดยใช้ Arduino IDE ดังนี้:

โค้ด

#include <WiFi.h>

const char* ssid = "ชื่อเครือข่าย WiFi";       // ใส่ชื่อ WiFi ของคุณ
const char* password = "รหัสผ่าน WiFi";         // ใส่รหัสผ่าน WiFi ของคุณ

void setup() {
  Serial.begin(115200);  // เปิด Serial Monitor
  delay(1000);
  
  // เริ่มการเชื่อมต่อ WiFi
  Serial.println("Connecting to WiFi...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  // เมื่อเชื่อมต่อสำเร็จ
  Serial.println("\nWiFi connected!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // วนลูปทำงาน (ถ้าต้องการ)
}




Upload โค้ด แล้วไปที่ Tools -> Serial Monitor



กดที่ปุ่ม EN Button ที่บอร์ด ESP32


หากเชื่อมต่อสำเร็จ จะเห็นข้อความ WiFi connected! และ IP address ในตัวอย่างคือ 192.168.1.38 (ขั้นตอนตอนนี้สำเร็จแล้ว)



5. เรียนรู้การใช้งาน App Blynk เบื้องต้น





6. ใช้งานเว็บแอพพลิเคชั่น Blynk ที่คอมพิวเตอร์

Blynk เป็นแพลตฟอร์ม IoT (Internet of Things) ที่ช่วยให้คุณสร้างแอปพลิเคชันสำหรับควบคุมอุปกรณ์ดิจิตอลต่าง ๆ ผ่านเครือข่ายอินเทอร์เน็ตได้อย่างง่ายดาย นี่คือขั้นตอนพื้นฐานในการเริ่มต้นใช้งาน Blynk:

สร้างบัญชี Blynk:

ไปที่เว็บไซต์ของ Blynk (https://blynk.io/) และสร้างบัญชีผู้ใช้ใหม่
ใช้ PC คอมพิวเตอร์ แล้วเปิดเบราว์เซอร์ ไปที่ https://blynk.io/ คลิกที่ START FREE



กรอกอีเมล แล้วกด Sign Up



ระบบแจ้งให้ไปยืนยัน Email ที่ใช้สมัคร



ไปที่ Email ที่ใช้สมัคร จะมี Email ที่ส่งมาจาก Blynk เปิดเข้าไป แล้ว คลิกที่ Create Password



สร้างรหัสผ่าน -> Next



ตั้งชื่อผู้ใช้งาน -> Done



พร้อมใช้งานแล้ว



กลับไปที่ blynk.io คลิกที่ LOG IN




เข้าสู่ระบบด้วยข้อมูลบัญชี Email และ รหัสผ่าน ที่คุณสร้าง -> Log In


เลือก Developer Zone -> My Templates -> + New Template



ตั้งชื่อ ในตัวอย่างคือ ROBOT บอร์ดคือ ESP32 และเชื่อมต่อแบบ WIFI -> Done





ไปที่ Datastreams -> + New Datastreams -> Virtual Pin



NAEM = FORWARD , PIN = V1 , DATA TYPE = Integer -> Create




ไปที่ + New Datastreams -> Virtual Pin



NAME = LEFT , PIN = V2 , DATA TYPE = Integer -> Create



NAME = BACK , PIN = V3 , DATA TYPE = Integer -> Create



NAME = RIGHT , PIN = V4 , DATA TYPE = Integer -> Create



NAME = STOP , PIN = V5 , DATA TYPE = Integer -> Create


คลิก Save





ไปที่ Web Dashboard -> Edit



ที่ Widget Box ลาก Switch 5 ตัว ไปที่ส่วนแสดงผล



เลือก Switch ที่ส่วนแสดงผล ตัวบนสุด แล้วเลือกรูปเฟือง เพื่อกำหนดค่า



เลือกเป็น FORWARD(V1) – > คลิก Save







แล้ว กำหนดค่า ทุก Switch ตามรูป แล้วคลิก Save



ไปที่ Devices -> New Device



เลือก From template


TEMPLATE เลือก Template ที่เราสร้างก่อนหน้านี้ คือ ROBOT และ DEVICE NAME ตั้งชื่อเป็น ROBOT-ESP32 -> Create



ก๊อปปี้ ส่วน New Device Created (พื้นสีดำ) 3 ค่านี้ สำหรับเอาไปแก้ไขโค้ดของ Arduino



7. ติดตั้ง ไลบรารี่ Blynk ที่ Arduino IDE

เปิด Arduino IDEไปที่ เมนู Sketch → Include Library → Manage Libraries…



ค้นหา Blynk ในช่องค้นหา แล้วคลิก INSTALL



คลิก INSTALL ALL



รอจนติดตั้งสำเร็จ



8. Upload Code หุ่นยนต์ ESP32 บังคับผ่านอินเตอร์เน็ต (Blynk)


ก่อนอัพโหลดต้องแก้ไขโค้ด ส่วน Blynk Device Info here ที่ก๊อปปี้ จากส่วน New Device Created จากขั้นตอนที่ 6 โดยจะมี 3 ข้อมูล

และ แก้ไข ชื่อเครือข่าย wifi และ รหัสผ่าน จากขั้นตอนที่ 4 โดยจะมี 2 ข้อมูล

รวมจุดที่ต้องแก้ไขทั้งหมด 5 จุด




นี่คือโค้ด

 
#define BLYNK_PRINT Serial

/* Fill in information from Blynk Device Info here */
#define BLYNK_TEMPLATE_ID           "TMPxxxxxx"
#define BLYNK_TEMPLATE_NAME         "Device"
#define BLYNK_AUTH_TOKEN            "YourAuthToken"


#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Your WiFi credentials.
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";

int MA1 = 17;  // Motor A1
int MA2 = 16;  // Motor A2

int MB1 = 12;  // Motor B1
int MB2 = 13;  // Motor B2


void setup() {

  Serial.begin(9600);
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
  //Setup Channel A
  pinMode(MA1, OUTPUT);    //Motor A1
  pinMode(MA2, OUTPUT);    //Motor A2
  

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

void loop() {
  Blynk.run();
}

BLYNK_WRITE(V1) {

  Forward(200);
  
}

BLYNK_WRITE(V2) {

  turnLeft(200);
  
}


BLYNK_WRITE(V3) {

  Backward(200);
  
}

BLYNK_WRITE(V4) {

  turnRight(200);
  
}

BLYNK_WRITE(V5) {

  Stop(1);

}



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

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);
  

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  

  delay(time);
}

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

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  

  delay(time);
}

https://lungmaker.com/code/TTgo-robot-V1.ino


9.ทดสอบควบคุมผ่านทางคอมพิวเตอร์


กลับไปที่ Blynk ไปที่ Devices ที่ Status ต้องแสดง สถานะ Online



คลิกที่ ROBOT-ESP32 แล้วทดสอบการทำงาน





ควรทดสอบเลี้ยวซ้ายหรือเลี้ยวขวาเพื่อป้องกันการวิ่งชน



10. สร้างแอป Blynk ที่ สมาร์ทโฟน


เปิด Play Store จากนั้นค้นหาแอปพิเคชัน Blynk.

กดปุ่ม Install เพื่อติดตั้ง

เมื่อติดตั้งเสร็จจะได้แอปพิเคชัน Blynk. ต้องเข้าระบบด้วยบัญชี อีเมล และ รหัสผ่าน ผู้ใช้เดียวกัน กับขั้นตอนที่ 6 ด้วย







11. ทดสอบควบคุม หุ่นยนต์ TTgo ESP32 ควบคุมด้วย แอพ Blynk 2.0


วิดีโอผลลัพธ์การทำงาน หุ่นยนต์ ESP32 บังคับผ่านอินเตอร์เน็ต (Blynk)



Leave a Reply

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