หุ่นยนต์ ESP8266 ที่สามารถควบคุมผ่านการเชื่อมต่อ WiFi ด้วย Arduino IDE เป็นหนึ่งในเทคโนโลยีที่ท้าทายและน่าตื่นตาตื่นใจอย่างแท้จริง ด้วยความสามารถในการเชื่อมต่อกับเครือข่ายไร้สายและการควบคุมผ่านโปรแกรมที่สามารถปรับแต่งได้ตามความต้องการ ทำให้เป็นเครื่องมือที่สำคัญในโลกของ IoT (Internet of Things) ในบทความนี้ เราจะสำรวจขั้นตอนการใช้ Arduino IDE เพื่อควบคุมหุ่นยนต์ ESP8266 ผ่านการเชื่อมต่อ WiFi อย่างละเอียดและง่ายดาย
การเตรียมการ
ก่อนที่เราจะเริ่มต้นพัฒนาโปรแกรมของเรา จำเป็นต้องมีอุปกรณ์ต่อไปนี้:
- ESP8266: อุปกรณ์หุ่นยนต์ที่มีความสามารถในการเชื่อมต่อ WiFi
- Arduino IDE: เครื่องมือพัฒนาซอฟต์แวร์ที่ใช้ในการเขียนและอัปโหลดโปรแกรมไปยัง ESP8266
- USB to Serial Converter: เพื่อใช้ในการเชื่อมต่อ ESP8266 กับคอมพิวเตอร์ผ่านพอร์ต USB
- WiFi Network: เพื่อให้ ESP8266 สามารถเชื่อมต่อไปยังเครือข่าย WiFi ได้
ขั้นตอนการทำงาน
- ติดตั้ง Arduino IDE: ดาวน์โหลดและติดตั้ง Arduino IDE จากเว็บไซต์ทางการของ Arduino และตั้งค่าให้สามารถใช้งานกับ ESP8266 ได้โดยเพิ่มบอร์ด ESP8266 ลงใน Arduino IDE ผ่านเมนู Preferences > Additional Board Manager URLs และเลือกเวอร์ชันล่าสุดของ ESP8266 จาก Board Manager.
- เชื่อมต่อ ESP8266 กับ Arduino IDE: เชื่อมต่อ ESP8266 กับคอมพิวเตอร์ผ่าน USB to Serial Converter และเปิด Arduino IDE เลือกเลือกบอร์ด ESP8266 และตั้งค่าพอร์ตที่ใช้งานในเมนู Tools.
- เขียนโปรแกรม: เขียนโปรแกรมด้วยภาษา C/C++ ใน Arduino IDE เพื่อควบคุมการทำงานของ ESP8266 ตามที่ต้องการ เช่น การเคลื่อนที่ของหุ่นยนต์ การตรวจจับเซนเซอร์ หรือการประมวลผลข้อมูล
- อัปโหลดโปรแกรม: หลังจากเขียนโปรแกรมเสร็จสิ้น ให้กดปุ่มอัปโหลดเพื่ออัปโหลดโปรแกรมลงใน ESP8266 ผ่านทางพอร์ต USB และรอให้กระบวนการเสร็จสมบูรณ์
- ทดสอบและปรับแก้ไข: ทดสอบการทำงานของโปรแกรมบน ESP8266 โดยใช้ WiFi Network เพื่อควบคุมหุ่นยนต์ตามที่ต้องการ และปรับแก้ไขโปรแกรมตามความต้องการของโปรเจ็ค
อุปกรณ์ที่ใช้
1. RB-0023 2WD Smart Robot Car Chassis Kits
2. RB-0108 NodeMCU V3 CH340G Lua WIFI ESP8266 ESP-12E
3. RB-0109 NodeMcu Breadboard for NodeMCU V3
4. RB-0106 Micro USB Cable Wire 1m for NodeMCU
5. RB-0003 Motor Driver Module L298N
6. RB-0016 Jumper (F2M) cable wire 20cm Female to Male
7. RB-0017 Jumper (F2F) cable wire 20cm Female to Female
8. RB-0019 รางถ่าน 18650 – 2 ก้อน
9. RB-0021 ถ่านชาร์จ 18650 NCR18650B 3.7v 3400mAh 2 ก้อน
10. RB-0049 แจ๊กขั้วถ่าน 9 โวลต์ สำหรับ Ardiuno
11. RB-0025 4เสารองแผ่นพีซีบีโลหะแบบเหลี่ยม 8 mm
12. RB-0075 เสารองแผ่นพีซีบีแบบโลหะ ยาว 25 มม.
13. RB-0115 Blue OLED Display 0.96 inch 128X64 Module
การสร้าง หุ่นยนต์ ESP8266 บังคับ ผ่าน WIFI
1.ประกอบหุ่นยนต์และเชื่อมต่อวงจร
ยึด Breadboard เข้ากับโครงหุ่นยนต์
เสียบ บอร์ด ESP8266 V3 ลงไปที่ Breadboard
ยึด Motor Driver เข้ากับโครงหุ่นยนต์
ใช้กาวร้อน ยึดรางถ่านเข้ากับโครงหุ่นยนต์
การต่อวงจร
- ตัดแจ๊กขั้วถ่าน ด้าน 9V ออก แล้วเชื่อมต่อสายสีดำเข้ากับสายสีดำของรางถ่าน และสายสีแดงเข้ากับสวิตช์ปิดเปิด
- สายสีแดงของรางถ่านเชื่อมต่อเข้ากับสวิตช์ปิดเปิดอีกด้าน
- ใช้สาย Jumper (F2M) ผู้-เมีย สีแดง เชื่อมต่อจากสวิตช์ปิดเปิด จุดเดียวกันกับสายสีแดงของแจ๊กขั้วถ่าน ไปที่ Power Supply ของ Motor Driver
- ใช้สาย Jumper (F2M) ผู้-เมีย สีดำ เชื่อมต่อระหว่าง กราวด์ (GND) ของ Motor Driver กับ GND ของ Breadboard ESP8266
จากนั้น ใช้สาย Jumper (F2F) เมีย-เมีย เชื่อมต่อวงจร ระหว่าง Breadboard ESP8266 กับ Motor Driver ตามรูป
มี Jumper อยู่ที่ขา ENA และ ENB ของ บอร์ด Motor Driver ให้ถอดออก
เมื่อ เปิดสวิตช์ ต้องมีไฟเข้า โดยสังเกตไฟ LED สีฟ้า ที่ Breadboard ESP8266 และ ไฟ LED สีแดงที่ Motor Driver จะมีไฟติด
เชื่อมต่อสายสีแดง – ดำ เข้ากับมอเตอร์ ทั้ง 2 ตัว โดยให้สายสีแดงอยู่ด้านบน และ สายสีดำอยู่ด้านล่าง
ยึดมอเตอร์ ทั่ง 2 ตัว เข้ากับ โครงหุ่นยนต์
ยึด ล้อหน้า เข้ากับ โครงหุ่นยนต์
ภาพรวมการต่อหุ่นยนต์ ณ ขณะนี้
เชื่อมต่อ สายมอเตอร์ทั้ง 2 ด้าน เข้ากับ Motor Driver (ตรวจสอบสีของสายไฟให้ถูกต้องตามรูป)
2.ติดตั้ง Arduino IDE และการ Upload Code
สิ่งแรกคือการติดตั้ง Arduino IDE เพื่อให้คุณสามารถค้นหา Arduino IDE ใน Google
จากนั้นคุณมีสองทางเลือก
หนึ่งคือการติดตั้งเวอร์ชัน1 หรือเพื่อติดตั้งเวอร์ชัน 2
เราจะติดตั้งเวอร์ชัน 2 เพราะมีคุณสมบัติเพิ่มเติมบางอย่าง แต่ไม่ว่าคุณจะเลือกอะไรมันจะทำงานเช่นกัน ดังนั้นคุณสามารถเลือกอย่างใดอย่างหนึ่ง
ดาวน์โหลด Arduino IDE จากที่นี่
https://www.arduino.cc/en/software
กำหนดค่าให้ รองรับบอร์ด ES8266
ไปที่ File > Preferences
คัดลอกและวางบรรทัดต่อไปนี้ลงในฟิลด์ Boards Manager URLs -> OK
https://arduino.esp8266.com/stable/package_esp8266com_index.json
จากนั้นไปที่ตัวจัดการบอร์ดโดยไปที่ Tools -> Board: -> Boards Manager…
ที่ช่องค้นหา พิมพ์ esp8266 จะพบ esp8266 by ESP8266 Community แล้วคลิก INSTALL
แสดงการติดตั้งสำเร็จ
เมื่อไปที่ Tools -> Board: อีกครั้ง จะพบ บอร์ด esp8266 เพิ่มเข้ามาแล้ว
3. ทดสอบ การเคลื่อนที่ของหุ่นยนต์
การทดสอบนี้ เป็นการตรวจสอบการต่อสายต่างๆ เช่น การเชื่อมต่อสายของมอเตอร์ ทั้ง 2 ตัว รวมทั้งสายอื่นๆ ของหุ่นยนต์ที่เราสร้าง ว่าถูกต้องหรือไม่ ถ้าถูกต้องหุ่นยนต์จะดำเนินการดังนี้
คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา
และนี่คือโค้ดที่ใช้ทดสอบ
#define ENA 14 // Enable/speed motors Right GPI14(D5)
#define IN_1 0 // L298N in1 motors Right GPIO0(D3)
#define IN_2 2 // L298N in2 motors Right GPIO2(D4)
#define IN_3 12 // L298N in3 motors Left GPIO12(D6)
#define IN_4 13 // L298N in4 motors Left GPIO13(D7)
#define ENB 15 // Enable/speed motors Left GPIO15(D8)
int speedCar = 255; // 0 to 255
int speed_0 = 0;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
pinMode(ENB, OUTPUT);
}
void loop() {
goForword();
delay(1000);
goBack();
delay(1000);
goLeft();
delay(400);
goRight();
delay(400);
}
void goForword() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goBack() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goForwordRight() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goForwordLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar - speed_0);
}
void goBackRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goBackLeft() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar - speed_0);
}
void stopRobot() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
ลิงค์โค้ด https://lungmaker.com/code/test-motor-esp8266.ino
เชื่อมต่อสาย Micro USB ระหว่าง คอมพิวเตอร์ กับ ESP8266 และ ต้องเปิดสวิตช์เพื่อจ่ายไฟจากรางถ่านให้กับหุ่นยนต์ด้วย
ตรวจสอบ Port ของบอร์ด ESP8266 โดย คลิกที่ Device Manager
ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด ESP8266 ในตัวอย่างเป็น USB-SERIAL CH304 (COM4)
ไปที่ Tools -> Board -> esp8266 แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ NodeMCU ESP8266 V3 ให้เลือกบอร์ด NodeMCU 1.0 (ESP-12 Module)
เลือก Port โดยไปที่ Tools -> Port -> COM4
(โดย COM4 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
รอจนกระทั่งขึ้น hard resetting via RTS pin… ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
วิดีโอผลลัพธ์การทำงาน การเคลื่อนที่ของหุ่นยนต์ ESP8266
ถ้ายังทำงานไม่ถูกต้อง คือ เดินหน้า -> ถอยหลัง -> เลี้ยวซ้าย -> เลี้ยวขวา ให้กลับไปแก้ไขการต่อวงจร การต่อสายต่างๆ เช่น การต่อสายมอเตอร์ จนกว่าจะทำงานถูกต้อง ถึงจะสามารถไปทำงานในขั้นตอนต่อไป
4.เชื่อมต่อ OLED Display และทดสอบ
โดยใช้ เสารองแผ่นพีซีบีแบบโลหะ ยาว 25 มม. เป็นฐานและ ใช้สาย Jumper (F2F) เมีย-เมีย ในการเชื่อมต่อ
และนี่คือโค้ดที่ใช้ทดสอบ
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 10);
// Display static text
display.println("RobotSiam.com");
display.display();
}
void loop() {
}
ลิงค์โค้ด https://lungmaker.com/code/test-oled-esp8266.ino
เพิ่ม ไลบรารี่ Adafruit-GFX-Library เข้าที่ Arduino IDE
โดย ไปที่ Sketch -> Include Library -> Manage Libraries….
ค้นหา SSD1306 เลือกติดตั้ง เป็น Adafruit SSD1360 by Adafruit คลิก INSTALL
เลือก INSTALL ALL
แสดงการติดตั้งสำเร็จ
คลิกที่ Upload รอจนกระทั่งขึ้น hard resetting via RTS pin… ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
ที่จอ OLED แสดงผล RobotSiam.com แสดงว่า การต่อสายและการทำงานของเราถูกต้องแล้ว และ พร้อมที่จะทำงานในขั้นตอนต่อไป
5. ทดสอบ หุ่นยนต์ ESP8266 บังคับ ผ่าน WIFI
อัพโหลดโค้ด หุ่นยนต์ ESP8266 บังคับ ผ่าน WIFI
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
const int wifiLedPin = D0; // set digital pin D0 as indication, the LED turn on if NodeMCU connected to WiFi as STA mode
String command; // String to store app command state.
ESP8266WebServer server(80); // Create a webserver object that listens for HTTP request on port 80
unsigned long previousMillis = 0;
String sta_ssid = "Robotsiam_2.4G"; // set Wifi networks you want to connect to
String sta_password = "123456"; // set password for Wifi networks
#define ENA 14 // Enable/speed motors Right GPI14(D5)
#define IN_1 0 // L298N in1 motors Right GPIO0(D3)
#define IN_2 2 // L298N in2 motors Right GPIO2(D4)
#define IN_3 12 // L298N in3 motors Left GPIO12(D6)
#define IN_4 13 // L298N in4 motors Left GPIO13(D7)
#define ENB 15 // Enable/speed motors Left GPIO15(D8)
int speedCar = 255; // 0 to 255
int speed_0 = 0;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200); // set up Serial library at 115200 bps
Serial.println();
Serial.println("*WiFi Robot Remote Control Mode*");
Serial.println("--------------------------------------");
pinMode(wifiLedPin, OUTPUT); // sets the Wifi LED pin as an Output
digitalWrite(wifiLedPin, HIGH);
pinMode(ENA, OUTPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
pinMode(ENB, OUTPUT);
// set NodeMCU Wifi hostname based on chip mac address
String chip_id = String(ESP.getChipId(), HEX);
int i = chip_id.length() - 4;
chip_id = chip_id.substring(i);
chip_id = "wificar-" + chip_id;
String hostname(chip_id);
Serial.println();
Serial.println("Hostname: " + hostname);
// first, set NodeMCU as STA mode to connect with a Wifi network
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid.c_str(), sta_password.c_str());
Serial.println("");
Serial.print("Connecting to: ");
Serial.println(sta_ssid);
Serial.print("Password: ");
Serial.println(sta_password);
// try to connect with Wifi network about 10 seconds
unsigned long currentMillis = millis();
previousMillis = currentMillis;
while (WiFi.status() != WL_CONNECTED && currentMillis - previousMillis <= 10000) {
delay(500);
Serial.print(".");
currentMillis = millis();
}
// if failed to connect with Wifi network set NodeMCU as AP mode
if (WiFi.status() == WL_CONNECTED) {
Serial.println("");
Serial.println("*WiFi-STA-Mode*");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
digitalWrite(wifiLedPin, LOW); // Wifi LED on when connected to Wifi as STA mode
delay(3000);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;)
;
}
//delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 10);
// Display static text
display.println(sta_ssid);
display.setCursor(10, 30);
// Display static text
display.println(WiFi.localIP());
display.display();
} else {
WiFi.mode(WIFI_AP);
WiFi.softAP(hostname.c_str());
IPAddress myIP = WiFi.softAPIP();
Serial.println("");
Serial.println("WiFi failed connected to " + sta_ssid);
Serial.println("");
Serial.println("*WiFi-AP-Mode*");
Serial.print("AP IP address: ");
Serial.println(myIP);
digitalWrite(wifiLedPin, HIGH); // Wifi LED off when status as AP mode
delay(3000);
}
server.on("/", HTTP_handleRoot); // call the 'handleRoot' function when a client requests URI "/"
server.onNotFound(HTTP_handleRoot); // when a client requests an unknown URI (i.e. something other than "/"), call function "handleNotFound"
server.begin(); // actually start the server
ArduinoOTA.begin(); // enable to receive update/uploade firmware via Wifi OTA
}
void loop() {
ArduinoOTA.handle(); // listen for update OTA request from clients
server.handleClient(); // listen for HTTP requests from clients
command = server.arg("State"); // check HTPP request, if has arguments "State" then saved the value
if (command == "F") goForword(); // check string then call a function or set a value
else if (command == "B") goBack();
else if (command == "R") goRight();
else if (command == "L") goLeft();
else if (command == "G") goForwordLeft();
else if (command == "H") goBackLeft();
else if (command == "I") goForwordRight();
else if (command == "J") goBackRight();
else if (command == "S") stopRobot();
else if (command == "0") speedCar = 105;
else if (command == "1") speedCar = 120;
else if (command == "2") speedCar = 135;
else if (command == "3") speedCar = 150;
else if (command == "4") speedCar = 165;
else if (command == "5") speedCar = 180;
else if (command == "6") speedCar = 195;
else if (command == "7") speedCar = 210;
else if (command == "8") speedCar = 225;
else if (command == "9") speedCar = 240;
else if (command == "q") speedCar = 255;
}
// function prototypes for HTTP handlers
void HTTP_handleRoot(void) {
server.send(200, "text/html", ""); // Send HTTP status 200 (Ok) and send some text to the browser/client
if (server.hasArg("State")) {
Serial.println(server.arg("State"));
}
}
void handleNotFound() {
server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request
}
void goForword() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goBack() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goForwordRight() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar);
}
void goForwordLeft() {
digitalWrite(IN_1, 1);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 1);
analogWrite(ENB, speedCar - speed_0);
}
void goBackRight() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar - speed_0);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
void goBackLeft() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 1);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 1);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar - speed_0);
}
void stopRobot() {
digitalWrite(IN_1, 0);
digitalWrite(IN_2, 0);
analogWrite(ENA, speedCar);
digitalWrite(IN_3, 0);
digitalWrite(IN_4, 0);
analogWrite(ENB, speedCar);
}
ลิงค์โค้ด https://lungmaker.com/code/esp8266-wifi-robot.ino
ก่อนอัพโหลดโค้ดต้องไขโค้ดอยู่ 2 ส่วนด้วยกันคือ
1. sta_ssid = "Robotsiam_2.4G"; // Robotsiam_2.4G เปลี่ยนเป็น ชื่อเครือข่าย Wifi ที่คุณต้องการเชื่อมต่อ
2. sta_password = "123456"; // 123456 เปลี่ยนเป็นรหัสผ่านสำหรับเครือข่าย Wifi
แล้วจึงทำการ Upload Code
ที่จอ OLED บรรทัดบน จะแสดง ชื่อเครือข่าย Wifi และ บรรทัดล่างเป็น IP ของหุ่นยนต์ ESP8266 ที่เราต้องการควบคุม
ในตัวอย่าง บรรทัดบนเป็นชื่อเครือข่าย Wifi คือ Robotsiam_2.4G และบรรทัดล่างเป็น IP คือ 192.168.4.1 เป็นต้น
ติดตั้ง แอปพลิเคชั่น ESP8266 WiFi Robot Car
ใช้สมาร์ทโฟนดาวน์ ระบบปฏิบัติการแอนดรอยด์ (Android) ดาวน์โหลดและติดตั้งแอพชื่อ ESP8266 WiFi Robot Car จาก Google Play Store
ติดตั้ง แอปพลิเคชั่น ESP8266 WiFi Robot Car
เปิด แอปพลิเคชั่น ESP8266 WiFi Robot Car
ไปที่ IP (ขวามือด้านบน)
เลือก CONTINUE
ที่ Network used by Phone ไปที่ เครื่องหมาย wifi แล้วเลือก เครือข่าย WiFi ชื่อเดียวกันกับที่ หน้าจอ OLED ของหุ่นยนต์ (ในตัวอย่างคือ Robotsiam_2.4G)
ที่ IP address to connect with ไปที่ รูปแว่นขยาย เพื่อค้นหา IP ของหุ่นยนต์
เลือก IP ของหุ่นยนต์ ให้ตรงกับที่ขแสดงที่หน้าจอ OLED แล้ว SAVE
ถึงขั้นตอนนี้ก็.. ทดสอบควบคุมกันได้เลย
วิดีโอผลลัพธ์การทำงาน หุ่นยนต์ ESP8266 บังคับ ผ่าน WIFI
สรุป
การสร้างหุ่นยนต์ ESP8266 และควบคุมผ่านการเชื่อมต่อ WiFi ด้วย Arduino IDE นั้นมีข้อดีมากมายที่ทำให้เป็นทางเลือกที่ดีสำหรับโปรเจค IoT หรือหุ่นยนต์ที่ต้องการการเชื่อมต่อแบบไร้สาย ดังนี้:
- ความยืดหยุ่นและปรับแต่งได้: Arduino IDE เป็นเครื่องมือที่มีความสามารถในการพัฒนาโปรแกรมอย่างยืดหยุ่น ทำให้ผู้ใช้สามารถปรับแต่งและปรับปรุงการทำงานของหุ่นยนต์ตามความต้องการได้อย่างง่ายดาย
- การเชื่อมต่อแบบไร้สาย: ESP8266 มีความสามารถในการเชื่อมต่อ WiFi ทำให้ไม่จำเป็นต้องมีการเสียเวลาในการติดตั้งสายหรือสร้างพื้นฐานเครือข่ายใหม่ เพียงแค่เชื่อมต่อกับเครือข่าย WiFi ที่มีอยู่และเริ่มต้นใช้งานได้ทันที
- ความสะดวกและความเข้าถึง: Arduino IDE เป็นเครื่องมือที่ใช้งานง่ายและมีความเข้าถึงสูงสำหรับผู้ที่มีความรู้พื้นฐานในการโปรแกรมมิ่ง ทำให้ผู้ใช้สามารถเริ่มต้นการพัฒนาโปรเจ็คได้ทันทีโดยไม่จำเป็นต้องมีความชำนาญในด้านเทคโนโลยี
- ความสมเหตุสมผลทางเศรษฐกิจ: ESP8266 เป็นอุปกรณ์ที่มีราคาไม่แพงและมีประสิทธิภาพสูง ทำให้เป็นทางเลือกที่มีความสมเหตุสมผลทางเศรษฐกิจสำหรับการพัฒนาโปรเจ็คต่างๆ
- รองรับการเชื่อมต่ออื่นๆ: นอกจากการเชื่อมต่อ WiFi แล้ว ESP8266 ยังสามารถรองรับการเชื่อมต่อกับเซนเซอร์หลากหลายชนิดและอุปกรณ์อื่นๆ เช่น การเชื่อมต่อกับเซนเซอร์อุณหภูมิ ความชื้น หรือการควบคุมอุปกรณ์อิเล็กทรอนิกส์อื่นๆ ทำให้มีความสามารถในการนำไปใช้งานในหลากหลายโปรเจ็ค
- ดังนั้น การสร้างหุ่นยนต์ ESP8266 และควบคุมผ่านการเชื่อมต่อ WiFi ด้วย Arduino IDE เป็นทางเลือกที่มีประสิทธิภาพและยืดหยุ่นสำหรับนักพัฒนาที่กำลังมองหาวิธีในการสร้างโปรเจ็ค IoT หรือหุ่นยนต์ที่มีการเชื่อมต่อแบบไร้สายและง่ายต่อการใช้งาน โดยยังมีความสามารถในการปรับแต่งและพัฒนาต่อยอดตามความต้องการของโปรเจ็คได้อย่างอิสระ