ESP8266 Nút nhấn

Hướng dẫn này chỉ cho bạn cách sử dụng ESP8266 với nút nhấn. Cụ thể, chúng ta sẽ học:

Nút này còn được biết đến với nhiều tên gọi khác nhau, chẳng hạn như nút nhấn (pushbutton), nút xúc giác (tactile button) hoặc công tắc nhất thời (momentary switch). Nó là một linh kiện phổ biến được sử dụng trong nhiều dự án ESP8266 và dễ sử dụng. Tuy nhiên, nó có thể gây nhầm lẫn cho người mới bắt đầu do các khía cạnh cơ học và vật lý của nó cũng như các cách có thể sử dụng nó. Bài hướng dẫn này giúp những người mới bắt đầu dễ làm quen 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 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)

Giới thiệu về Nút

Khi làm việc với một nút, người mới bắt đầu thường gặp hai vấn đề:

1. Vấn đề đầu vào hở:.

  • Triệu chứng: Giá trị đọc từ chân đầu vào không tương ứng với trạng thái nhấn nút.
  • Nguyên nhân: Không sử dụng điện trở kéo lên hoặc kéo xuống với chân đầu vào.
  • Giải pháp: Sử dụng điện trở kéo lên hoặc kéo xuống như được hướng dẫn trong hướng dẫn này.

2. Hiện tượng chattering:.

  • Triệu chứng: Mặc dù được nhấn một lần, nút đang khiến mã ESP8266 phát hiện nhiều lần nhấn.
  • Nguyên nhân: Trạng thái của nút (hoặc công tắc) dao động nhanh giữa LOW HIGH do các vấn đề cơ học và vật lý.
  • Giải pháp: Hướng dẫn ESP8266 - Nút - Lọc nhiễu sẽ giải thích cách sử dụng debounce để giải quyết vấn đề này.

Đây là một yếu tố chỉ nên được xem xét đối với các ứng dụng yêu cầu phát hiện nhấn chính xác.

※ Lưu ý:

Đừng nhầm nút với các mục sau:

Bản đồ các chân của nút

Có nhiều loại nút nhấn, có thể được phân thành hai nhóm chính:

  • PCB-mount push button (suitable for mounting on a breadboard)
  • Panel-mount push button
nút nhấn

Một nút gắn trên PCB thường có bốn chân.

bố trí chân nút

Tuy nhiên, các chân này được nối thành các cặp ở bên trong. Do đó, chúng ta chỉ cần sử dụng hai trong số bốn chân, là hai chân không được nối với nhau ở bên trong.

Có bốn cách kết nối với nút, trong đó hai cách đối xứng với nhau (như hình ảnh cho thấy).

cách sử dụng nút

? Tại sao một nút nhấn lại có bốn chân trong khi chúng ta chỉ sử dụng hai trong số chúng?

Để đảm bảo nó được lắp đặt chắc chắn trên bo mạch PCB (bảng mạch in) và có thể chịu được áp lực.

Một nút gắn trên bảng điều khiển thường có hai chân.

sơ đồ chân của nút nhấn hai chân
image source: diyables.io

Mô-đun nút nhấn có một điện trở kéo xuống tích hợp, đảm bảo đầu ra ở mức LOW khi nút không được nhấn. Nó có ba chân:

  • GND: Kết nối chân này với đất.
  • VCC: Kết nối chân này với nguồn 3.3V.
  • OUT: Kết nối chân này với đầu vào kỹ thuật số trên ESP8266 của bạn.

Với cấu hình này, mô-đun sẽ xuất ra LOW khi nút không được nhấn và xuất HIGH khi nút được nhấn.

Cách hoạt động

  • Khi nút chưa được nhấn, chân A không được kết nối với chân B.
  • Tuy nhiên, khi nút được nhấn, chân A được kết nối với chân B.
cách hoạt động của nút

ESP8266 - Nút nhấn

Một chân của nút được kết nối với VCC hoặc GND. Chân còn lại được kết nối với một chân trên ESP8266. Bằng cách kiểm tra trạng thái của một chân ESP8266 được cấu hình làm đầu vào, chúng ta có thể xác định xem nút có được nhấn hay không.

Trạng thái nút và trạng thái nhấn

Sự kết nối giữa nút và ESP8266, cũng như cấu hình chân của ESP8266, sẽ xác định mối quan hệ giữa trạng thái nút và trạng thái nhấn.

Có hai cách để sử dụng một nút với ESP8266:

  1. Chân của một nút được kết nối với VCC, chân còn lại được kết nối với một chân GPIO của ESP8266 và có một điện trở kéo xuống tới GND
    • Khi nút được nhấn, trạng thái chân của ESP8266 sẽ ở mức HIGH. Nếu không, trạng thái chân sẽ là LOW
    • Chúng ta có thể sử dụng điện trở nội hay ngoại. Điện trở nội đã được tích hợp sẵn trong ESP8266, và có thể được thiết lập thông qua mã ESP8266.
  • Chân của một nút được kết nối với GND, chân còn lại được kết nối với một chân GPIO của ESP8266 và có một điện trở kéo lên tới VCC
    • Khi nút được nhấn, trạng thái chân của ESP8266 sẽ ở mức LOW. Nếu không, trạng thái chân sẽ là HIGH
    • Chúng ta có thể sử dụng điện trở nội hay ngoại. Điện trở nội đã được tích hợp sẵn trong ESP8266, và có thể được thiết lập thông qua mã ESP8266.

    ※ Lưu ý:

    Nếu chúng ta không tuân thủ thực hành tốt nhất, trạng thái của chân đầu vào sẽ là “lơ lửng” khi nút KHÔNG được nhấn. Điều này có nghĩa là trạng thái có thể ở mức CAO hoặc THẤP (không ổn định, không cố định), dẫn đến nhận diện sai.

    • Thực hành tệ nhất: khởi tạo chân ESP8266 ở chế độ đầu vào (bằng cách sử dụng pinMode(BUTTON_PIN, INPUT)) và KHÔNG sử dụng bất kỳ điện trở kéo xuống/kéo lên bên ngoài nào.
    • Thực hành tốt nhất: khởi tạo chân ESP8266 ở chế độ đầu vào có kéo lên nội bộ (bằng cách sử dụng pinMode(BUTTON_PIN, INPUT_PULLUP)). Nó KHÔNG cần sử dụng bất kỳ điện trở kéo xuống hoặc kéo lên bên ngoài nào.

    Để đơn giản hóa, hướng dẫn này sử dụng phương pháp cơ bản nhất: khởi tạo chân GPIO của ESP8266 làm đầu vào có kéo lên nội bộ mà không dùng điện trở ngoài. Người mới không phải lo lắng về việc kết nối điện trở kéo lên/kéo xuống. Tất cả những gì họ cần làm là viết mã ESP8266.

    Sơ đồ đấu dây

    • Sơ đồ đấu dây giữa ESP8266 và nút gắn trên PCB
    sơ đồ đấu dây nút 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.

    • Sơ đồ nối dây giữa ESP8266 và nút gắn trên bảng điều khiển
    sơ đồ nối dây cho nút nhấn hai chân ESP8266 NodeMCU

    This image is created using Fritzing. Click to enlarge image

    Cách Lập Trình Cho Nút

    • Sử dụng hàm pinMode(), đặt pin ESP8266 ở đầu vào có kéo lên nội bộ. Ví dụ, pin D7:
    pinMode(D7, INPUT_PULLUP);
    • Truy cập trạng thái của chân ESP8266 bằng cách sử dụng hàm digitalRead().
    int button_state = digitalRead(BUTTON_PIN);

    ※ Lưu ý:

    Có hai trường hợp sử dụng phổ biến có sẵn:

    • Đầu tiên là thực hiện hành động khi trạng thái đầu vào ở mức cao, và làm ngược lại nếu trạng thái đầu vào ở mức thấp.
    • Thứ hai là thực hiện hành động khi trạng thái đầu vào thay đổi từ mức thấp sang mức cao (hoặc từ mức cao sang mức thấp).

    Chúng ta chọn một trong hai tùy thuộc vào ứng dụng. Ví dụ, nếu chúng ta muốn dùng một nút để điều khiển một đèn LED:

    • Nếu ý định là đèn LED sáng khi nút được nhấn và tắt khi nút không được nhấn, thì nên dùng trường hợp sử dụng đầu tiên.
    • Nếu mục tiêu là đèn LED chuyển giữa Bật và Tắt mỗi lần nhấn nút, thì nên dùng trường hợp sử dụng thứ hai.

    Cách nhận biết sự thay đổi trạng thái từ LOW sang HIGH

    const int BUTTON_PIN = D7; // The ESP8266 pin D7 connected to button int prev_button_state = HIGH; // the previous state from the input pin int button_state; // the current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // initialize the pushbutton pin as an pull-up input // the pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("The state changed from LOW to HIGH"); // save the last state prev_button_state = button_state; }

    Mã nguồn ESP8266

    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 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, chẳng hạn như (ví dụ: NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
    • Gắn ESP8266 vào máy tính của bạn bằng cáp USB.
    • Khởi động Arduino IDE, chọn bo mạch và cổng đúng.
    • Sao chép mã dưới đây và mở nó trong Arduino IDE.
    #define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // 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 switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
    • Nhấn nút Tải lên trên Arduino IDE để biên dịch và tải mã lên bo mạch ESP8266.
    cách tải mã lên ESP8266 NodeMCU bằng Arduino ide
    • Mở Serial Monitor.
    • Nhấn và thả nút nhiều lần.
    • Xem kết quả trong Serial Monitor.
    COM6
    Send
    1 1 1 0 0 0 0 0 0 1 1 1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    1 là CAO, 0 là THẤP.

    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 bình luận của mã nguồn!

    Chỉnh sửa mã ESP8266

    Hãy thay đổi mã để nó có thể phát hiện khi xảy ra sự kiện nhấn và thả.

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

    • Nối các thành phần như được hiển thị trong sơ đồ.
    • Kết nối bảng 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, chẳng hạn như (ví dụ: NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
    • Chỉnh sửa mã như sau:
    /* * 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 */ #define BUTTON_PIN D7 // The ESP8266 pin D7 connected to button int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // 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 switch/button: button_state = digitalRead(BUTTON_PIN); if (prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if (prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
    • Nhấp vào nút Tải lên trên Arduino IDE để biên dịch và tải mã lên ESP8266.
    tải mã lên Arduino ide
    • Mở Serial Monitor.
    • Nhấn nút và giữ nó xuống.
    • Thả nút và quan sát kết quả trong Serial Monitor.
    COM6
    Send
    The button is pressed The button is released
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    ※ Lưu ý:

    Ngay cả khi bạn nhấn và thả nút chỉ một lần, đầu ra trên Serial Monitor có thể hiển thị nhiều sự kiện nhấn và thả. Đây là hành vi mong đợi của nút. Điều này được gọi là "hiện tượng rung lắc". Để biết thêm thông tin, vui lòng tham khảo Hướng dẫn khử rung nút ESP8266.

    ※ Lưu ý:

    • Chúng tôi đã phát triển một thư viện, có tên ezButton, nhằm làm cho việc bắt đầu trở nên đơn giản hơn cho những người mới bắt đầu, đặc biệt là khi sử dụng nhiều nút. Bạn có thể tìm hiểu thêm về thư viện ezButton ở đây.
    • Nếu bạn đang sử dụng mô-đun nút, hãy cấu hình chân ở chế độ đầu vào bằng pinMode(BUTTON_PIN, INPUT). Với thiết lập này, mô-đun sẽ xuất LOW khi nút chưa được nhấn và HIGH khi nút được nhấn.

    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.

    Thách thức bản thân

    • Khi nút được nhấn, bật đèn LED.
    • Khi nút không được nhấn, tắt đèn LED.
    • Mỗi lần nút được nhấn, đèn LED sẽ chuyển giữa hai trạng thái BẬT và TẮT.

    Kiến thức bổ sung

    1. Khi nào chúng ta KHÔNG NÊN sử dụng điện trở kéo xuống hoặc kéo lên cho một pin đầu vào? 2. Khi nào chúng ta KHÔNG NÊN sử dụng điện trở kéo xuống hoặc kéo lên cho một pin đầu vào?
    • Nếu cảm biến có trạng thái đóng hoặc mở, một điện trở kéo lên hoặc kéo xuống là cần thiết để làm cho các trạng thái này ở mức thấp và cao. Ví dụ về các cảm biến như vậy là nút nhấn, công tắc, công tắc tiếp xúc từ (cảm biến cửa).
    • Ngược lại, nếu cảm biến có hai mức điện áp được định nghĩa (thấp và cao), một điện trở kéo lên hoặc kéo xuống là không cần thiết. Ví dụ về các cảm biến như vậy là cảm biến chuyển động và cảm biến cảm ứng.

    Tham khảo hàm