Knight Rider trên ESP32-C3
Một ESP32-C3 cho một chấm sáng chạy qua chạy lại dọc sáu LED, mỗi LED một GPIO. Toàn bộ mạch, gồm một ESP32-C3 và 12 linh kiện khác, chạy ngay trong trình duyệt của bạn với firmware bên dưới; mở nó trong trình soạn thảo để đổi cách nối dây hoặc code rồi chạy lại.
Đang dạy học? Giao bài này cho lớp của bạn chỉ với một cú nhấp.
Cơ bản About 20 minutes to build and run. Chạy trong trình duyệt của bạn. Miễn phí, không cần tài khoản.
Linh kiện bán lẻ khoảng $13.90. Trên Mokxi thì miễn phí.
What you'll learn
- One GPIO pin per LED
- Arrays to hold pin numbers
- Nested counting loops to sweep a light
- Writing a helper function to show one state
- Difficulty: Cơ bản
- Time: About 20 minutes
- Board: ESP32-C3-DevKitM-1
- Parts: 14
Cách hoạt động
Six red LEDs sit in a row, each on its own GPIO pin with a 220 ohm resistor. The LAMPS array lists the pins in breadboard order: 7, 6, 5, 4, 3, 2. Only one is on at a time.
The dot sweeps forward along the row, then back. The return trip stops one short of each end, so the end lamps light once per pass and the middle ones twice. That keeps the bounce from looking like it sticks at the ends.
Each step lasts 90 milliseconds.
Danh sách linh kiện
14 linh kiện, cộng thêm dây cắm. Bán lẻ khoảng $13.90; trên Mokxi thì miễn phí.
- 1 × ESP32-C3-DevKitM-1In Handheld Console Kit, Desk Buddy Kit.
- 1 × Breadboard cỡ lớn
- 6 × Điện trở, 220 ΩIn Starter Kit, Claw Machine Kit, Halloween Prop Kit.
- 6 × LED, đỏIn Starter Kit, Halloween Prop Kit, Logic Lab Kit.
Wiring table
Every connection, pin by pin, read from the circuit itself. Each row joins the pin on the left to the pin on the right, by a jumper wire or a breadboard strip.
| Linh kiện và chân | Connects to |
|---|---|
| Resistor, 220 Ω (1) pin 1 | ESP32-C3-DevKitM-1 pin 2 |
| Resistor, 220 Ω (2) pin 1 | ESP32-C3-DevKitM-1 pin 3 |
| LED, red (1) pin C | ESP32-C3-DevKitM-1 pin GND |
| LED, red (2) pin C | ESP32-C3-DevKitM-1 pin GND |
| LED, red (3) pin C | ESP32-C3-DevKitM-1 pin GND |
| LED, red (4) pin C | ESP32-C3-DevKitM-1 pin GND |
| LED, red (5) pin C | ESP32-C3-DevKitM-1 pin GND |
| LED, red (6) pin C | ESP32-C3-DevKitM-1 pin GND |
| Resistor, 220 Ω (3) pin 1 | ESP32-C3-DevKitM-1 pin 4 |
| Resistor, 220 Ω (4) pin 1 | ESP32-C3-DevKitM-1 pin 5 |
| Resistor, 220 Ω (5) pin 1 | ESP32-C3-DevKitM-1 pin 6 |
| Resistor, 220 Ω (6) pin 1 | ESP32-C3-DevKitM-1 pin 7 |
| LED, red (1) pin A | Resistor, 220 Ω (1) pin 2 |
| LED, red (2) pin A | Resistor, 220 Ω (2) pin 2 |
| LED, red (3) pin A | Resistor, 220 Ω (3) pin 2 |
| LED, red (4) pin A | Resistor, 220 Ω (4) pin 2 |
| LED, red (5) pin A | Resistor, 220 Ω (5) pin 2 |
| LED, red (6) pin A | Resistor, 220 Ω (6) pin 2 |
Code
Firmware y như khi trình soạn thảo mở ra. Sửa một dòng ở đó và nhấn Chạy: nó được biên dịch ngay trong trình duyệt.
// Knight Rider: a dot sweeping back and forth along six LEDs.
//
// One GPIO per lamp, which is the simplest thing that can work and the reason
// it is the first thing anyone builds with more than one LED. GPIO 7, 6, 5 and
// 4 come out next to each other on the DevKitM-1's left header and GPIO 3 and 2
// a little further along, so the array below is the LEDs in the order they sit
// on the breadboard, not in pin order.
//
// The sweep turns round one short of each end, so the two end lamps are lit
// once per pass and the middle ones twice, which is what stops the bounce
// looking like it sticks at the ends.
const int LAMPS[] = {7, 6, 5, 4, 3, 2};
const int COUNT = 6;
const int STEP_MS = 90;
static void show(int lit) {
for (int i = 0; i < COUNT; i++) {
digitalWrite(LAMPS[i], i == lit ? HIGH : LOW);
}
}
void setup() {
for (int i = 0; i < COUNT; i++) {
pinMode(LAMPS[i], OUTPUT);
digitalWrite(LAMPS[i], LOW);
}
Serial.begin(115200);
Serial.println("Mokxi ESP32-C3: six lamps, one dot");
}
void loop() {
for (int i = 0; i < COUNT; i++) {
show(i);
delay(STEP_MS);
}
for (int i = COUNT - 2; i > 0; i--) {
show(i);
delay(STEP_MS);
}
}
Code walkthrough
The key functions of the sketch, and what each one does.
show sketch.ino
Takes the number of the lamp to light. It loops over all six, writing HIGH to the one that matches and LOW to the rest. So only one LED is on at a time.
static void show(int lit) {
for (int i = 0; i < COUNT; i++) {
digitalWrite(LAMPS[i], i == lit ? HIGH : LOW);
}
}setup sketch.ino
Makes each pin in LAMPS an output and writes it LOW. It opens serial at 115200 baud and prints a message.
void setup() {
for (int i = 0; i < COUNT; i++) {
pinMode(LAMPS[i], OUTPUT);
digitalWrite(LAMPS[i], LOW);
}
Serial.begin(115200);
Serial.println("Mokxi ESP32-C3: six lamps, one dot");
}loop sketch.ino
Runs one pass forward from lamp 0 to 5, calling show and waiting STEP_MS each time. Then a second loop runs back from COUNT - 2 down to 1, skipping both end lamps so they are not lit twice in a row.
void loop() {
for (int i = 0; i < COUNT; i++) {
show(i);
delay(STEP_MS);
}
for (int i = COUNT - 2; i > 0; i--) {
show(i);
delay(STEP_MS);
}
}Troubleshooting
The usual mistakes with this circuit, and the fix for each.
- The dot jumps out of order This project
The pin order inLAMPSmust match the physical order of the LEDs on the board. - One LED never lights This project
Check its LED is the right way around: the long leg (anode) goes to the resistor, the short leg to GND. - The LED is dim, burns out, or the pin reads wrong because the resistor value is off. Điện trở
Read the color bands again. A 220 ohm to 330 ohm resistor suits a typical LED on 5 V. 10k is a common pull-up or pull-down value. Check with a multimeter if unsure. - A pull-up or pull-down resistor is missing, so the input floats and reads random values. Điện trở
Tie the input to 5 V or ground through about 10k. Or use INPUT_PULLUP and wire the switch to ground. - The LED does not light, or it lights once and then dies. LED
LEDs have polarity. The longer leg (anode) goes toward the positive side. Always add a series resistor, about 220 ohms to 1 k ohm on a 5 V pin. - A blue or white LED stays dark on 3.3 V. LED
Blue and white LEDs drop about 3 V, so 3.3 V leaves almost nothing for the resistor. Use a 5 V supply, or a smaller resistor and a red or green LED. - Upload fails or the board is not found by the computer. ESP32-C3-DevKitM-1
Pick the ESP32-C3 board in your tools and the right port. If it still fails, hold BOOT, tap RESET, then release BOOT to enter download mode and try again. - GPIO pins act strangely or the board resets. ESP32-C3-DevKitM-1
GPIO is 3.3 V only, so never feed it 5 V. GPIO 18 and 19 are USB, and GPIO 2, 8 and 9 are boot strapping pins. Avoid loading them at reset.
Sửa và giữ lại
Mở trong trình soạn thảo, đổi mạch hoặc code, và giữ phiên bản của bạn trong một tài khoản miễn phí.