Thiết bị trả lời trắc nghiệm sử dụng tay khiển RF từ xa

09/10/2026
thiet-bi-tra-loi-trac-nghiem-su-dung-tay-khien-rf-tu-xa

Thiết bị trả lời trắc nghiệm sử dụng tay khiển RF từ xa

Tôi sẽ thiết kế chương trình ESP32 kết hợp 5 tay điều khiển RF để tổ chức trò chơi trả lời câu hỏi trắc nghiệm trên giao diện Web, lập trình bằng Visual Studio Code + PlatformIO.

Hệ thống phù hợp để tổ chức thi kiến thức STEM, trò chơi Rung chuông vàng hoặc thi trắc nghiệm giữa 5 học sinh/5 đội.

1. Nguyên lý hoạt động

Mỗi học sinh hoặc đội chơi có một tay điều khiển RF gồm 4 nút:

  • Nút A: Chọn đáp án A.

  • Nút B: Chọn đáp án B.

  • Nút C: Chọn đáp án C.

  • Nút D: Chọn đáp án D.

ESP32 nhận tín hiệu từ mạch RF, xác định tay điều khiển số mấy và đáp án được chọn, sau đó cập nhật lên trang Web theo thời gian thực.

2. Các chức năng của Web

Tôi đề xuất giao diện có:

  1. Hiển thị câu hỏi và 4 đáp án A/B/C/D.

  2. Hiển thị trạng thái trả lời của 5 người chơi.

  3. Có đồng hồ đếm ngược 10–60 giây.

  4. Mỗi người chỉ được chọn một đáp án cho mỗi câu, hoặc cho phép đổi đáp án trước khi hết giờ.

  5. Tự động chấm điểm khi kết thúc câu hỏi.

  6. Hiển thị bảng xếp hạng và tổng điểm.

  7. Nút Bắt đầu, Câu tiếp theo, Đặt lại và Kết thúc.

  8. Cho phép điện thoại, máy tính kết nối Wi-Fi của ESP32 để điều khiển và xem kết quả.

ESP32 có thể tự phát Wi-Fi, không cần Internet.

3. Phần cứng và đấu nối

Giả sử sử dụng 5 tay RF 433 MHz loại 4 nút, mã cố định EV1527 hoặc PT2262, kết hợp mạch thu RF có chân DATA.

Mạch thu RF

ESP32

VCC

3.3V (nếu module hỗ trợ)

GND

GND

DATA

GPIO 27

Nếu mạch thu cần nguồn 5V và xuất DATA 5V, phải hạ mức tín hiệu DATA xuống 3.3V trước khi nối ESP32.

4. Chương trình Visual Studio Code

Đầu tiên, tạo dự án PlatformIO cho ESP32 Dev Module.

File platformio.ini:


[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

lib_deps =
    sui77/rc-switch@^2.6.4

Đây là chương trình kiểm tra mã RF của 5 tay điều khiển. Cần đọc mã của 20 nút trước khi ghép vào phần mềm trắc nghiệm.

File src/main.cpp:

 


#include <Arduino.h>
#include <RCSwitch.h>

#define RF_PIN 27

RCSwitch rf = RCSwitch();

void setup() {
  Serial.begin(115200);

  rf.enableReceive(digitalPinToInterrupt(RF_PIN));

  Serial.println("=== ESP32 RF 433MHz ===");
  Serial.println("Nhan nut tren 5 tay dieu khien");
}

void loop() {
  if (rf.available()) {
    unsigned long code = rf.getReceivedValue();

    Serial.printf(
      "RF CODE: %lu | BITS: %u | PROTOCOL: %u\n",
      code,
      rf.getReceivedBitlength(),
      rf.getReceivedProtocol()
    );

    rf.resetAvailable();
  }
}

 

Khi bấm từng nút, Serial Monitor sẽ hiển thị mã. Ví dụ:

Sau khi đọc được 20 mã, chúng ta sẽ lập trình phần Web, xử lý nhận đáp án, đếm thời gian, chấm điểm và bảng xếp hạng. Mạch thu một kênh có thể nhận cả 5 tay, nhưng nếu nhiều người bấm chính xác cùng lúc có thể xảy ra va chạm tín hiệu.

5. Xác nhận loại tay điều khiển

Tiếp tục viết chương trình hoàn chỉnh

Bạn cũng có thể gửi ảnh tay điều khiển RF và mạch thu RF đang sử dụng để tôi xác định đúng giao thức, chân đấu nối và viết code phù hợp với phần cứng thực tế.

Mạch trong ảnh là bộ thu – phát RF ASK/OOK loại phổ thông, thường dùng tần số 433 MHz hoặc 315 MHz. Có thể sử dụng với ESP32 để nhận tín hiệu từ 5 tay điều khiển RF, phù hợp với hệ thống trắc nghiệm mà chúng ta đang xây dựng.

1. Xác định mạch trong ảnh

ư

Mạch thu RF

Bo có cuộn dây đồng, linh kiện chỉnh tần số và 4 chân kết nối.

Mạch phát FS1000A

Bo 3 chân DATA, VCC, GND, có vị trí ANT.

Trong ảnh bạn gửi:

  • Mạch phía trên: Mạch thu RF 4 chân, dạng XY-MK-5V hoặc tương đương.

  • Mạch phía dưới: Mạch phát RF FS1000A, không cần dùng nếu 5 tay điều khiển đã có bộ phát riêng.

2. Sơ đồ đấu nối mạch thu với ESP32

Mạch thu RF

ESP32

VCC

5V (nếu module đúng loại 5V)

GND

GND

DATA

GPIO 27 qua mạch hạ mức áp

DATA thứ hai

Không cần nối

Lưu ý: Mạch thu cấp nguồn 5V có thể xuất tín hiệu DATA gần 5V. Không nối trực tiếp với GPIO ESP32. Có thể dùng bộ chuyển mức logic hoặc cầu chia điện trở 10kΩ và 20kΩ.

3. Khả năng nhận tín hiệu 5 tay điều khiển

Một mạch thu này có thể tiếp nhận tín hiệu của cả 5 tay điều khiển, với điều kiện cùng tần số và giao thức tương thích.

ESP32 sẽ phân biệt bằng mã RF:

Tay điều khiển

Nút A

Nút B

Nút C

Nút D

Tay 1

Mã 1A

Mã 1B

Mã 1C

Mã 1D

Tay 2

Mã 2A

Mã 2B

Mã 2C

Mã 2D

Tay 3

Mã 3A

Mã 3B

Mã 3C

Mã 3D

Tay 4

Mã 4A

Mã 4B

Mã 4C

Mã 4D

Tay 5

Mã 5A

Mã 5B

Mã 5C

Mã 5D

Điểm cần chú ý: Mạch này là bộ thu đơn giản, không xử lý được hai tín hiệu phát chồng nhau một cách đáng tin cậy. Nếu 5 học sinh bấm cùng lúc, có thể bị mất đáp án. Với trò chơi không đòi hỏi độ chính xác tuyệt đối khi bấm đồng thời, vẫn có thể dùng để thử nghiệm.

4. Hướng phát triển chương trình

Tôi đề xuất ESP32 có chức năng HỌC MÃ RF trực tiếp trên Web:

  1. Chọn tay điều khiển số 1 trên Web.

  2. Bấm nút A trên tay, ESP32 tự lưu mã RF.

  3. Lặp lại với B, C, D.

  4. Tiếp tục cho các tay 2–5.

  5. Lưu 20 mã vào bộ nhớ ESP32 để không mất khi tắt nguồn.

Sau đó hệ thống tự nhận diện người chơi và đáp án.

Thiết bị

Cấu hình

Vi điều khiển

ESP32 DevKit V1

Tay điều khiển

5 remote RF 433 MHz

Số nút mỗi tay

4 nút A, B, C, D

Mạch thu

RF 433 MHz, loại 4 chân như ảnh

Chân nhận RF

GPIO 27

Lập trình

Visual Studio Code + PlatformIO

Giao diện

Web chạy trực tiếp trên ESP32

Kết nối

Wi-Fi AP, không cần Internet

Tôi đề xuất chương trình có 2 chế độ thi:

  • Trắc nghiệm đồng thời: Cả 5 người cùng chọn A/B/C/D, ESP32 ghi nhận đáp án từng người, hết thời gian sẽ chấm điểm.

  • Bấm nhanh giành quyền: Ai bấm trước được quyền trả lời, Web hiển thị người bấm đầu tiên. Lưu ý RF 433 MHz loại này không bảo đảm phân xử chính xác khi nhiều tay phát trùng thời điểm.

Web sẽ có chức năng học mã của cả 20 nút RF, lưu vào bộ nhớ ESP32, nhập câu hỏi và đáp án đúng, đếm ngược thời gian, chấm điểm và xếp hạng.

Một điểm kỹ thuật quan trọng: Trước khi tích hợp toàn bộ, cần chạy chương trình đọc mã RF để xác nhận 5 remote dùng giao thức tương thích với thư viện RCSwitch (chẳng hạn EV1527/PT2262). Cùng tần số 433 MHz chưa đủ để bảo đảm giải mã được.

Tôi sẽ thiết kế theo hướng có thể đổi giữa hai chế độ thi ngay trên Web, và cho phép người chơi thay đổi đáp án trước khi hết giờ. Mặc định mỗi câu đúng được 10 điểm, sai được 0 điểm.

Chương trình sẽ nhận tín hiệu từ các tay điều khiển, đọc mã RF của từng nút A, B, C, D và hiển thị trên Serial Monitor.

1. Sơ đồ đấu nối

Mạch thu RF 433 MHz loại 4 chân như ảnh bạn gửi:

Mạch thu RF

ESP32

VCC

5V (nếu đúng module thu 5V)

GND

GND

DATA

GPIO 27 qua cầu chia áp

DATA còn lại

Không kết nối

Để hạ tín hiệu DATA 5V xuống khoảng 3.3V, dùng điện trở:

RF DATA ───[10kΩ]────┬──── GPIO 27 ESP32
                     |
                   [20kΩ]
                     |
                    GND

Nếu mạch thu hoạt động ổn định ở 3.3V và DATA không vượt 3.3V, có thể cấp 3.3V và nối DATA trực tiếp.

2. File platformio.ini


[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

lib_deps =
    sui77/rc-switch@^2.6.4

3. File src/main.cpp

Chương trình có lọc tín hiệu lặp để khi giữ một nút, Serial không liên tục in cùng một mã.


#include <Arduino.h>
#include <RCSwitch.h>

#define RF_PIN 27

RCSwitch mySwitch = RCSwitch();

unsigned long lastCode = 0;
unsigned long lastPrintTime = 0;

const unsigned long FILTER_TIME = 350;

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.println();
  Serial.println("================================");
  Serial.println("   ESP32 - RF 433MHz TEST");
  Serial.println("================================");

  pinMode(RF_PIN, INPUT);

  mySwitch.enableReceive(
    digitalPinToInterrupt(RF_PIN)
  );

  Serial.println("RF Receiver: GPIO 27");
  Serial.println("Dang cho tin hieu RF...");
  Serial.println("Bam nut A B C D tren remote");
  Serial.println();
}

void loop() {

  if (mySwitch.available()) {

    unsigned long code =
      mySwitch.getReceivedValue();

    unsigned int bits =
      mySwitch.getReceivedBitlength();

    unsigned int protocol =
      mySwitch.getReceivedProtocol();

    unsigned int pulse =
      mySwitch.getReceivedDelay();

    unsigned long now = millis();

    if (code != 0) {

      if (code != lastCode ||
          now - lastPrintTime > FILTER_TIME) {

        Serial.println();
        Serial.println("---------------------------");

        Serial.print("RF CODE DEC : ");
        Serial.println(code);

        Serial.print("RF CODE HEX : 0x");
        Serial.println(code, HEX);

        Serial.print("BIT LENGTH  : ");
        Serial.println(bits);

        Serial.print("PROTOCOL    : ");
        Serial.println(protocol);

        Serial.print("PULSE       : ");
        Serial.print(pulse);
        Serial.println(" us");

        Serial.print("BINARY      : ");
        Serial.println(code, BIN);

        Serial.println("---------------------------");

        lastCode = code;
        lastPrintTime = now;
      }
    }

    mySwitch.resetAvailable();
  }
}

4. Kết quả dự kiến trên Serial Monitor

Khi bấm nút A trên remote:

================================
   ESP32 - RF 433MHz TEST
================================
RF Receiver: GPIO 27
Dang cho tin hieu RF...

---------------------------
RF CODE DEC : 527841
RF CODE HEX : 0x80DE1
BIT LENGTH  : 24
PROTOCOL    : 1
PULSE       : 320 us
BINARY      : 10000000110111100001
---------------------------

Đây là dữ liệu minh họa. Mã thực tế sẽ phụ thuộc từng remote.

5. Quy trình kiểm tra 5 remote

Lần lượt bấm các nút và ghi nhận mã:

Bảng ghi mã RF

Sao chép

Remote

A

B

C

D

Tay 1

Tay 2

Tay 3

Tay 4

Tay 5

Nhập mã RF CODE DEC đọc được từ Serial Monitor vào các ô tương ứng.

Lưu ý khi kiểm tra:

  • Bấm mỗi nút khoảng 0,5 giây.

  • Nếu mã thay đổi mỗi lần bấm cùng một nút, cần kiểm tra lại giao thức remote.

  • Nếu không nhận được tín hiệu, kiểm tra nguồn, chân DATA, tần số và thử gắn anten dây khoảng 17,3 cm cho mạch thu 433 MHz.

  • Nếu hai tay có mã giống nhau, ESP32 sẽ không phân biệt được chúng bằng mã đó; cần đổi hoặc học lại mã remote nếu phần cứng hỗ trợ.

Sau khi nạp chương trình, bạn hãy gửi tôi kết quả Serial Monitor khi bấm lần lượt A, B, C, D của tay số 1. Tôi sẽ kiểm tra giao thức và tiếp tục viết chương trình tự nhận diện đủ 5 tay điều khiển.

RF CODE DEC : 5592323
RF CODE HEX : 0x555503
BIT LENGTH  : 24
PROTOCOL    : 1
PULSE       : 474 us
BINARY      : 10101010101010100000011
---------------------------

---------------------------
RF CODE DEC : 5592512
RF CODE HEX : 0x5555C0
BIT LENGTH  : 24
PROTOCOL    : 1
PULSE       : 473 us
BINARY      : 10101010101010111000000

Tôi sẽ viết chương trình ESP32 nhận tín hiệu từ 5 tay điều khiển RF 433 MHz và hiển thị đáp án A/B/C/D trên LCD 2004 (20×4) giao tiếp I2C.

Mỗi tay điều khiển tương ứng với một người chơi. Khi bấm A, B, C hoặc D, LCD sẽ cập nhật ngay đáp án của người đó.

1. Giao diện LCD 2004

3. File platformio.ini

4. Code đầy đủ src/main.cpp

Chương trình hỗ trợ học mã RF của 20 nút qua Serial Monitor, lưu mã vào bộ nhớ ESP32 và hiển thị đáp án trên LCD. Không cần nhập trước mã của 5 tay.

5. Cách sử dụng

  1. Nạp chương trình vào ESP32, mở Serial Monitor tốc độ 115200.

  2. Gõ L rồi Enter để bắt đầu học mã.

  3. LCD yêu cầu bấm lần lượt A, B, C, D của tay số 1, sau đó tay 2, 3, 4, 5.

  4. Sau khi học đủ 20 nút, ESP32 tự lưu mã vào bộ nhớ Flash.

  5. Bấm bất kỳ nút nào trên 5 tay, LCD sẽ hiển thị đáp án tương ứng.

  6. Gõ R để xóa đáp án trên LCD và bắt đầu câu hỏi mới. Gõ S để xem các mã đã lưu.

Lưu ý khi học mã: Bấm rồi nhả từng nút, đợi LCD chuyển sang nút tiếp theo mới bấm tiếp. Không giữ nút quá lâu vì tín hiệu lặp có thể bị nhận thành lần bấm tiếp theo. Nếu học nhầm, gõ L để học lại từ đầu; chỉ khi học đủ 20 nút, bảng mã mới được lưu.

Hiện tại chương trình cho phép người chơi thay đổi đáp án A/B/C/D bất kỳ lúc nào. Phần khóa đáp án, thời gian trả lời và chấm điểm sẽ được tích hợp ở bước tiếp theo.

Nếu LCD không hiển thị, hãy kiểm tra địa chỉ I2C. Chương trình đang sử dụng 0x27; một số LCD 2004 dùng địa chỉ 0x3F.

Có một lưu ý: GPIO 15 là chân strapping của ESP32, nên không giữ nút START khi cấp nguồn hoặc reset. GPIO 16 và 17 sử dụng được trên ESP32 DevKit V1 thông thường, nhưng cần kiểm tra nếu dùng phiên bản ESP32 có PSRAM.

1. Sơ đồ kết nối

Chức năng

GPIO ESP32

Kiểu kết nối

START

GPIO 15

Nút nhấn xuống GND

STOP

GPIO 16

Nút nhấn xuống GND

NEXT

GPIO 17

Nút nhấn xuống GND

BACK

GPIO 18

Nút nhấn xuống GND

RF 433 MHz DATA

GPIO 27

Tín hiệu RF

LCD SDA

GPIO 21

I2C

LCD SCL

GPIO 22

I2C

Cả 4 nút đều sử dụng INPUT_PULLUP:

  • Không nhấn: HIGH.

  • Nhấn: LOW.

  • Không cần điện trở kéo lên bên ngoài.

2. Quy định chức năng 4 nút

START

GPIO 15

Bắt đầu / xác nhận

STOP

GPIO 16

Dừng / thoát

NEXT

GPIO 17

Tiếp theo

BACK

GPIO 18

Quay lại

Tôi thiết kế cách điều khiển như sau:

Thao tác

Chức năng

Nhấn START

Bắt đầu nhận đáp án, khóa đáp án cũ

Nhấn STOP

Dừng nhận đáp án

Nhấn NEXT

Sang câu mới, xóa đáp án 5 tay

Nhấn BACK

Quay lại câu trước, khôi phục đáp án đã lưu của câu đó

Giữ START 3 giây khi đang dừng

Vào menu quản lý RF

NEXT/BACK trong menu

Chuyển lựa chọn

START trong menu

Xác nhận

STOP trong menu

Thoát

Menu HỌC MÃ

Học 20 nút của 5 remote

Menu XÓA MÃ

Xóa toàn bộ mã RF đã lưu

Menu XEM MÃ

Xem mã từng nút trên LCD

Mã RF sẽ được lưu vào bộ nhớ Flash của ESP32, không mất khi tắt nguồn. Phần đáp án câu hỏi chỉ lưu trong RAM, nên sẽ mất khi khởi động lại.

5. Quy trình chạy thử

Bước 1 – Học mã RF

Khi LCD đang STOP, giữ START 3 giây, chọn HOC MA RF, rồi nhấn START. Bấm và nhả lần lượt 20 nút của 5 remote theo yêu cầu trên LCD.

Bước 2 – Kiểm tra mã

Vào menu XEM MA DA LUU, dùng NEXT/BACK để kiểm tra mã từng nút.

Bước 3 – Nhận đáp án

Thoát menu, nhấn START. Lần lượt bấm các remote, LCD sẽ hiển thị đáp án của 5 người chơi. Nhấn STOP để khóa nhận tín hiệu.

Bước 4 – Sang câu mới

Nhấn NEXT để chuyển câu, rồi START để bắt đầu nhận đáp án mới. BACK quay về câu trước và xem lại đáp án đã lưu.

Trong chương trình ESP32 vừa viết, bạn có thể xóa toàn bộ 20 mã RF đã lưu của 5 tay điều khiển bằng 4 nút nhấn, không cần kết nối máy tính.

Các bước xóa mã RF

  1. Nhấn STOP (GPIO 16) để dừng chương trình.

  2. Giữ START (GPIO 15) trong 3 giây để vào menu quản lý RF.

  3. Nhấn NEXT (GPIO 17) hai lần để chọn XOA TOAN BO MA.

  4. Nhấn START để vào chức năng xóa.

  5. LCD hiển thị:

=== XOA MA RF ===

XOA TOAN BO 20 MA?

START: XAC NHAN

STOP: HUY

6. Nhấn START lần nữa để xác nhận xóa.

Sau khi xóa:

  • Toàn bộ 20 mã RF trong bộ nhớ Flash sẽ bị xóa.

  • ESP32 không còn nhận diện được 5 tay điều khiển cho đến khi học mã lại.

  • Không cần khởi động lại ESP32.

  • Nhấn STOP để thoát menu.

Lưu ý: Chương trình hiện tại chỉ hỗ trợ xóa toàn bộ 20 mã cùng lúc, chưa hỗ trợ xóa riêng một nút hoặc một tay.

Bạn có muốn tôi sửa chương trình để có thêm XÓA 1 TAY, XÓA 1 NÚT và XÓA TẤT CẢ, thao tác trực tiếp trên LCD bằng 4 nút START, STOP, NEXT, BACK không?

-----------------------------------------------

Phần giao diện web:

tôi muốn tạo 1 giao diện web: để đưa đề bài câu hỏi và đáp án lựa chọn bằng cách tải file, ví dụ; số lượng; 5 câu hỏi, mỗi câu gồm: câu hỏi chính và 4 đáp án, đáp án đúng chọn 1 trong 4 đáp án. trả lời hết 5 câu sẽ có Bảng tổng hợp kết quả của 5 người.

Tôi sẽ nâng cấp chương trình ESP32 + 5 tay điều khiển RF 433 MHz + LCD 2004 thành hệ thống thi trắc nghiệm trên Web, có thể tải bộ câu hỏi từ file, tổ chức thi và tự động tổng hợp kết quả của 5 người chơi.

Hệ thống sẽ hoạt động độc lập, ESP32 phát Wi-Fi để máy tính hoặc điện thoại truy cập, không cần Internet.

1. Thiết kế giao diện Web

RF QUIZ – STEM

Hệ thống trắc nghiệm 5 người chơi

ESP32

5

Người chơi

5

Câu hỏi mẫu

10

Điểm / câu

Câu 1/5

Đang nhận đáp án

Thiết bị nào được sử dụng để đo nhiệt độ?

A

Cảm biến siêu âm

B

Cảm biến nhiệt độ

C

Động cơ Servo

D

Module Relay

Đáp án 5 người chơi

Người 1

A

Người 2

B

Người 3

-

Người 4

D

Người 5

B

START

STOP

NEXT

BACK

Giao diện minh họa. Trong chương trình thực tế, các nút Web và nút vật lý trên ESP32 sẽ được đồng bộ.

2. File tải câu hỏi lên ESP32

Tôi chọn định dạng CSV UTF-8, vì dễ tạo bằng Excel và có thể lưu nhiều câu hỏi mà không cần sửa chương trình.

Ví dụ file cauhoi.csv:

STT

Câu hỏi

A

B

C

D

Đáp án đúng

1

ESP32 có Wi-Fi không?

Có

Không

Chỉ Bluetooth

Chỉ RF

A

2

Đơn vị điện áp là gì?

Ampe

Ohm

Volt

Watt

C

3

Arduino UNO sử dụng chip nào?

ESP8266

ATmega328P

ESP32

STM32

B

4

Cảm biến DHT11 đo gì?

Ánh sáng

Khoảng cách

Áp suất

Nhiệt độ và độ ẩm

D

5

GPIO có nghĩa là gì?

Bộ nhớ

Chân vào/ra đa dụng

Bộ nguồn

Giao tiếp mạng

B

Trên Web sẽ có chức năng tải file, kiểm tra dữ liệu, thông báo số lượng câu hỏi hợp lệ và lưu bộ đề vào ESP32.

3. Bảng tổng hợp sau khi hoàn thành 5 câu

Bảng kết quả thi

Ví dụ

Người chơi

C1

C2

C3

C4

C5

Điểm

Tay 1

A

C

B

D

B

50

Tay 2

B

C

B

A

B

30

Tay 3

A

C

A

D

B

40

Tay 4

A

D

B

D

A

30

Tay 5

A

C

B

D

A

40

Đáp án đúng màu xanh, đáp án sai màu đỏ. Mỗi câu đúng được 10 điểm.

Sau khi thi xong, Web sẽ có bảng xếp hạng theo điểm, số câu đúng/sai, và chức năng tải kết quả ra CSV để mở bằng Excel.

4. Quy trình điều khiển

Tôi giữ nguyên 4 nút vật lý GPIO 15, 16, 17, 18 và chức năng học mã RF hiện tại. Phần thi sẽ có quy trình:

  1. Tải bộ đề lên Web, ví dụ 5 câu.

  2. Nhấn START để bắt đầu câu 1. ESP32 nhận đáp án từ 5 remote.

  3. Nhấn STOP để kết thúc nhận đáp án, chấm điểm câu 1.

  4. Nhấn NEXT để chuyển sang câu 2, rồi START để tiếp tục.

  5. Lặp lại đến câu 5. Sau khi kết thúc, Web hiển thị bảng tổng hợp và xếp hạng.

Trong lúc đang trả lời, Web chỉ hiển thị đáp án người chơi đã chọn, không công bố đáp án đúng. Khi STOP mới công bố đáp án đúng và điểm số, tránh lộ đáp án trước khi kết thúc.

Tôi sẽ đóng gói dự án PlatformIO để bạn mở trực tiếp bằng Visual Studio Code, gồm chương trình ESP32, giao diện Web và file câu hỏi mẫu.

5. Tải chương trình hoàn chỉnh

RF_Quiz_ESP32.zip

Dự án PlatformIO + Web + file CSV mẫu

Tải bộ chương trình ESP32

Tải riêng file 5 câu hỏi mẫu

Cách chạy

  1. Giải nén file ZIP và mở thư mục RF_Quiz_ESP32 bằng Visual Studio Code.

  2. Dùng PlatformIO nạp chương trình vào ESP32.

  3. Kết nối máy tính với Wi-Fi RF_QUIZ_ESP32, mật khẩu 12345678.

  4. Truy cập **http://192.168.4.1**.

  5. Tải file câu hỏi mẫu lên, nhấn START và thử trả lời bằng 5 remote.

Chương trình giữ chức năng học, xem, xóa mã RF trên LCD. Bộ câu hỏi được lưu trong Flash, còn kết quả thi được lưu trong RAM.

Lưu ý: Đây là phiên bản đầu tiên để nạp và kiểm thử thực tế, chưa được xác nhận biên dịch trên phần cứng của bạn. Hiện chương trình hỗ trợ tối đa 50 câu hỏi, mỗi câu đúng 10 điểm, và xuất bảng kết quả CSV.

thêm cho tôi chức năng cài đặt kết nối với mạng lan, vẫn giữ nguyên chức năng kết nối trực tiếp

Đã xử lý trong 52s

Tôi đã sửa chương trình ESP32 RF Quiz để kết nối đồng thời hai mạng, giữ nguyên các chức năng RF, LCD 2004, 4 nút nhấn và Web trắc nghiệm hiện tại.

RF_Quiz_ESP32_AP_LAN.zip

Mã nguồn PlatformIO đã bổ sung cài đặt Wi-Fi LAN

Tải chương trình ESP32 phiên bản AP + LAN

1. Hai chế độ kết nối hoạt động đồng thời

Chức năng

Kết nối trực tiếp AP

Kết nối LAN qua Wi-Fi

Tên mạng

RF_QUIZ_ESP32

Wi-Fi router của bạn

Mật khẩu

12345678

Tự cài đặt trên Web

Địa chỉ Web

192.168.4.1

IP do router cấp

Cần Internet

Không

Không

Nhận RF, chấm điểm

Có

Có

2. Giao diện cài đặt mới

Cài đặt kết nối mạng LAN

Ví dụ: GPC_WIFI

••••••••

Lưu và kết nối LAN

Ngắt LAN

Minh họa phần cài đặt đã thêm vào Web. Trạng thái thực tế và địa chỉ IP LAN sẽ được ESP32 cập nhật tự động.

3. Cách sử dụng

  1. Giải nén dự án mới và nạp vào ESP32 bằng PlatformIO.

  2. Kết nối Wi-Fi RF_QUIZ_ESP32, mật khẩu 12345678.

  3. Mở http://192.168.4.1.

  4. Trong mục Cài đặt kết nối mạng LAN, nhập tên Wi-Fi và mật khẩu router.

  5. Nhấn Lưu và kết nối LAN.

  6. Khi kết nối thành công, Web sẽ hiển thị IP LAN, ví dụ 192.168.1.105. Máy tính trong cùng mạng có thể truy cập http://192.168.1.105.

Cấu hình Wi-Fi LAN được lưu trong bộ nhớ ESP32. Khi mất điện rồi cấp nguồn lại, ESP32 tự kết nối lại mạng đã cài đặt. Nếu router mất kết nối, Wi-Fi trực tiếp vẫn hoạt động.

Lưu ý: ESP32 DevKit V1 không có cổng Ethernet RJ45. Phiên bản này kết nối mạng LAN nội bộ thông qua Wi-Fi 2.4 GHz của router. Nếu bạn muốn kết nối bằng dây mạng RJ45, cần bổ sung module Ethernet.

Tôi đã cập nhật mã nguồn và đóng gói dự án; phiên bản này chưa được kiểm chứng nạp và chạy trên ESP32 thực tế của bạn.

Cài đặt kết nối mạng LAN qua Wi-Fi và 1. Tải bộ câu hỏi cho vào Nút cài đặt để khi bấm nó ra phần này, bấm xong thì trở lại trang chính và hiển thị nội dung còn lại. Tiêu đề RF QUIZ – 5 TAY ĐIỀU KHIỂN ESP32 · RF 433 MHz · LCD 2004 thay nội dung: Bài tập trắc nghiệm cho 5 học sinh - Sản phẩm KHKT 2026. bên Phải ghi chữ GPC

Đã xử lý trong 39s

Tôi đã sửa giao diện Web theo yêu cầu, giữ nguyên chức năng nhận RF của 5 tay, LCD 2004, các nút START/STOP/NEXT/BACK và kết nối Wi-Fi trực tiếp + LAN.

Bài tập trắc nghiệm cho 5 học sinh - Sản phẩm KHKT 2026

GPC

Cài đặt

Trang chính

Câu hỏi và 4 đáp án A/B/C/D

Đáp án của 5 học sinh

START · STOP · NEXT · BACK

Bảng tổng hợp kết quả

Khi bấm Cài đặt, Web chuyển sang màn hình riêng gồm hai mục: Cài đặt kết nối mạng LAN qua Wi-Fi và Tải bộ câu hỏi CSV. Bấm Trở lại trang chính để đóng màn hình cài đặt. Sau khi tải bộ câu hỏi thành công, Web tự động quay về trang chính.

Tải chương trình đã sửa

RF_Quiz_ESP32_Settings_2026.zip

Dự án Visual Studio Code + PlatformIO

Tải chương trình hoàn chỉnh

Bạn chỉ cần giải nén, mở thư mục dự án bằng Visual Studio Code và nạp lại ESP32. Các mã RF đã học được lưu trong bộ nhớ Preferences nên thông thường không cần học lại sau khi cập nhật chương trình.

Sau khi nạp, mở http://192.168.4.1 hoặc IP LAN đã cài đặt. Nếu trình duyệt vẫn hiển thị giao diện cũ, nhấn Ctrl + F5 để tải lại.

Phiên bản đã được chỉnh sửa từ mã nguồn đang sử dụng, nhưng chưa được kiểm chứng biên dịch và chạy trực tiếp trên phần cứng ESP32 của bạn.

Tôi đã chỉnh sửa giao diện Web theo yêu cầu, giữ nguyên toàn bộ chức năng ESP32, RF 433 MHz, LCD 2004, 4 nút điều khiển và kết nối Wi-Fi AP + LAN.

1. Các nội dung đã sửa

Nội dung cũ

Nội dung mới

2. Câu 1/5

2. Câu hỏi 1/5

Chữ trong ô đáp án A/B/C/D

Chữ đậm, lớn hơn chữ câu hỏi

Đáp án 5 người chơi

Đáp án 5 học sinh

Tay 1, Tay 2,... Tay 5

Học sinh 1,... Học sinh 5

Người chơi trong bảng kết quả

Học sinh

Tay 1–5 trong bảng kết quả

Học sinh 1–5

Tên người chơi trong CSV kết quả

Học sinh 1–5

2. Giao diện sau khi sửa

Bài tập trắc nghiệm cho 5 học sinh - Sản phẩm KHKT 2026

GPC

2. Câu hỏi 1/5

ĐANG NHẬN

Thiết bị nào dùng để đo nhiệt độ?

A. Cảm biến siêu âm

B. Cảm biến nhiệt độ

C. Động cơ Servo

D. Module Relay

Đáp án 5 học sinh

Học sinh 1

A

Học sinh 2

B

Học sinh 3

C

Học sinh 4

D

Học sinh 5

B

3. Tải chương trình đã sửa

RF_Quiz_ESP32_HocSinh_UI_2026.zip

Dự án PlatformIO – phiên bản giao diện học sinh

Tải chương trình ESP32 đã cập nhật

Giải nén, mở bằng Visual Studio Code và Upload lên ESP32. Sau khi nạp, nhấn Ctrl + F5 trên trình duyệt để làm mới giao diện.

Các mã RF đã học và cấu hình Wi-Fi được giữ nguyên khi nạp lại chương trình thông thường, miễn là không xóa Flash.

Bình luận
Nội dung này chưa có bình luận, hãy gửi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN CỦA BẠN