-
-
-
Tổng tiền thanh toán:
-
Thiết bị trả lời trắc nghiệm sử dụng tay khiển RF từ xa
09/10/2026
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ó:
-
Hiển thị câu hỏi và 4 đáp án A/B/C/D.
-
Hiển thị trạng thái trả lời của 5 người chơi.
-
Có đồng hồ đếm ngược 10–60 giây.
-
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ờ.
-
Tự động chấm điểm khi kết thúc câu hỏi.
-
Hiển thị bảng xếp hạng và tổng điểm.
-
Nút Bắt đầu, Câu tiếp theo, Đặt lại và Kết thúc.
-
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
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:
-
Chọn tay điều khiển số 1 trên Web.
-
Bấm nút A trên tay, ESP32 tự lưu mã RF.
-
Lặp lại với B, C, D.
-
Tiếp tục cho các tay 2–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
-
Nạp chương trình vào ESP32, mở Serial Monitor tốc độ 115200.
-
Gõ
Lrồi Enter để bắt đầu học mã. -
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.
-
Sau khi học đủ 20 nút, ESP32 tự lưu mã vào bộ nhớ Flash.
-
Bấm bất kỳ nút nào trên 5 tay, LCD sẽ hiển thị đáp án tương ứng.
-
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
-
Nhấn STOP (GPIO 16) để dừng chương trình.
-
Giữ START (GPIO 15) trong 3 giây để vào menu quản lý RF.
-
Nhấn NEXT (GPIO 17) hai lần để chọn
XOA TOAN BO MA. -
Nhấn START để vào chức năng xóa.
-
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:
-
Tải bộ đề lên Web, ví dụ 5 câu.
-
Nhấn START để bắt đầu câu 1. ESP32 nhận đáp án từ 5 remote.
-
Nhấn STOP để kết thúc nhận đáp án, chấm điểm câu 1.
-
Nhấn NEXT để chuyển sang câu 2, rồi START để tiếp tục.
-
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
-
Giải nén file ZIP và mở thư mục
RF_Quiz_ESP32bằng Visual Studio Code. -
Dùng PlatformIO nạp chương trình vào ESP32.
-
Kết nối máy tính với Wi-Fi
RF_QUIZ_ESP32, mật khẩu12345678. -
Truy cập **http://192.168.4.1**.
-
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 |
|
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
-
Giải nén dự án mới và nạp vào ESP32 bằng PlatformIO.
-
Kết nối Wi-Fi
RF_QUIZ_ESP32, mật khẩu12345678. -
Mở
http://192.168.4.1. -
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.
-
Nhấn Lưu và kết nối LAN.
-
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ậphttp://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.