ESP8266 Nút Lọc nhiễu
Khi một nút được nhấn hoặc thả ra, hoặc một công tắc được bật hoặc tắt, người dùng mới thường cho rằng trạng thái của nó sẽ chuyển từ LOW sang HIGH hoặc từ HIGH sang LOW. Trên thực tế, điều này không phải như vậy. Do đặc tính cơ học và vật lý, trạng thái của nút (hoặc công tắc) có thể dao động giữa LOW và HIGH nhiều lần trong một hành động của người dùng duy nhất. Điều này được gọi là chattering. Chattering có thể khiến một lần nhấn được đọc thành nhiều lần nhấn, dẫn đến lỗi hoạt động trong một số ứng dụng.

Phương pháp để ngăn chặn vấn đề này được gọi là debouncing hoặc debounce. Hướng dẫn này cho bạn biết cách thực hiện điều đó khi sử dụng nút với ESP8266. Chúng ta sẽ tìm hiểu qua các bước dưới đây:
- Mã ESP8266 không thực hiện khử nhiễu cho một nút.
- Mã ESP8266 có khử nhiễu cho một nút.
- Mã ESP8266 có khử nhiễu cho một nút bằng cách sử dụng thư viện ezButton.
- Mã ESP8266 có khử nhiễu cho nhiều 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 | × | 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) |
Thông tin về Nút
Nếu bạn chưa quen với các nút (bao gồm sơ đồ chân, chức năng và lập trình), các bài hướng dẫn sau đây có thể giúp bạn:
Sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image
Xem thêm Sơ đồ chân ESP8266 và Cách cấp nguồn cho ESP8266.
Hãy xem xét mã ESP8266 cho cả hai trường hợp có debounce và không có debounce, và so sánh hành vi tương ứng của chúng.
Đọc Nút mà không có debounce
Trước khi tìm hiểu debouncing, hãy xem mã không có nó và quan sát hành vi của nó.
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:
- Xem 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 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 board ESP8266 phù hợp, ví dụ NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng.
- Kết nối ESP8266 của bạn với máy tính bằng cáp USB.
- Mở Arduino IDE, chọn board và cổng phù hợp.
- Sao chép mã dưới đây và mở nó trong Arduino IDE.
- Nhấp chuột vào nút Tải lên trên Arduino IDE để biên dịch và tải mã lên ESP8266.

- Mở Serial Monitor.
- Nhấn và giữ nút trong vài giây, sau đó thả ra.
- Kiểm tra đầu ra trong Serial Monitor.
Bạn có thể thấy rằng, thỉnh thoảng, bạn chỉ nhấn và thả nút một lần. Tuy nhiên, ESP8266 lại nhận nó như nhiều lần nhấn và thả. Đây là hiện tượng đóng tiếp điểm bị nhiễu (chattering) được đề cập ở đầu bài hướng dẫn. Hãy xem cách khắc phục nó ở phần tiếp theo.
Đọc nút nhấn với debounce
Đoạn mã dưới đây áp dụng phương pháp được gọi là debounce để ngăn hiện tượng rung.
Hướng dẫn từng bước
- Kết nối các linh kiệ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 bảng ESP8266 đúng, ví dụ như NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
- Sao chép mã ở trên và mở nó bằng Arduino IDE.
- Nhấn nút Upload trên Arduino IDE để biên dịch và tải mã lên ESP8266.
- Mở Serial Monitor.
- Giữ nút trong vài giây, rồi thả ra.
- Kiểm tra Serial Monitor để xem kết quả.
Như bạn có thể thấy, bạn chỉ nhấn và thả nút một lần duy nhất. ESP8266 có thể nhận diện đó như một lần nhấn và thả duy nhất, từ đó loại bỏ mọi nhiễu không cần thiết.
Chúng tôi đã làm cho nó đơn giản - Mã chống rung nút ESP8266 với thư viện
Chúng tôi đã phát triển một thư viện, ezButton, nhằm giúp người mới bắt đầu dễ tiếp cận hơn, đặc biệt khi họ đang sử dụng nhiều nút nhấn. Bạn có thể tìm hiểu thêm về thư viện ezButton tại đây.
Mã khử rung cho nút ESP8266 cho một nút duy nhất
Mã khử rung cho ESP8266 với nhiều nút bấm
Sơ đồ của mã ở trên:
Hình minh họa cho dây kết nối của mã:
Sự biểu diễn của các kết nối cho mã:

This image is created using Fritzing. Click to enlarge image
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.
Kiến thức bổ sung
- Giá trị của DEBOUNCE_DELAY phụ thuộc vào đặc tính vật lý của nút. Mỗi nút có thể có giá trị khác nhau.
Khả năng mở rộng
Kỹ thuật debounce có thể được sử dụng cho công tắc, cảm biến cảm ứng và nhiều thứ khác.