🧩 Introduction & Syntax

พื้นฐานการเขียนโปรแกรมบน Arduino / ESP32 ด้วยภาษา C/C++


🧠 1. Arduino คืออะไร?

Arduino คือ แพลตฟอร์มไมโครคอนโทรลเลอร์แบบเปิด (Open Source Hardware) ที่ออกแบบมาให้ใช้งานง่ายสำหรับนักเรียน นักศึกษา และนักพัฒนา

มันประกอบด้วย 2 ส่วนสำคัญ:

ส่วนประกอบรายละเอียด
Hardware (บอร์ด)เช่น Arduino UNO, Nano, Mega, ESP32 — มีไมโครคอนโทรลเลอร์สำหรับควบคุมวงจร
Software (IDE)โปรแกรมที่ใช้เขียนและอัปโหลดโค้ดขึ้นบอร์ด (Arduino IDE)

Arduino สามารถควบคุมอุปกรณ์ไฟฟ้า เช่น LED, Motor, Sensor, Relay ฯลฯ ได้โดยใช้คำสั่งง่าย ๆ


⚙️ 2. ESP32 คืออะไร?

ESP32 คือไมโครคอนโทรลเลอร์รุ่นใหม่จาก Espressif มี Wi-Fi และ Bluetooth ในตัว เขียนโปรแกรมได้ด้วย Arduino IDE เช่นเดียวกับ Arduino UNO

เปรียบเทียบArduino UNOESP32
CPUATmega328P 8-bitTensilica Xtensa 32-bit (Dual Core)
ความเร็ว16 MHz240 MHz
หน่วยความจำ (RAM)2 KB520 KB
Wi-Fi / BLE✖️ ไม่มี✅ มีในตัว
พอร์ต USBType-BMicro USB / USB-C
เหมาะกับการทดลองพื้นฐานIoT / Automation / Cloud

🧩 3. โครงสร้างพื้นฐานของโปรแกรม Arduino

ทุกโปรแกรมใน Arduino จะประกอบด้วย 2 ส่วนหลัก คือ

C++
void setup() {
  // ส่วนนี้ทำงานเพียงครั้งเดียวตอนเริ่มต้น
}

void loop() {
  // ส่วนนี้ทำงานซ้ำๆ ตลอดเวลา
}
ฟังก์ชันหน้าที่ทำงานเมื่อไหร่
setup()ใช้ตั้งค่าเริ่มต้น เช่น กำหนดขา, เริ่ม Serial, Wi-Fiทำงาน ครั้งเดียว เมื่อเปิดเครื่องหรือรีเซ็ต
loop()ใส่โค้ดหลัก เช่น อ่านเซนเซอร์, ควบคุมอุปกรณ์ทำงาน วนซ้ำตลอดเวลา

💡 4. ตัวอย่างโปรแกรมแรก (Blink LED)

C++
void setup() {
  pinMode(2, OUTPUT);   // กำหนดขา 2 เป็นขาออก
}

void loop() {
  digitalWrite(2, HIGH);  // เปิดไฟ LED
  delay(1000);            // หน่วงเวลา 1 วินาที
  digitalWrite(2, LOW);   // ปิดไฟ LED
  delay(1000);
}

คำอธิบาย:

  • pinMode() → กำหนดทิศทางของขา
  • digitalWrite() → สั่งเปิด/ปิด (HIGH/LOW)
  • delay(ms) → หน่วงเวลา (มิลลิวินาที)

🔹 5. ลำดับขั้นตอนการทำงานของโปรแกรม

1️⃣ setup() ทำงานก่อน 1 ครั้ง
2️⃣ จากนั้น loop() จะเริ่มทำงานวนซ้ำเรื่อย ๆ
3️⃣ หากรีเซ็ตบอร์ด → จะกลับไปทำ setup() อีกครั้ง

Start → setup() → loop() → loop() → loop() → …

🔹 6. คำสั่งพื้นฐาน (Basic Syntax)

คำสั่งหน้าที่ตัวอย่าง
pinMode(pin, mode)กำหนดโหมดขาpinMode(2, OUTPUT);
digitalWrite(pin, val)สั่ง HIGH / LOWdigitalWrite(2, HIGH);
digitalRead(pin)อ่านค่าจากขา Digitalval = digitalRead(4);
analogRead(pin)อ่านค่าจากขา Analog (0–1023 หรือ 0–4095)val = analogRead(34);
analogWrite(pin, val)ส่งสัญญาณ PWM (0–255)analogWrite(5, 128);
delay(ms)หน่วงเวลาเป็นมิลลิวินาทีdelay(1000);
Serial.begin(baud)เริ่ม SerialSerial.begin(115200);
Serial.print()แสดงข้อความใน Serial MonitorSerial.print("Hello");

🔹 7. การคอมเมนต์ (Comment)

ใช้เพื่ออธิบายโค้ด ไม่ถูกคอมไพล์

// แบบบรรทัดเดียว
/* แบบหลายบรรทัด
   สามารถเขียนยาวได้ */

🧮 8. กฎพื้นฐานของ Syntax

กฎคำอธิบาย
1️⃣ ทุกคำสั่งต้องจบด้วยเครื่องหมาย ;
2️⃣ ตัวพิมพ์เล็ก–ใหญ่สำคัญ (LEDled)
3️⃣ ฟังก์ชันต้องอยู่ในวงเล็บ {}
4️⃣ ต้องมี setup() และ loop() อย่างน้อยหนึ่งครั้ง
5️⃣ การเว้นบรรทัดไม่ส่งผลต่อโปรแกรม (แต่ควรอ่านง่าย)

🧩 9. การใช้ Serial Monitor เพื่อดูผลลัพธ์

C++
void setup() {
  Serial.begin(115200);
  Serial.println("Hello ESP32!");
}

void loop() {
  Serial.println(millis());
  delay(1000);
}

เปิด Tools → Serial Monitor จะเห็นข้อความจากบอร์ด
ใช้ได้กับทั้ง Arduino และ ESP32


🔧 10. การอัปโหลดโปรแกรม

1️⃣ เชื่อมต่อบอร์ดผ่านสาย USB
2️⃣ เลือกบอร์ดให้ถูกต้อง

  • Arduino: Tools → Board → Arduino UNO
  • ESP32: Tools → Board → ESP32 Dev Module
    3️⃣ เลือกพอร์ต (Tools → Port → COMx หรือ /dev/ttyUSBx)
    4️⃣ กด Upload (สัญลักษณ์ลูกศร ▶️)

🧾 11. สรุปแนวคิดสำคัญ

หัวข้อสรุปสั้น ๆ
Arduino IDEโปรแกรมเขียนและอัปโหลดโค้ด
setup()ทำงานครั้งเดียวตอนเริ่มต้น
loop()ทำงานซ้ำ ๆ ตลอดเวลา
pinMode() / digitalWrite() / delay()คำสั่งหลักที่ต้องรู้
Serial Monitorใช้ตรวจสอบค่าหรือดีบักโปรแกรม
ESP32Arduino ที่มี Wi-Fi และ Bluetooth ในตัว

🧠 12. แบบฝึกหัดท้ายบท

1️⃣ เขียนโปรแกรมกระพริบไฟ LED ทุก 500 ms
2️⃣ เขียนโปรแกรมเปิดไฟ 2 ดวงสลับกัน
3️⃣ เขียนโปรแกรมแสดงข้อความ “Welcome to ESP32” ใน Serial Monitor
4️⃣ ทดลองใช้ delay() กับค่าเวลาต่าง ๆ แล้วสังเกตผล
5️⃣ อธิบายความแตกต่างระหว่าง setup() และ loop()


📘 ภาพรวมแนวคิดของโปรแกรม Arduino

┌────────────────────────┐
│     setup()                                                    │
│ - ตั้งค่าเริ่มต้น                                              │
│ - กำหนดขา, Serial, WiFi                            │
└───────────┬────────────┘
                                   ↓
┌────────────────────────┐
│     loop()                                                      │
│ - ทำงานซ้ำ ๆ                                               │
│ - อ่าน sensor                                               │
│ - สั่ง actuator                                              │
└────────────────────────┘