ESP8266 Nhiều nút

Bài hướng dẫn này chỉ cho bạn cách lập trình ESP8266 để làm việc với nhiều nút cùng lúc, mà không dựa vào hàm delay(). Cụ thể, chúng ta sẽ học:

Chúng tôi sẽ sử dụng ba nút làm ví dụ. Bạn có thể dễ dàng chỉnh sửa nó để phù hợp với hai nút, bốn nút, hoặc thậm chí nhiều hơn.

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 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)

Nút Giới thiệu

Nếu bạn chưa quen với nút nhấn (bản đồ chân, cách nó hoạt động, cách lập trình ...), các bài hướng dẫn sau đây có thể cung cấp cho bạn thêm thông tin:

Sơ đồ đấu dây

sơ đồ nối dây ESP8266 NodeMCU cho nhiều nút nhấn

This image is created using Fritzing. Click to enlarge image

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

Mã ESP8266 - Nhiều nút có khử nhiễu

Khi sử dụng nhiều nút, mọi thứ có thể trở nên phức tạp trong một số tình huống nhất định:

May mắn thay, thư viện ezButton library tối giản hóa quá trình này bằng cách quản lý khử nhiễu và các sự kiện nút một cách nội bộ. Điều này giúp người dùng bỏ qua việc quản lý dấu thời gian và các biến khi sử dụng thư viện. Ngoài ra, việc sử dụng một mảng các nút có thể nâng cao tính rõ ràng và sự ngắn gọn của mã.

/* * 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-multiple-button */ #include <ezButton.h> #define BUTTON_PIN_1 D5 // The ESP8266 pin connected to the button 1 #define BUTTON_PIN_2 D6 // The ESP8266 pin connected to the button 2 #define BUTTON_PIN_3 D7 // The ESP8266 pin connected to the button 3 ezButton button1(BUTTON_PIN_1); // create ezButton object for button 1 ezButton button2(BUTTON_PIN_2); // create ezButton object for button 2 ezButton button3(BUTTON_PIN_3); // create ezButton object for button 3 void setup() { Serial.begin(9600); button1.setDebounceTime(100); // set debounce time to 100 milliseconds button2.setDebounceTime(100); // set debounce time to 100 milliseconds button3.setDebounceTime(100); // set debounce time to 100 milliseconds } void loop() { button1.loop(); // MUST call the loop() function first button2.loop(); // MUST call the loop() function first button3.loop(); // MUST call the loop() function first // get button state after debounce int button1_state = button1.getState(); // the state after debounce int button2_state = button2.getState(); // the state after debounce int button3_state = button3.getState(); // the state after debounce /* Serial.print("The button 1 state: "); Serial.println(button1_state); Serial.print("The button 2 state: "); Serial.println(button2_state); Serial.print("The button 3 state: "); Serial.println(button3_state); */ if (button1.isPressed()) Serial.println("The button 1 is pressed"); if (button1.isReleased()) Serial.println("The button 1 is released"); if (button2.isPressed()) Serial.println("The button 2 is pressed"); if (button2.isReleased()) Serial.println("The button 2 is released"); if (button3.isPressed()) Serial.println("The button 3 is pressed"); if (button3.isReleased()) Serial.println("The button 3 is released"); }

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 tutorial ESP8266 - Cài đặt phần mềm nếu đây là lần đầu tiên 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 phù hợp, ví dụ NodeMCU 1.0 (ESP-12E Module), và cổng COM tương ứng của nó.
  • Nối dây như hình ở trên.
  • Kết nối bo mạch ESP8266 với máy tính của bạn qua cáp USB.
  • Mở Arduino IDE trên máy tính của bạn.
  • Chọn bo mạch ESP8266 phù hợp (ví dụ ESP8266 Uno) và cổng COM.
  • Nhấp vào biểu tượng Thư viện ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “ezButton”, sau đó tìm thư viện nút từ ArduinoGetStarted.
  • Nhấp nút Cài đặt để cài đặt thư viện ezButton.
thư viện nút nhấn ESP8266 NodeMCU
  • Sao chép mã ở trên và dán vào Arduino IDE.
  • Biên dịch và tải lên mã lên bo mạch ESP8266 bằng cách nhấp nút Tải lên trên Arduino IDE
cách nạp mã ESP8266 NodeMCU bằng Arduino ide
  • Mở Serial Monitor trên Arduino IDE
  • Nhấn và thả nút lần lượt
COM6
Send
The button 1 is pressed The button 1 is released The button 2 is pressed The button 2 is released The button 3 is pressed The button 3 is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

ESP8266 Mã nguồn - Nhiều nút nhấn sử dụng mảng

Chúng ta có thể cải thiện đoạn mã ở trên bằng cách sử dụng một mảng các nút. Đoạn mã dưới đây sử dụng mảng này để xử lý các đối tượng nút.

/* * 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-multiple-button */ #include <ezButton.h> #define BUTTON_NUM 3 // the number of buttons #define BUTTON_PIN_1 D5 // The ESP8266 pin connected to the button 1 #define BUTTON_PIN_2 D6 // The ESP8266 pin connected to the button 2 #define BUTTON_PIN_3 D7 // The ESP8266 pin connected to the button 3 ezButton buttonArray[] = { ezButton(BUTTON_PIN_1), ezButton(BUTTON_PIN_2), ezButton(BUTTON_PIN_3) }; void setup() { Serial.begin(9600); for (byte i = 0; i < BUTTON_NUM; i++) { buttonArray[i].setDebounceTime(100); // set debounce time to 100 milliseconds } } void loop() { for (byte i = 0; i < BUTTON_NUM; i++) buttonArray[i].loop(); // MUST call the loop() function first for (byte i = 0; i < BUTTON_NUM; i++) { // get button state after debounce int button_state = buttonArray[i].getState(); // the state after debounce /* Serial.print("The button "); Serial.print(i + 1); Serial.print(": "); Serial.println(button_state); */ if (buttonArray[i].isPressed()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is pressed"); } if (buttonArray[i].isReleased()) { Serial.print("The button "); Serial.print(i + 1); Serial.println(" is released"); } } }

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.