ต่อสาย LED เดี่ยวอนุกรมกับตัวต้านทานเข้ากับพิน GPIO และกราวด์ จากนั้นเปิดและปิดด้วยโค้ด ตัวต้านทานไม่ใช่ทางเลือก: LED ที่ไม่มีการจำกัดกระแสจะดึงกระแสมากกว่าที่ LED หรือพินของตัวควบคุมจะรับได้มาก และอาจทำให้ทั้งสองเสียหายได้ นี่คือการทดลองใช้กฎของโอห์มครั้งแรกของคุณ — ค่าตัวต้านทานที่คุณเลือกจะกำหนดปริมาณกระแสที่ไหลเมื่อคุณทราบแรงดันไปข้างหน้าของ LED และแรงดันพินของตัวควบคุม
ตรวจสอบขั้วของชิ้นส่วนที่มีขั้วซ้ำอีกครั้ง — LED และตัวเก็บประจุและทรานซิสเตอร์บางชนิดจะทำงานได้ทางเดียวเท่านั้น แม้ว่าอาจจะพอดีกับเบรดบอร์ดได้ทั้งสองทางก็ตาม
ขั้วบวกของ LED (ขาที่ยาวกว่า) → ตัวต้านทาน 220–330Ω → ESP32-C3 GPIO4
ขั้วลบของ LED (ขาที่สั้นกว่า) → GND
ยืนยันขั้วของ LED ก่อนเปิดเครื่อง — ขอบแบนบนขอบของ LED (หรือขาที่สั้นกว่า) คือขั้วลบ นี่คือการทดสอบการเปิดเครื่องที่ง่ายที่สุดสำหรับบอร์ดและการต่อสายเบรดบอร์ดของคุณ
แบบฝึกหัดที่ 2: การอ่านปุ่มเพื่อเปิด LED
ขั้วบวกของ LED → ตัวต้านทาน 220–330Ω → ESP32-C3 GPIO4 (เหมือนกับแบบฝึกหัดที่ 1)
ตัวเก็บของทรานซิสเตอร์ NPN → ด้านแคโทดของกลุ่ม LED — ทรานซิสเตอร์เป็นสวิตช์ด้านต่ำสำหรับกลุ่ม LED ขนาดเล็กที่ต่อขนานกัน
ขั้วบวกของกลุ่ม LED → ตัวต้านทาน 220–330Ω แต่ละตัว → 3V3 — LED แต่ละตัวในกลุ่มจะได้รับตัวต้านทานของตัวเอง แม้ว่าจะใช้สวิตช์ทรานซิสเตอร์ร่วมกัน
นี่คือสวิตช์ด้านต่ำ: GPIO ไม่ได้สัมผัสพลังงานของกลุ่ม LED โดยตรง แต่จะสลับกระแสฐานขนาดเล็กที่ทำให้ทรานซิสเตอร์ส่งกระแสที่ใหญ่กว่าจาก 3V3 ผ่าน LED ไปยัง GND นี่คือหลักการเดียวกันที่ใช้ในการสลับโหลดที่ GPIO ไม่สามารถขับเคลื่อนได้อย่างปลอดภัยด้วยตัวเอง ซึ่งในที่นี้ขยายขนาดด้วย LED เนื่องจากมีอยู่ในชุดอุปกรณ์ — สลับกลุ่ม LED สำหรับโหลดที่หนักกว่าในภายหลังโดยใช้การจัดเรียงตัวต้านทานฐานแบบเดียวกัน
แผนภาพการต่อสาย
โค้ดเริ่มต้น
// ===== Exercise 1: Blink an LED =====
// Exercise 1: Blink an LED
#define LED_PIN 4 // adjust to match your wiring if different
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
// ===== Exercise 2: Read a Button to Light an LED =====
// Exercise 2: Button controls an LED
#define LED_PIN 4
#define BUTTON_PIN 5 // adjust to match your wiring if different
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop() {
bool pressed = (digitalRead(BUTTON_PIN) == LOW);
digitalWrite(LED_PIN, pressed ? HIGH : LOW);
}
// ===== Exercise 3: Read a Potentiometer =====
// Exercise 3: Read a potentiometer and print to Serial
#define POT_PIN 0 // adjust to match your wiring if different
void setup() {
Serial.begin(115200);
}
void loop() {
int raw = analogRead(POT_PIN);
Serial.print("Pot raw value: ");
Serial.println(raw);
delay(200);
}
// ===== Exercise 4: Potentiometer Controls LED Brightness (PWM) =====
// Exercise 4: Potentiometer controls LED brightness via PWM
#define POT_PIN 0
#define LED_PIN 4 // adjust to match your wiring if different
const int PWM_FREQ = 5000;
const int PWM_RESOLUTION = 8; // 0-255 duty range
void setup() {
Serial.begin(115200);
// Arduino-ESP32 core 3.x pin-based LEDC API:
ledcAttach(LED_PIN, PWM_FREQ, PWM_RESOLUTION);
}
void loop() {
int raw = analogRead(POT_PIN); // 0-4095
int brightness = map(raw, 0, 4095, 0, 255); // scale to 8-bit PWM duty
ledcWrite(LED_PIN, brightness);
Serial.print("Pot: "); Serial.print(raw);
Serial.print(" Brightness: "); Serial.println(brightness);
delay(50);
}
// ===== Exercise 5: NPN Transistor as a Digital Switch =====
// Exercise 5: NPN transistor switches an LED group from a digital pin
#define SWITCH_PIN 7 // adjust to match your wiring if different
void setup() {
pinMode(SWITCH_PIN, OUTPUT);
}
void loop() {
digitalWrite(SWITCH_PIN, HIGH); // transistor conducts, LED group ON
delay(1000);
digitalWrite(SWITCH_PIN, LOW); // transistor cuts off, LED group OFF
delay(1000);
}