การควบคุมอุปกรณ์แสดงผล (LED) ด้วยสัญญาณดิจิทัลจาก ESP32 และการเขียนโปรแกรมควบคุมแบบพื้นฐานและแบบลำดับเหตุการณ์
🎯 จุดประสงค์การเรียนรู้
- เข้าใจหลักการทำงานของ Digital Output บนไมโครคอนโทรลเลอร์
- ต่อวงจรและควบคุม LED ให้เปิด–ปิดได้ด้วยโปรแกรม
- ใช้คำสั่ง digitalWrite(), delay(), และ pinMode() ได้ถูกต้อง
- สามารถสร้าง “ไฟกระพริบ”, “ไฟวิ่ง”, หรือ “ไฟเตือนสถานะ” ได้
- เขียนโปรแกรมประยุกต์ร่วมกับปุ่มกดได้ (LED Control Switch)
🧩 อุปกรณ์ที่ใช้
| ลำดับ | รายการอุปกรณ์ | จำนวน | หมายเหตุ |
|---|---|---|---|
| 1 | บอร์ดไมโครคอนโทรลเลอร์ ICON-32 (ESP32) | 1 | ใช้เป็นบอร์ดหลัก |
| 2 | LED สีแดง / สีเขียว / สีเหลือง | 3 | ใช้แสดงสถานะ |
| 3 | ตัวต้านทาน 220 Ω | 3 | จำกัดกระแส LED |
| 4 | สวิตช์กดติดปล่อยดับ | 1 | ใช้เปิด–ปิด LED (แบบฝึกหัดเพิ่มเติม) |
| 5 | สาย Jumper | 6–8 เส้น | สำหรับต่อ Breadboard |
⚙️ 1. หลักการทำงานของ LED
LED (Light Emitting Diode) เป็นไดโอดเปล่งแสง มีขั้ว + (Anode) และ – (Cathode)
| สัญลักษณ์ | คำอธิบาย |
|---|---|
| Anode (+) | ต่อเข้าขา GPIO ผ่านตัวต้านทาน |
| Cathode (-) | ต่อเข้ากับ GND |
| แรงดันตกคร่อม (Vf) | ประมาณ 2.0V (แดง), 3.0V (ขาว/น้ำเงิน) |
| กระแสใช้งาน (If) | ประมาณ 10–20 mA |
⚡ ข้อควรระวัง
ห้ามต่อ LED เข้ากับ GPIO โดยตรง ต้องมีตัวต้านทานจำกัดกระแสเสมอ (220Ω–330Ω)
🔌 2. การต่อวงจร (Single LED)
ICON-32 (ESP32)
GPIO 2 ───[220Ω]──►|─── GND
LED
💻 โปรแกรมที่ 1: Blink LED (กระพริบไฟ)
const int led = 2; // ใช้ GPIO2
void setup() {
pinMode(led, OUTPUT); // กำหนดให้ขา led เป็น Output
}
void loop() {
digitalWrite(led, HIGH); // เปิดไฟ
delay(500); // หน่วงเวลา 0.5 วินาที
digitalWrite(led, LOW); // ปิดไฟ
delay(500);
}
✅ โปรแกรมนี้เป็นพื้นฐานของ Arduino/ESP32 ทุกระบบ
ไฟจะติด–ดับสลับกันทุก 0.5 วินาที
💡 3. โปรแกรมที่ 2: LED Running (ไฟวิ่ง 3 ดวง)
🔌 การต่อวงจร
GPIO 2 ──[220Ω]──►|─── GND
GPIO 4 ──[220Ω]──►|─── GND
GPIO 5 ──[220Ω]──►|─── GND
💻 โค้ดโปรแกรม
int leds[] = {2, 4, 5};
int count = 3;
void setup() {
for (int i = 0; i < count; i++) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < count; i++) {
digitalWrite(leds[i], HIGH);
delay(200);
digitalWrite(leds[i], LOW);
}
}
🔹 ไฟจะวิ่งจากซ้ายไปขวา ทีละดวง
🔹 ใช้หลัก “Loop + Array” ซึ่งจะถูกใช้บ่อยมากในงานจริง
💡 4. โปรแกรมที่ 3: LED Toggle ด้วยปุ่มกด
🔌 การต่อวงจร
GPIO 4 ── Button ── GND
GPIO 2 ──[220Ω]──► LED ─── GND
💻 โค้ดโปรแกรม
const int button = 4;
const int led = 2;
bool ledState = false;
unsigned long lastPress = 0;
void setup() {
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
if (digitalRead(button) == LOW && millis() - lastPress > 300) {
ledState = !ledState;
digitalWrite(led, ledState);
lastPress = millis();
}
}
✅ กดปุ่ม 1 ครั้ง = เปิดไฟ
✅ กดอีกครั้ง = ปิดไฟ
พร้อมระบบ Debounce กันการเด้งของปุ่ม
⚙️ 5. โปรแกรมที่ 4: Pattern Lighting (รูปแบบไฟ)
const int button = 4;
const int led = 2;
int ledState = LOW;
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
digitalWrite(led, ledState);
}
void loop() {
int reading = digitalRead(button);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
ledState = !ledState;
digitalWrite(led, ledState);
}
}
}
lastButtonState = reading;
}🎶 ใช้สร้างไฟกระพริบ “Running Light” แบบที่ใช้ในโชว์หรือป้ายโฆษณา
🧪 แบบฝึกหัดเพิ่มเติม
1️⃣ เขียนโปรแกรมเปิด–ปิด LED ตามจังหวะ (SOS pattern: … ––– …)
2️⃣ เขียนโปรแกรม “ไฟวิ่งกลับทาง” เมื่อกดปุ่ม
3️⃣ เขียนโปรแกรม “ไฟกระพริบเร็วขึ้นเรื่อย ๆ” ทุกครั้งที่กดปุ่ม
4️⃣ ใช้ LED 3 ดวงแทนไฟจราจร (แดง–เหลือง–เขียว)
5️⃣ แสดงสถานะอุณหภูมิจาก DHT11 ด้วย LED (เช่น ร้อน = สีแดง)
📊 ตารางเปรียบเทียบคำสั่ง Digital Output
| คำสั่ง | หน้าที่ | ตัวอย่าง |
|---|---|---|
pinMode(pin, OUTPUT) | กำหนดขาเป็นขาออก | pinMode(2, OUTPUT); |
digitalWrite(pin, HIGH) | จ่ายสัญญาณ 1 (3.3V) | digitalWrite(2, HIGH); |
digitalWrite(pin, LOW) | จ่ายสัญญาณ 0 (0V) | digitalWrite(2, LOW); |
delay(ms) | หน่วงเวลา | delay(500); |
millis() | เวลาที่ผ่านไปตั้งแต่เริ่ม (ms) | ใช้จับเวลาโดยไม่หยุด Loop |
🧠 สรุปแนวคิดสำคัญ
| หัวข้อ | สรุป |
|---|---|
| Digital Output | การสั่งอุปกรณ์ให้ทำงานโดยส่งสัญญาณ HIGH/LOW |
| LED Indicator | ใช้แสดงสถานะการทำงานของระบบ |
| pinMode() / digitalWrite() | คำสั่งหลักในการควบคุมอุปกรณ์ |
| delay() | ใช้หน่วงเวลาเพื่อกำหนดจังหวะการทำงาน |
| millis() | ใช้จับเวลาแบบไม่หยุดการทำงานของ Loop |
| การประยุกต์ | ไฟเตือน, ไฟวิ่ง, ไฟแสดงสถานะระบบ, Smart LED Control |
📘 ภาพรวมแนวคิด
GPIO ──[220Ω]──►|─── GND
│
└── HIGH → LED ON
LOW → LED OFF
