ESP32 kết hợp với màn hình cảm ứng TFT 2.8 inch
Nâng cao10/5/2024

ESP32 kết hợp với màn hình cảm ứng TFT 2.8 inch

Tạo IoT Dashboard đẹp mắt với màn hình cảm ứng TFT ILI9341 và thư viện LVGL.

TFTDisplayLVGLTouchESP32
278 lượt thích189 người đã làm30 phút6 bước4 linh kiện
← Quay lại dự án
Hướng dẫn chi tiết

Phần 4: Xử lý sự kiện từ màn hình cảm ứng

1. Giới thiệu về xử lý sự kiện trong LVGL, 2. Cấu hình cảm ứng cho màn hình TFT, 3. Lập trình xử lý sự kiện khi người dùng chạm vào màn hình, 4. Tạo phản hồi cho các sự kiện (ví dụ: thay đổi màu sắc, hiển thị thông báo), 5. Kiểm tra và gỡ lỗi sự kiện

Cập nhật 31/05/2026

Phần 4: Xử lý sự kiện từ màn hình cảm ứng

1. Giới thiệu về xử lý sự kiện trong LVGL

Trong LVGL (LittlevGL), việc xử lý sự kiện là một phần quan trọng giúp giao diện người dùng (UI) trở nên tương tác hơn. Sự kiện có thể được kích hoạt từ nhiều nguồn khác nhau, trong đó màn hình cảm ứng là một nguồn phổ biến. Khi người dùng chạm vào màn hình, LVGL sẽ gửi các sự kiện cho các đối tượng UI tương ứng, cho phép chúng phản hồi theo cách mà lập trình viên đã định nghĩa.

2. Cấu hình cảm ứng cho màn hình TFT

Để bắt đầu xử lý sự kiện từ màn hình cảm ứng TFT, trước tiên chúng ta cần cấu hình cảm ứng cho màn hình. Dưới đây là các bước cần thực hiện:

  1. Kết nối cảm ứng với ESP32: Đảm bảo rằng cảm ứng của màn hình TFT được kết nối đúng cách với ESP32. Thông thường, màn hình cảm ứng ILI9341 sẽ sử dụng giao thức SPI.
  2. Thêm thư viện cảm ứng: Sử dụng thư viện TouchScreen hoặc Adafruit_TouchScreen để đọc dữ liệu từ cảm ứng. Bạn có thể cài đặt thư viện này từ Library Manager trong Arduino IDE.

#include <TFT_eSPI.h>
#include <TouchScreen.h>

// Định nghĩa các chân kết nối
#define TCLK  23
#define TMISO 19
#define TMOSI 18
#define TCS   5

TFT_eSPI tft = TFT_eSPI(); // Khởi tạo đối tượng TFT
TouchScreen ts = TouchScreen(TCLK, TMISO, TMOSI, TCS); // Khởi tạo đối tượng Touchscreen

3. Lập trình xử lý sự kiện khi người dùng chạm vào màn hình

Để xử lý sự kiện chạm, chúng ta cần kiểm tra xem có sự kiện chạm nào xảy ra hay không và xác định vị trí chạm trên màn hình. Dưới đây là một đoạn mã mẫu để thực hiện việc này:


void loop() {
    TSPoint p = ts.getPoint(); // Lấy điểm chạm từ cảm ứng
    pinMode(T_CS, OUTPUT); // Thiết lập chân CS
    digitalWrite(T_CS, HIGH); // Đặt chân CS cao

    if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { // Kiểm tra áp lực chạm
        // Chuyển đổi tọa độ từ cảm ứng sang tọa độ màn hình
        int x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
        int y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
        
        // Xử lý sự kiện chạm
        handleTouchEvent(x, y);
    }
}

void handleTouchEvent(int x, int y) {
    // Kiểm tra vị trí chạm và thực hiện hành động tương ứng
    if (x > 50 && x < 150 && y > 50 && y < 150) {
        // Ví dụ: Nếu chạm vào vùng này, thực hiện một hành động
        Serial.println("Chạm vào khu vực 1");
    }
}

4. Tạo phản hồi cho các sự kiện

Phản hồi cho các sự kiện chạm có thể được thực hiện bằng cách thay đổi màu sắc, hiển thị thông báo hoặc thực hiện các hành động khác. Dưới đây là ví dụ về cách thay đổi màu sắc của một nút khi người dùng chạm vào nó:


void handleTouchEvent(int x, int y) {
    if (x > 50 && x < 150 && y > 50 && y < 150) {
        tft.fillRect(50, 50, 100, 100, TFT_RED); // Thay đổi màu sắc của nút
        Serial.println("Chạm vào khu vực 1");
    } else {
        tft.fillRect(50, 50, 100, 100, TFT_GREEN); // Trở về màu sắc ban đầu
    }
}

Lưu ý: Đảm bảo rằng bạn đã định nghĩa các màu sắc và các tọa độ chính xác cho các nút trên màn hình TFT của bạn.

5. Kiểm tra và gỡ lỗi sự kiện

Để kiểm tra và gỡ lỗi sự kiện, bạn có thể sử dụng Serial Monitor để in ra thông tin về tọa độ chạm và các sự kiện xảy ra. Điều này sẽ giúp bạn xác định xem mã của bạn có hoạt động như mong muốn hay không.


void loop() {
    TSPoint p = ts.getPoint();
    pinMode(T_CS, OUTPUT);
    digitalWrite(T_CS, HIGH);

    if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
        int x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width());
        int y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height());
        
        Serial.print("Chạm tại: ");
        Serial.print("X: ");
        Serial.print(x);
        Serial.print(" Y: ");
        Serial.println(y);
        
        handleTouchEvent(x, y);
    }
}

Việc kiểm tra các giá trị tọa độ sẽ giúp bạn điều chỉnh vùng nhấn của các nút hoặc các đối tượng khác trên màn hình, đảm bảo rằng người dùng có thể tương tác một cách dễ dàng và chính xác.

Kết luận

Xử lý sự kiện từ màn hình cảm ứng là một bước quan trọng trong việc phát triển các ứng dụng IoT tương tác. Bằng cách sử dụng LVGL cùng với màn hình TFT, bạn có thể tạo ra giao diện đẹp mắt và dễ sử dụng cho các dự án của mình. Hãy thử nghiệm và sáng tạo với các phản hồi khác nhau để cải thiện trải nghiệm người dùng!