ESP8266 Nút nhấn Đèn LED

Hướng dẫn này chỉ cho bạn cách sử dụng ESP8266 và nút nhấn để điều khiển đèn LED. Chúng ta sẽ học hai ứng dụng khác nhau:

Ứng dụng 1 - Trạng thái LED được đồng bộ với trạng thái của nút nhấn. Cụ thể:

Ứng dụng 2 - Trạng thái LED được chuyển đổi mỗi lần nhấn nút. Cụ thể hơn:

Trong Ứng dụng 2, chúng ta cần xử lý debounce cho nút để đảm bảo nó hoạt động đúng. Chúng ta sẽ hiểu tại sao điều này quan trọng bằng cách so sánh cách LED hoạt động khi ta sử dụng mã ESP8266 với và không có xử lý debounce cho nút.

Phần cứng cần chuẩn bị

1×ESP8266 NodeMCU ESP-12E
1×Recommended: ESP8266 NodeMCU ESP-12E (Uno-form)
1×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×breadboard-mount Button with Cap
1×breadboard-mount Button Kit
1×Panel-mount Push Button
1×mô-đun nút nhấn
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP8266
1×(Khuyến nghị) Power Splitter for ESP8266 Type-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Giới thiệu về LED và Nút

Nếu bạn chưa quen với LED và nút (bao gồm cấu hình chân, nguyên lý hoạt động và lập trình), các hướng dẫn sau đây có thể giúp:

Sơ đồ đấu dây

sơ đồ nối dây nút và LED ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Xem thêm Sơ đồ chân ESP8266Cách cấp nguồn cho ESP8266.

Ứng dụng 1 - Trạng thái LED đồng bộ với trạng thái của nút nhấn

Mã ESP8266

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-button-led */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN D7 // The ESP8266 pin D7 connected to led int button_state = 0; // variable for reading the button status void setup() { // Configure the LED pin as a digital output pinMode(LED_PIN, OUTPUT); // Configure the ESP8266 pin as a pull-up input: HIGH when the button is open, LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the button value: button_state = digitalRead(BUTTON_PIN); // control LED according to the state of button if (button_state == LOW) // if button is pressed digitalWrite(LED_PIN, HIGH); // turn on LED else // otherwise, button is not pressing digitalWrite(LED_PIN, LOW); // turn off LED }

Hướng dẫn từng bước

Để bắt đầu với ESP8266 trên Arduino IDE, hãy làm theo các bước sau:

  • Hãy tham khảo bài hướng dẫn ESP8266 - Cài đặt phần mềm nếu đây là lần đầu bạn sử dụng ESP8266.
  • Nối các thành phần như được hiển thị trong sơ đồ.
  • Kết nối bo mạch ESP8266 với máy tính của bạn bằng cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 đúng, ví dụ: NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng.
  • Kết nối một ESP8266 với máy tính bằng cáp USB.
  • Khởi động Arduino IDE, và chọn đúng bo mạch và cổng.
  • Sao chép mã nguồn và mở nó trong Arduino IDE.
  • Nhấn nút Upload trên Arduino IDE để biên dịch và tải mã lên ESP8266.
tải mã nguồn lên Arduino ide
  • Nhấn nút và giữ nó trong vài giây.
  • Xem sự thay đổi trong tình trạng của đèn LED.

Bạn sẽ thấy trạng thái của đèn LED đồng bộ với trạng thái của nút.

Giải thích mã nguồn

Hãy xem giải thích theo từng dòng được chứa trong các chú thích của mã nguồn!

Ứng dụng 2 - Nút bật/tắt LED

Mã ESP8266 - Nút nhấn bật/tắt LED mà không khử nhiễu

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-button-led */ #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN D7 // The ESP8266 pin D7 connected to led int led_state = LOW; // The current state of LED int button_state; // The current state of button int last_button_state; // The previous state of button void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(BUTTON_PIN, INPUT_PULLUP); // Configure the ESP8266 pin to the input pull-up mode pinMode(LED_PIN, OUTPUT); // Configure the ESP8266 pin to the output mode button_state = digitalRead(BUTTON_PIN); } void loop() { last_button_state = button_state; // save the last state button_state = digitalRead(BUTTON_PIN); // read new state if (last_button_state == HIGH && button_state == LOW) { Serial.println("The button is pressed"); // toggle state of LED led_state = !led_state; // control LED according to the toggled state digitalWrite(LED_PIN, led_state); } }

Giải thích mã nguồn

Bạn có thể tìm giải thích trong các dòng chú thích của mã ESP8266 ở trên.

Trong mã, biểu thức led_state = !led_state tương đương với đoạn mã sau:

if(led_state == LOW) led_state = HIGH; else led_state = LOW;

Hướng dẫn từng bước

  • Sao chép mã và mở nó trong Arduino IDE.
  • Tải mã lên ESP8266.
  • Nhấn và thả nút nhiều lần.
  • Kiểm tra sự thay đổi trạng thái của đèn LED.

Bạn có thể nhận thấy trạng thái của LED được chuyển đổi mỗi lần nhấn nút. Tuy nhiên, hành vi này có thể không luôn nhất quán. Đôi khi, trạng thái của LED có thể bị chuyển đổi nhanh nhiều lần trong một lần nhấn nút, hoặc có thể không đổi chút nào (đảo hai lần liên tiếp trong thời gian ngắn có thể khó nhận ra bằng mắt thường).

⇒ Để giải quyết vấn đề này, chúng ta cần ESP8266 - Nút - Lọc nhiễu.

Mã ESP8266 - Nút nhấn bật/tắt LED với chống nhiễu

Khử nhiễu cho nút nhấn có thể là thách thức đối với người mới bắt đầu. May mắn thay, thư viện ezButton (https://arduinogetstarted.com/tutorials/arduino-button-library) làm cho việc này trở nên dễ dàng.

Tại sao debounce lại cần thiết? Xem ESP8266 - Nút - Lọc nhiễu để biết thêm thông tin.

/* * Mã ESP8266 NodeMCU này được phát triển bởi newbiely.vn * Mã ESP8266 NodeMCU 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/esp8266/esp8266-button-led */ #include <ezButton.h> #define BUTTON_PIN D1 // The ESP8266 pin D1 connected to button #define LED_PIN D7 // The ESP8266 pin D7 connected to led ezButton button(BUTTON_PIN); // create ezButton object for pin 7; int led_state = LOW; // The current state of LED void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(LED_PIN, OUTPUT); // Configure the ESP8266 pin to the output mode button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first if (button.isPressed()) { Serial.println("The button is pressed"); // toggle state of LED led_state = !led_state; // control LED according to the toggleed sate digitalWrite(LED_PIN, led_state); } }

Hướng dẫn từng bước

  • Cài đặt thư viện ezButton. Tham khảo Cách Làm để được hướng dẫn.
  • Sao chép mã và mở nó bằng Arduino IDE.
  • Nhấn nút Tải lên trên Arduino IDE để tải mã lên ESP8266.
  • Nhấn và thả nút nhiều lần.
  • Kiểm tra sự thay đổi trạng thái của đèn LED.

Bạn sẽ thấy trạng thái của đèn LED được chuyển đổi đúng một lần mỗi khi nhấn nút.

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.