Trong hướng dẫn này, chúng ta sẽ học cách sử dụng nút nhấn để bật và tắt đèn LED với vi điều khiển ESP32. Dự án sẽ minh họa cách đọc trạng thái của nút nhấn và điều khiển đèn LED tương ứng. Khi nút được nhấn, đèn LED sẽ sáng, và khi nhả ra, đèn sẽ tắt. Đây là một khái niệm nền tảng cho nhiều dự án tương tác sử dụng ESP32.
ESP32 là một vi điều khiển mạnh mẽ với khả năng Wi-Fi và Bluetooth tích hợp, phù hợp cho nhiều ứng dụng IoT. Trong bài học này, chúng ta sẽ sử dụng ESP32 từ Bộ khởi động ESP32 của SunFounder, bao gồm các linh kiện thiết yếu như điện trở và đèn LED, để tạo một mạch điện đơn giản. Để có giải thích chi tiết về cách nối dây và mã, vui lòng tham khảo video (trong video tại 00:00).
Giải thích phần cứng
Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, một nút nhấn, một đèn LED và các điện trở. ESP32 đóng vai trò là bộ não của dự án, điều khiển đèn LED dựa trên trạng thái của nút nhấn. Nút nhấn cho phép người dùng tương tác với mạch điện, trong khi đèn LED cung cấp phản hồi trực quan khi nút được nhấn.
Nút nhấn hoạt động bằng cách đóng mạch điện khi được nhấn, cho phép dòng điện chạy qua. Hành động này gửi tín hiệu CAO đến chân đầu vào được chỉ định của ESP32, sau đó có thể được đọc trong mã. Điện trở kết nối với nút đảm bảo rằng chân có trạng thái xác định khi nút không được nhấn, ngăn ngừa hành vi thất thường.
Nút nhấn với điện trở
Hướng dẫn nối dây
Để nối mạch điện, bắt đầu bằng cách kết nối chân dài hơn của đèn LED (cực dương) với một điện trở 220 ohm. Kết nối đầu còn lại của điện trở với chân GPIO 26 trên ESP32. Chân ngắn hơn của đèn LED (cực âm) nên được kết nối với đất. Tiếp theo, lấy nút nhấn và kết nối một bên với nguồn điện 3.3V trên bo mạch. Bên còn lại của nút nhấn kết nối với chân GPIO 14.
Nút nhấn không có điện trở
Nút nhấn không có điện trở
Nút nhấn với điện trở
Nút nhấn với điện trở
Ngoài ra, đặt một điện trở 10k ohm từ chân GPIO 14 xuống đất để đảm bảo chân đọc ở mức THẤP khi nút không được nhấn. Cuối cùng, kết nối dây đất từ ESP32 với đất chung trên bảng breadboard. Thiết lập này sẽ cho phép ESP32 đọc trạng thái nút và điều khiển đèn LED tương ứng.
Ví dụ mã & Hướng dẫn chi tiết
Phần lõi của chương trình bắt đầu bằng việc định nghĩa số chân cho nút và đèn LED bằng các hằng số. Điều này đảm bảo rằng việc gán chân không thay đổi trong suốt quá trình thực thi chương trình.
// đặt số chân
const int buttonPin = 14; // Chân nút
const int ledPin = 26; // Chân LED
Trong hàm setup(), chúng ta khởi tạo màn hình nối tiếp và đặt chân nút làm đầu vào trong khi cấu hình chân LED làm đầu ra. Điều này chuẩn bị cho ESP32 đọc từ nút và điều khiển đèn LED.
Bên trong hàm loop(), chương trình liên tục đọc trạng thái nút và in nó ra màn hình nối tiếp. Nếu nút được nhấn, đèn LED sẽ sáng; nếu không, đèn sẽ tắt. Logic này rất quan trọng để bật/tắt đèn LED dựa trên trạng thái của nút.
Chức năng cơ bản này cho phép đèn LED phản hồi trực tiếp với nút nhấn. Để biết thêm chi tiết về dự án và mã hoàn chỉnh, vui lòng tham khảo video được cung cấp (trong video tại 14:00).
Trình diễn / Điều gì sẽ xảy ra
Sau khi hoàn tất việc nối dây và tải mã lên, nhấn nút nhấn sẽ làm đèn LED sáng, và nhả ra sẽ làm đèn LED tắt. Hành vi này xác nhận rằng trạng thái nút đang được đọc chính xác. Nếu đèn LED không phản hồi như mong đợi, hãy kiểm tra việc nối dây và đảm bảo rằng nút hoạt động bình thường.
Trong quá trình kiểm tra, hãy quan sát màn hình nối tiếp để xem các giá trị trạng thái nút. Bạn sẽ thấy '1' khi nút được nhấn và '0' khi nút được nhả ra. Nếu các giá trị dao động bất thường, điều đó có thể chỉ ra sự cố nối dây hoặc cần thêm logic chống nhiễu (debouncing) trong mã.
// set pin numbers
const int buttonPin = 14; // Button pin
const int ledPin = 26; // LED pin
// variable for storing the button status
int buttonState = 0;
void setup() {
Serial.begin(115200);
// initialize the button pin as an input
pinMode(buttonPin, INPUT);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}
void loop() {
// read the state of the button value
buttonState = digitalRead(buttonPin);
Serial.println(buttonState);
delay(100);
// if the button is pressed
if (buttonState == HIGH) {
// turn LED on
digitalWrite(ledPin, HIGH);
} else {
// turn LED off
digitalWrite(ledPin, LOW);
}
}
Tiết lộ: Là một đối tác của Amazon, chúng tôi kiếm tiền từ các giao dịch đủ điều kiện. Điều này có nghĩa là chúng tôi có thể nhận được một khoản hoa hồng nhỏ nếu bạn nhấp vào liên kết và thực hiện một giao dịch mà không tốn thêm chi phí nào cho bạn.