กระทู้เมื่อเร็วๆ นี้

หน้า: [1] 2 3 ... 10
1
เปลี่ยน VS Code ให้เป็นสุดยอดเครื่องมือเขียน Arduino พร้อมจำลองวงจรด้วย PlatformIO และ Wokwi

สำหรับนักพัฒนาสาย Embedded หรือผู้ที่เริ่มต้นเขียนโปรแกรม Arduino คงคุ้นเคยกับ Arduino IDE กันเป็นอย่างดี แม้ว่าในเวอร์ชันใหม่ๆ จะมีการพัฒนาขึ้นมาก แต่สำหรับงานโปรเจกต์ที่มีความซับซ้อน มีไฟล์โค้ดจำนวนมาก หรือต้องการระบบ Auto-complete (พิมพ์โค้ดอัจฉริยะ) ที่รวดเร็ว การเปลี่ยนมาใช้ Visual Studio Code (VS Code) ร่วมกับ PlatformIO ถือเป็นจุดเปลี่ยนที่ช่วยให้ชีวิตการเขียนโค้ดง่ายขึ้นแบบก้าวกระโดด

ยิ่งไปกว่านั้น วันนี้เราจะเพิ่มความสะดวกขึ้นไปอีกขั้นด้วย Wokwi ตัวจำลองการทำงาน (Simulator) ยอดนิยมที่จะช่วยให้เราทดสอบโค้ด Arduino ได้ทันทีบน VS Code โดยไม่ต้องต่อบอร์ดจริงหรือต่อสายไฟให้ยุ่งยาก!

ในบล็อกนี้เราจะพาไปดูขั้นตอนการติดตั้งและใช้งานแบบทีละสเต็ป (Step-by-Step) ตั้งแต่ศูนย์จนพร้อมใช้งานกันครับ
ขั้นตอนที่ 1: ติดตั้งโปรแกรม Visual Studio Code
1. พิมพ์คำค้นหาด้วยคำว่า vscode ด้วยกูเกิล แล้วคลิก Download


2. คลิกเลือกไฟล์ติดตั้งให้ตรงกับระบบปฏิบัติการในคอมพิวเตอรืที่ใช้งาน (ตัวอย่างใช้กับ windows)


3. คลิกขวาที่ไฟล์ที่ดาวน์โหลดสำเร็จ เลือก Run as administrator


4. คลิกเลือก I accept...


5. คลิกเลือกรายการติดตั้งที่ต้องการ (ในที่นี้เลือกทุกรายการ)


6. เมื่อติดตั้งเสร็จสิ้นคลิกที่ปุ่ม Finish


ขั้นตอนที่ 2: ติดตั้ง Extension "PlatformIO IDE"
7. คลิกไอคอนดังรูปเพื่อติดตั้งตัวเสริม


8. ตัวแรกติดตั้ง PlatformIO พิมพ์ช่องค้นหาด้วยคำว่า platform เลือกดังรูปแล้วคลิกติดตั้ง


9. คลิกที่ปุ่มดังรูป



ขั้นตอนที่ 3: ติดตั้ง Wokwi Simulator บน VS Code
10. ติดตั้งตัวเสริมตัวที่สอง ค้นหาด้วยคำว่า wokwi  เลือกดังรูปแล้วคลิกติดตั้ง


11.  คลิกที่ปุ่มดังรูป


12. สร้างโฟลเดอร์ใหม่เพื่อไว้สำหรับเก็บไฟล์งานในไดร์ฟอื่นที่ไม่ใช่ไดร์ฟ C (ในที่นี้ตั้งชื่อโฟลเดอร์ว่า PlatformIO)


13. คลิกที่ไอคอนรูปหัวมด (PlatformIO) คลิกที่ Open แล้วสร้างไฟล์งานใหม่โดยคลิกที่ New Project


14. ตั้งชื่อไฟล์, เลือกบอร์ดที่จะใช้งาน, เลือกโฟลเดอร์ที่จะเก็บไฟล์ (เลือกโฟลเดอร์ที่ได้เตรียมไว้จากข้างต้น)


15. รอ...


16. รอ..


17. รอ..


18. รอ..


19. คลิกตามรูป


20. เมื่อเสร็จจะแสดงข้อมูลในไฟล์ ini ดังรูป


21. คลิกที่หัวมด คลิก Device เพื่อดูพอร์ตอนุกรมที่คอมพิวเตอร์กำลังเชื่อมต่อ


22. เมื่อมีการเสียบบอร์ดมาภายหลัง ให้คลิกรูปบ้าน (Home) ก่อน 1 ครั้งแล้วกลับมาคลิกที่ไอคอน Device จะเห็นว่ามีพอร์ตอนุกรมเพิ่มขึ้นมา (จำพอร์ตที่จะใช้เชื่อมต่อไว้)


23. คลิกที่ไฟล์ platformio.ini เพื่อเพิ่มรายการที่จะใช้ดังรูป (จากขั้นตอน 22 พบว่าพอร์ตที่ใช้เชื่อมต่อกับบอร์คือ COM5 ดังนั้นเวลากำหนดในไฟล์ ini จึงใช้ COM5)
โค๊ด: [Select]
upload_port=COM5
upload_speed=115200
monitor_speed=9600


หมายเหตุ
-หากไม่ใส่ค่าดังกล่าวตัวโปรแกรมจะดำเนินการอัตโนมัติ อาจจะทำให้สามารถอัพโหลดได้เช่นกัน



24. ไอคอนบนจะปรากฏตัวเลขขึ้นบนไอคอน เป็นการแจ้งให้รู้ว่ามีไฟล์งานที่ยังไม่บันทึกจำนวนกี่ไฟล์


25. ทำการบันทึก


26. เขียนโค้ดโปรแกรมในไฟล์ main.cpp (จะต้องมี#include <Arduino.h> เมื่อใช้ VS-Code กับ PlatformIO)
โค๊ด: [Select]
#define LED 13
#include <Arduino.h>
void setup() {
  pinMode(LED,OUTPUT);
}
void loop() {
  digitalWrite(LED,HIGH);
  delay(1000);
  digitalWrite(LED,LOW);
  delay(1000);
}


27. เมื่อต้องการคอมไพล์ (แปลงภาษาซีเป็นภาษาเครื่อง) ให้คลิกเครื่องหมายถูกด้านล่าง หากโค้ดที่เขียนขึ้นถูกไวยกรณ์จะมีคำว่า [SUCCESS]


28. เมื่อต้องการอัพโหลดโค้ดลงบอร์ดคลิกที่หัวลูกศรด้านล่าง หากอัพโหลดผ่านจะแสดงผลดังรูป


จำลองการทำงานด้วย wokwi ในโปรแกรม VSCode+PlatformIO
29. สร้างไฟล์ใหม่โดยคลิกขวาบริเวณว่าง เลือกคลิกที่ New File...


30. ตั้งชื่อไฟล์ว่า "diagram.json" ตั้งชื่อเสร็จแล้วคลิกที่ไฟล์จะได้ดังรูป (อย่าเพิ่งคลิกที่ Get your License Key)


31. เปิดโปรแกรมบราวน์เซอร์เปิดเว็บ www.wokwi.com ทำการ sign in


32. sign in ด้วย gmail (เปิดหน้าเว็บค้างไว้)


33. กลับมาที่โปรแกรม VSCode ทำการคลิกที่  Get your License Key


34. คลิกที่ Open


35. กลับไปที่เว็บบราวน์เซอร์จะปรากฏดังรูป ให้คลิกที่ GET YOUR LICENSE


36. หน้าต่างจะปรากฏ key


37. กลับไปที่โปรแกรม VSCode คลิกที่ Open


38. คลิกที่ไฟล์ diagram.json จะยังคงขึ้นมุมขวาบนดังรูป ให้ทำการปิดโปรแกรมแล้วเปิดใหม่


39. เมื่อเปิดโปรแกรมขึ้นมาใหม่แล้วคลิกที่ไฟล์ diagram.json มุมบนจะแสดงชื่อผู้ที่ใช้งานเว็บ wokwi


40. กลับไปที่เว็บ wokwi ดำเนินการดังนี้
   - วาดวงจรเพื่อใช้ทดลองตามต้องการ
   - คลิกที่ไฟล์ diagram.json
   - คลิกในบริเวณโค้ด json แล้วเลือกทั้งหมด (Ctrl+A)
   - คลิกขวาบริเวณที่เลือกแล้วคัดลอก


41. กลับมาที่โปรแกรม VSCode คลิกขวาที่ไฟล์ diagram.json แล้วคลิกตรงคำว่า Open With...


42. คลิกเลือกตรงคำว่า Text Editor


43. คลิกที่บริเวณพื้นที่ว่างแล้ววาง (Ctrl+V)


44. บันทึกไฟล์งาน


45. คลิกที่ไฟล์ diagram.json ตัววงจรจะปรากฏขึ้น


46. ไปที่บราวน์เซอร์เปิดเว็บ https://docs.wokwi.com/vscode/project-config คัดลอกโค้ด


47. กลับมาที่โปรแกรม VSCode สร้างไฟล์ใหม่


48. ตั้งชื่อว่า wokwi.toml แล้ววางโค้ดที่คัดลอกมา


49. คลิกที่ไฟล์ main.cpp ดำเนินการคอมไพล์


50. คลิกที่ไฟล์ wokwi.toml หาที่อยู่ของไฟล์ภาษาเครื่องจากหน้าต่างผลการคอมไพล์


51. คัดลอกมาวางแทนค่าเดิม


52. บันทึกไฟล์งาน


53. คลิกที่ไฟล์ diagram.json คลิกที่ปุ่มเริ่มการจำลอง


54. ผลการจำลอง
2
วงจรการเชื่อมต่อโมดูลต่าง ๆ









3
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรแสดงผล LCD i2c





ตัวอย่างโค้ด
โค๊ด: [Select]
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);  /* 0x27 for PCF8574 and 0x3F for PCF8574A*/
void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(2,0);
  lcd.print("Hello, world!");
  lcd.setCursor(4,1);
  lcd.print("LCD i2c Lab");
}
void loop()
{
}


4
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรแสดงผล OLED





ตัวอย่างโค้ด
โค๊ด: [Select]
#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
#define OLED_RESET    -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C //Address OLED
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int x;
void setup() {
  Serial.begin(9600);
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
}
void loop(){
  display.clearDisplay();
  display.setTextColor(WHITE,BLACK);   //Text is white ,background is black
  display.setCursor(0, 0);
  display.setTextSize(2);
  display.println("OLED ");
  display.setTextSize(1);   
  display.println("Arduino Laboratory");
  display.setTextColor(BLACK,WHITE); // 'inverted' text
  display.print("www.praphas.com");
  display.setTextColor(WHITE,BLACK); // 'inverted' text again
  display.setCursor(60,0);
  display.setTextSize(2); 
  display.println(x,DEC);
  display.display(); //
  x++;
  delay(250);
}


5
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรแสดงผล 7 Segment ชิพ HT16K33(i2c)






ตัวอย่างโค้ด
โค๊ด: [Select]
/* pin connection
  + -> 3.3-5V
  - -> GND
  D -> SDA (A4)
  C -> SCL (A5)
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
Adafruit_7segment display = Adafruit_7segment();
void setup() {
  display.begin(0x70);
  display.clear();
}
void loop() {
  byte x, y, d;
  bool blinkColon = false;
  display.println("Abcd");
  display.writeDisplay();
  delay(5000);
  for (int i = 0; i < 99; i++) {
    display.println(i);
    display.writeDisplay();
    delay(50);
  }
  for (float f = 0; f < 5; f += 0.01) {
    display.println(f);
    display.writeDisplay();
    delay(50);
  }
  for (float f = 10; f < 50; f += 0.1) {
    x = int(f) / 10;
    y = int(f) % 10;
    d = int(f * 10) % 10;
    display.println("   C");
    display.writeDigitNum(0, x, false);
    display.writeDigitNum(1, y, true);
    display.writeDigitNum(3, d, false);
    display.writeDisplay();
    delay(50);
  }
  for (int i = 0; i < 10; i++) {
    display.println(1234);
    blinkColon = !blinkColon;
    display.drawColon(blinkColon);
    display.writeDisplay();   
    delay(1000);
  }
}

6
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรคีย์แพด






ตัวอย่างโค้ด
โค๊ด: [Select]
#include <Keypad.h>
#define LED 5
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {6,7,8,9}; // Pins connected to R1, R2, R3, R4
byte colPins[COLS] = {10,11,12};      // Pins connected to C1, C2, C3
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
}
void loop()
{
  char key = keypad.getKey();
  if (key)
  {
    Serial.println(key);
    digitalWrite(LED,HIGH);delay(200);
    digitalWrite(LED,LOW);
  }
}
7
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรแสดงผล LCD เชื่อมต่อแบบ 4 บิต





ตัวอย่างโค้ด
โค๊ด: [Select]
#include <LiquidCrystal.h>
/* The circuit:
 * LCD RS pin to digital pin 13
 * LCD E  pin to digital pin 12
 * LCD D4 pin to digital pin 4
 * LCD D5 pin to digital pin 5
 * LCD D6 pin to digital pin 6
 * LCD D7 pin to digital pin 7
 * LCD R/W pin to ground
*/
LiquidCrystal lcd(13,12,4,5,6,7);   // set up the LCD's connection pins
void setup()
{
  lcd.begin(16, 2);               // set LCD size
  lcd.print("hello, world!");
}
void loop() {}
8
สายสัญญาณที่เชื่อมต่อไว้แล้ว
วงจรแสดงผล 7 Segment ชิพ MAX7219





ตัวอย่างโค้ด
โค๊ด: [Select]
#include "LedControl.h"
LedControl lc=LedControl(11,13,10,1); // 11->DIN,13->CLK,10->CS,1->1devices
void setup()
{
  lc.shutdown(0, false);   // Enable display
  lc.setIntensity(0, 5);  // Set brightness level (0 is min, 15 is max)
  lc.clearDisplay(0);      // Clear display register
  Serial.begin(9600);
}
void loop()
{
  byte x, y, z;
  int i;
  for (i = 0; i < 1000; i++)
  {
    Serial.println("--" + String(i));
    x = i / 100;                    //hundred digits
    y = (i % 100) / 10;             //tens digit
    z = i % 10;                     //unit digit
    lc.setDigit(0, 3, x, false);
    lc.setDigit(0, 2, y, false);
    lc.setDigit(0, 1, z, false);
    delay(100);
  }
}
9
การเชื่อมต่อพอร์ตในภาคต่าง ๆ บนบอร์ดทดลอง
วงจรเชื่อมต่อในบอร์ดทดลอง เชื่อมต่อไว้แล้ว ผู้ใช้งานเชื่อมต่อเอง
วงจรเซนเซอร์อุณหภูมิ LM35 -
วงจรเซนเซอร์แสง LDR -
วงจรเซนเซอร์อุณหภูมิ NTC -
วงจรเซนเซอร์อุณหภูมิ DS18B20 -
วงจร 10 bit LED -
วงจร DC Motor -
วงจร Stepper Motor -
วงจร Servo Motor -
วงจรเซนเซอร์อุณหภูมิ DHT11 -
วงจรสวิตช์เอาต์พุตดิจิทัล -
วงจรสวิตช์เอาต์พุตแอนะล็อก -
วงจรแสดงผล 7 Segment 4 หลัก -
วงจรแสดงผล 7 Segment ชิพ TM1637 -
วงจรแสดงผล 7 Segment ชิพ 74HC595 -
วงจรกำเนิดค่าแรงดันแอนะล็อก (Potentiometer) -
วงจรอุณหภูมิระยะทาง Ultrasonic -
วงจรแสดงผล 7 Segment ชิพ MAX7219 -
วงจร LCD -
วงจร Keypad -
วงจรแสดงผล 7 Segment ชิพ HT16K33(i2c) -
วงจรแสดงผล OLED i2c -
วงจรแสดงผล LCD 16x2 i2c -
หมายเหตุ
   1. วงจรที่เชื่อมต่อไว้แล้วที่เป็นวงจรที่มีไฟเลี้ยง วงจรนั้น ๆ จะเชื่อมต่อไฟเลี้ยงและกราวด์ไว้ให้แล้ว
   2. วงจรที่ไม่ได้เชื่อมต่อไว้ให้ เนื่องจากให้ผู้ใช้งานสามารถเลือกใช้การเชื่อมต่อกับขาพอร์ตที่ต้องการได้
10
รายการอุปกรณ์
web www.es.co.th
ลำดับที่รายการ จำนวนตัว
10.1uF1
21N58171
3LED 3 mm1
47-Segment LTC-47271
5MINI-USB Connector1
6STEPPING-MOTOR-CON1
7Terminal Box2
8Switch Tact8
web www.allnewstep.com
ลำดับที่รายการ จำนวนตัว
1Breadbroad 170hole1
2DHT111
3Female Header 1x101
4Female Header 1x141
5Female Header 1x152
6Female Header 1x216
7Female Header 1x35
8Female Header 1x46
9Female Header 1x4-90degree2
10Female Header 1x5-90degree2
12Female Header 1x51
13Female Header 1x82
14IC: DS18B201
15IC: L293D1
16IC: ULN28031
17IC: LM351
18LDR1
19LED-BAR 10  digit1
20NTC Thermistor 10k1
21Pin Header Connector 1x40 Black1
22Pin Header Connector 1x40 Red1
23Pin Header Connector 1x40 90degree1
24POTRV09 10k1
25POT-LCD 10k1
26Resistor 10k2
27Resistor 1k5
28Resistor 22023
29Resistor 4k72
30Resistor 6801
31TR: BC5474
32น็อตสกรู M34
33เสาน็อตไนลอน4
34I.C. SOCKET DIP 16 PINS1
35I.C. SOCKET DIP 18 PINS1
โมดูลเพิ่มเติมตามใบงาน
1Arduino Nano1
27 segment 4 digit HT16K33(i2c) 1
37 segment 4 digit TM16371
47 segment 4 digit 74HC5951
57 segment 8 digit MAX72191
6LCD 16char 2 Line1
7LCD 16char 2 Line i2c1
8OLED i2c1
9DC motor1
10Stepper Motor 5V1
11Wire jumper แบบแยกเส้น1
12Wire jumper แบบแพ1
ตัวต้านทานที่ไม่สามารถสั่งผ่านเวปได้ (สามารถใช้ค่าใกล้เคียงได้)
1Resistor 820 1/4w1
2Resistor 2k7 1/4w1
รายการอุปกรณ์ร้าน allnewstep บางรายการมีจำนวนมากกว่า 1 ชิ้นต่อการซื้อ 1 ครั้งให้สังเกตุก่อนการกดซื้อ
หน้า: [1] 2 3 ... 10