ESP8266 Đếm số lần nhấn nút OLED

Hướng dẫn này chỉ cho bạn cách sử dụng ESP8266 và nút nhấn để đếm các sự kiện nhấn và sau đó hiển thị giá trị lên OLED. Cụ thể:

Trong hướng dẫn này, chúng ta sẽ thực hiện debounce cho một nút mà không sử dụng hàm delay(). Để biết thêm về lý do tại sao debounce lại cần thiết, vui lòng xem Tại sao chúng ta cần debounce?

Bạn có thể điều chỉnh nó để hoạt động với các cảm biến khác thay vì 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×SSD1306 I2C OLED Display 128x64
1×SSD1306 I2C OLED Display 128x32
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)

Về OLED và Nút

Nếu bạn chưa quen với OLED và nút (sơ đồ chân, chức năng, 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 ESP8266 NodeMCU với nút nhấn và màn hình oLED

This image is created using Fritzing. Click to enlarge image

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

ESP8266 Mã nguồn - Hiển thị số lần nhấn nút trên OLED

/* * 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-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(7); // create ezButton object for pin 7; unsigned long prev_count = 0; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(2); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display button.setDebounceTime(50); // set debounce time to 50 milliseconds button.setCountMode(COUNT_FALLING); } void loop() { button.loop(); // MUST call the loop() function first unsigned long count = button.getCount(); if (prev_count != count) { Serial.println(count); // print count to Serial Monitor oled.clearDisplay(); // clear display oled.println(count); // display count oled.display(); // show on OLED prev_count != count; } }

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 xem bài hướng dẫn ESP8266 - Cài đặt phần mềm này 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 board 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 đúng, ví dụ (NodeMCU 1.0 (ESP-12E Module)), và cổng COM tương ứng của nó.
  • Nhấp vào biểu tượng Libraries ở thanh bên trái của Arduino IDE.
  • Tìm kiếm “ezButton”, sau đó xác định thư viện nút bấm do ArduinoGetStarted cung cấp.
  • Nhấn nút Install để cài đặt thư viện ezButton.
thư viện nút ESP8266 NodeMCU
  • Tìm kiếm “SSD1306” và xác định thư viện SSD1306 do Adafruit tạo ra.
  • Nhấn nút Cài đặt để thêm thư viện.
thư viện oLED cho ESP8266 NodeMCU
  • Bạn sẽ được nhắc cài đặt thêm các phụ thuộc thư viện.
  • Để cài đặt tất cả chúng, hãy nhấp nút Cài đặt Tất cả.
thư viện cảm biến adafruit gfx cho ESP8266 NodeMCU
  • Sao chép mã và mở nó bằng Arduino IDE.
  • Nhấn nút Tải lên trên Arduino IDE để biên dịch và tải mã lên ESP8266.
  • Nhấn nút nhiều lần.
  • Xem số đếm thay đổi trên OLED.

Đoạn mã ở trên cho thấy số lần nhấn nút ở góc trên bên trái. Hãy thực hiện một thay đổi để căn giữa nó!

Mã ESP8266 - Căn giữa theo chiều dọc và theo chiều ngang trên OLED

/* * 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-count-oled */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ezButton.h> #define OLED_WIDTH 128 // OLED display width, in pixels #define OLED_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); // create SSD1306 display object connected to I2C ezButton button(7); // create ezButton object for pin 7; unsigned long prev_count = 0; void setup() { Serial.begin(9600); // initialize OLED display with address 0x3C for 128x64 if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); while (true); } delay(2000); // wait for initializing oled.clearDisplay(); // clear display oled.setTextSize(2); // text size oled.setTextColor(WHITE); // text color oled.setCursor(0, 10); // position to display button.setDebounceTime(50); // set debounce time to 50 milliseconds button.setCountMode(COUNT_FALLING); } void loop() { button.loop(); // MUST call the loop() function first unsigned long count = button.getCount(); if (prev_count != count) { Serial.println(count); // print count to Serial Monitor String text = String(count); oled_display_center(text); prev_count != count; } } void oled_display_center(String text) { int16_t x1; int16_t y1; uint16_t width; uint16_t height; oled.getTextBounds(text, 0, 0, &x1, &y1, &width, &height); // center the display both horizontally and vertically oled.clearDisplay(); // clear display oled.setCursor((OLED_WIDTH - width) / 2, (OLED_HEIGHT - height) / 2); oled.println(text); // text to display oled.display(); }

※ Lưu ý:

Đoạn mã này sẽ căn giữa văn bản theo chiều ngang và chiều dọc trên màn hình OLED. Để biết thêm thông tin, vui lòng tham khảo Cách căn giữa theo chiều dọc và chiều ngang trên OLED.

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.