สวัสดีครับนักศึกษาทุกคน ในบทที่แล้วเราได้ทดสอบบอร์ดด้วยโปรแกรมไฟกระพริบง่ายๆ ไปแล้ว วันนี้เราจะมาลงมือ “ต่อวงจรจริง” กันครับ
การเรียน IoT นั้น สิ่งที่ต้องแม่นยำคือความเข้าใจเรื่อง Input และ Output ในบทนี้เราจะโฟกัสที่ Digital Output หรือการสั่งให้ขาของ ESP32 จ่ายไฟออกมาเพื่อควบคุมอุปกรณ์ภายนอก เช่น หลอด LED, รีเลย์ หรือส่งสัญญาณไปทริกเกอร์วงจรอื่น ๆ พร้อมกับเรียนรู้โครงสร้างภาษา C++ ว่า void setup กับ void loop ต่างกันอย่างไร
1. โครงสร้างพื้นฐานของ Arduino Sketch (C++)
เวลาเราเขียนโปรแกรมใน Arduino IDE ไฟล์งานของเราจะเรียกว่า “Sketch” ซึ่งต้องประกอบด้วยฟังก์ชันบังคับ 2 ส่วนเสมอ คือ:
1. void setup()
- ทำหน้าที่อะไร: เป็นส่วน “เตรียมความพร้อม” เช่น กำหนดว่าขาไหนเป็น Input ขาไหนเป็น Output หรือเริ่มการเชื่อมต่อ WiFi
- ทำงานตอนไหน: ทำงาน “แค่ครั้งเดียว” ตอนเริ่มจ่ายไฟเข้าบอร์ด หรือตอนกดปุ่ม Reset
2. void loop()
- ทำหน้าที่อะไร: เป็นส่วน “การทำงานหลัก” ที่บรรจุคำสั่งต่างๆ
- ทำงานตอนไหน: ทำงาน “วนซ้ำไปเรื่อยๆ ไม่มีวันจบ” (Loop) จนกว่าจะถอดปลั๊ก
ตัวอย่างการเปรียบเทียบ:
ถ้าเปรียบกับการเปิดร้านอาหาร setup() คือการจัดโต๊ะ เปิดไฟ เตรียมครัว (ทำครั้งเดียวตอนเช้า) ส่วน loop() คือการรับออเดอร์ ทำอาหาร เสิร์ฟ (ทำวนไปเรื่อยๆ ตลอดทั้งวัน)
2. คำสั่งสำคัญสำหรับ Digital Output
ในการควบคุมอุปกรณ์ เราจะใช้ 3 คำสั่งหลัก:
pinMode(pin, mode);- ใช้ใน
setup()เพื่อบอกว่าขา Pin นี้จะใช้ทำอะไร pin= หมายเลขขา (เช่น 23)mode=OUTPUT(ส่งไฟออก) หรือINPUT(รับค่าเข้า)
- ใช้ใน
digitalWrite(pin, value);- สั่งให้ขา Pin จ่ายไฟหรือไม่จ่ายไฟ
value=HIGH(จ่ายไฟ 3.3V = ไฟติด) หรือLOW(หยุดจ่ายไฟ 0V = ไฟดับ)
delay(ms);- สั่งให้โปรแกรม “หยุดรอ” หน่วยเป็นมิลลิวินาที (1000 ms = 1 วินาที)
3. ปฏิบัติการ: ต่อวงจรควบคุม LED ภายนอก

| Pin | Description |
|---|---|
| 1 | First pin |
| 2 | Second pin |

| ชื่อ | คำอธิบาย |
|---|---|
| ขา A | Anode (ขาบวก) |
| ขา C | Cathode (ขาลบ) |
เราจะมาลองต่อ LED สีแดง 1 ดวง เข้ากับขา GPIO 23 ของ ESP32 กันครับ
อุปกรณ์ที่ต้องใช้:
- บอร์ด ESP32
- โฟโต้บอร์ด (Breadboard)
- หลอด LED (สีใดก็ได้)
- ตัวต้านทาน (Resistor) ขนาด 220Ω หรือ 330Ω
- สาย Jumper
ทำไมต้องมีตัวต้านทาน? (สำคัญมากสำหรับเด็กอิเล็กฯ) ขา GPIO ของ ESP32 จ่ายไฟออกมา 3.3V แต่หลอด LED สีแดงทั่วไปต้องการแรงดันตกคร่อมเพียงแค่ประมาณ 1.8V – 2.0V ถ้าเราต่อตรงๆ กระแสไฟจะไหลเกิน (Over Current) ทำให้ LED ขาด หรือแย่กว่านั้นคือ ขา GPIO ของ ESP32 อาจจะไหม้ได้
สูตรคำนวณ: R = (Vsource – Vled) / I R = (3.3V – 2.0V) / 0.015A ≈ 86Ω ในการใช้งานจริง เราใช้ค่า 220Ω หรือ 330Ω เพื่อความปลอดภัยและหาง่ายครับ
ผังการต่อวงจร:
- ขาบวก (Anode) ของ LED → ต่อเข้ากับตัวต้านทาน → ต่อเข้ากับขา GPIO 23 (หรือขา D23)
- ขาลบ (Cathode) ของ LED → ต่อลง GND ของบอร์ด ESP32
4. เขียนโค้ดควบคุม
คัดลอกโค้ดนี้ลงใน Arduino IDE แล้ว Upload ดูผลลัพธ์ครับ
// กำหนดชื่อขาให้เรียกง่ายๆ (Best Practice)
const int ledPin = 23;
void setup() {
// กำหนดให้ขา ledPin เป็น Output เพื่อจ่ายไฟ
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH); // จ่ายไฟ 3.3V (ไฟติด)
delay(500); // รอ 0.5 วินาที
digitalWrite(ledPin, LOW); // หยุดจ่ายไฟ 0V (ไฟดับ)
delay(500); // รอ 0.5 วินาที
}
5. โจทย์ท้าทาย (Challenge)
เพื่อทดสอบความเข้าใจ ให้นักศึกษาลองดัดแปลงวงจรและโค้ดดังนี้:
- ต่อ LED เพิ่มอีก 2 ดวง (รวมเป็น 3 ดวง: แดง, เหลือง, เขียว) ที่ขา 23, 22, 21
- เขียนโปรแกรมให้ไฟวิ่งเป็นลำดับเหมือน “สัญญาณไฟจราจร”
- แดงติด 5 วินาที -> ดับ
- เขียวติด 5 วินาที -> ดับ
- เหลืองติด 2 วินาที -> ดับ
- วนลูปกลับไปที่แดง
สรุปท้ายบท
วันนี้เราได้เรียนรู้โครงสร้างพื้นฐานของโปรแกรม และได้ลงมือต่อวงจร Output จริงๆ ซึ่งเป็นหัวใจสำคัญของการสั่งงานอุปกรณ์ IoT ในอนาคต (หลักการเดียวกันนี้ใช้กับการสั่งเปิด-ปิด Relay เพื่อคุมหลอดไฟบ้าน 220V ได้เลยครับ)
ภารกิจต่อไป: เมื่อเรา “สั่งงาน” ได้แล้ว บทต่อไปเราต้องเรียนรู้วิธี “รับคำสั่ง” บ้าง ในบทความหน้าเราจะมาเรียนเรื่อง Digital Input การอ่านค่าจากปุ่มกด (Switch) เพื่อนำมาควบคุมไฟ LED กันครับ
