Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 để chuyển đổi trạng thái của relay giữa ON và OFF khi một button được nhấn. Cụ thể:
Nếu button được nhấn, bật relay
Nếu button được nhấn lại, tắt relay
Quá trình trên được lặp đi lặp lại
Code ESP32 bao gồm code cho button toggle relay không có và có debouncing
Chúng ta có thể mở rộng hướng dẫn này để sử dụng button toggle trạng thái của solenoid, quạt, bóng đèn, hoặc actuator... bằng cách kết nối chúng với relay.
Tiết lộ: Một số liên kết trong bài viết này là liên kết tiếp thị Amazon và có thể nhận hoa hồng theo chính sách của chương trình.
Về Relay và Button
Chúng tôi có các hướng dẫn cụ thể về relay và button. Mỗi hướng dẫn chứa thông tin chi tiết và hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối dây đến ESP32, code ESP32... Tìm hiểu thêm về chúng tại các liên kết sau:
Code ESP32 - Button Toggle Relay Không Có Debouncing
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-button-toggle-relay */#define BUTTON_PIN 22 // ESP32 pin GPIO22 connected to button's pin#define RELAY_PIN 27 // ESP32 pin GPIO27 connected to relay's pin// variables will change:int relay_state = LOW; // the current state of relayint button_state; // the current state of buttonint last_button_state; // the previous state of buttonvoidsetup() {Serial.begin(9600); // initialize serialpinMode(BUTTON_PIN, INPUT_PULLUP); // set ESP32 pin to input pull-up modepinMode(RELAY_PIN, OUTPUT); // set ESP32 pin to output mode button_state = digitalRead(BUTTON_PIN);}voidloop() { last_button_state = button_state; // save the last state button_state = digitalRead(BUTTON_PIN); // read new stateif (last_button_state == HIGH && button_state == LOW) {Serial.println("The button is pressed");// toggle state of relay relay_state = !relay_state;// control relay arccoding to the toggled statedigitalWrite(RELAY_PIN, relay_state); }}
Code trên không có code debounce cho button. Không có debouncing cho button, các hành vi không mong muốn có thể xảy ra. Xem Tại sao cần debounce cho button. Debouncing cho button khá phức tạp đối với người mới bắt đầu. May mắn thay, thư viện ezButton thực hiện button debounce cho chúng ta.
Code ESP32 - Button Toggle Relay Có Debouncing
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-button-toggle-relay */#include <ezButton.h>#define BUTTON_PIN 22 // ESP32 pin GPIO22 connected to button's pin#define RELAY_PIN 27 // ESP32 pin GPIO27 connected to relay's pinezButtonbutton(BUTTON_PIN); // create ezButton object that attach to pin 7;// variables will change:int relay_state = LOW; // the current state of relayvoidsetup() {Serial.begin(9600); // initialize serialpinMode(RELAY_PIN, OUTPUT); // set ESP32 pin to output modebutton.setDebounceTime(50); // set debounce time to 50 milliseconds}voidloop() {button.loop(); // MUST call the loop() function firstif (button.isPressed()) {Serial.println("The button is pressed");// toggle state of relay relay_state = !relay_state;// control relay arccoding to the toggled statedigitalWrite(RELAY_PIN, relay_state); }}
Biên dịch và upload code lên board ESP32 bằng cách nhấn nút Upload trên Arduino IDE
Nhấn button vài lần
Xem sự thay đổi trạng thái của relay
Video Tutorial
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.