Hệ thống giữ xe thông minh dùng 1 ESP32-CAM, 1 NodeMCU/ESP8266 + RC522 + servo, và laptop chạy YOLO + PaddleOCR offline. Khi chạy thật, ESP32-CAM và NodeMCU giao tiếp với laptop hoàn toàn qua WiFi; USB chỉ dùng lúc nạp firmware.
- Một camera dùng chung cho cổng vào/ra.
- RFID quyết định hướng xử lý:
- UID chưa có trong database laptop → xe vào → chụp biển số → lưu UID + biển số.
- UID đã có trong database laptop → xe ra → chụp/OCR lại biển số → so khớp → xoá record nếu hợp lệ.
- YOLOv8 detect/crop biển số, PaddleOCR đọc biển số offline.
- SQLite lưu phiên gửi xe và lịch sử sự kiện.
- ESP8266 lưu hàng đợi thẻ RFID, nên quét thẻ xong có thể lấy thẻ ra ngay.
- Servo safe boot: không tự quay khi cấp nguồn, tự detach sau khi mở/đóng để tránh kẹt/rít.
RFID card
↓
NodeMCU/ESP8266 + RC522 + Servo ← HTTP/WiFi → Laptop Python app
↓
ESP32-CAM WiFi camera ← HTTP/WiFi → YOLO + PaddleOCR
↓
SQLite database
- ESP32-CAM AI Thinker 2MP OV2640.
- NodeMCU ESP8266 / ESP8266MOD.
- RC522 RFID reader.
- Servo SG90/MG90S hoặc tương đương.
- Nguồn tổ ong + buck 5V cho servo/NodeMCU nếu chạy độc lập.
- Laptop Windows chạy Python.
RC522:
| RC522 | NodeMCU |
|---|---|
| SDA/SS | D2 |
| RST | D1 |
| SCK | D5 |
| MISO | D6 |
| MOSI | D7 |
| 3.3V | 3V3 |
| GND | GND |
Servo:
| Servo | Nối vào |
|---|---|
| Đỏ | 5V buck/nguồn ngoài |
| Nâu/đen | GND buck/nguồn ngoài |
| Cam/vàng | D4 NodeMCU |
Bắt buộc nối chung GND:
GND nguồn ngoài/buck ↔ GND NodeMCU ↔ GND servo ↔ GND RC522
RC522 chỉ dùng 3.3V, không cấp 5V vào RC522.
Máy mới chỉ cần có Arduino IDE. Giải nén source rồi chạy:
00_RUN_ME_FIRST.batScript sẽ cài/tạo:
- Python 3.11 x64 nếu chưa có.
.venv.- NumPy 1.26.4, OpenCV, Torch CPU, Ultralytics, PaddlePaddle 3.2.2, PaddleOCR 3.6.0.
- Runtime flags chống lỗi OpenMP/Paddle trên Windows.
Nếu Arduino IDE chưa có board core/libraries, chạy thêm:
01_SETUP_ARDUINO_BOARDS_AND_LIBS.bat- Copy
.env.examplethành.env. - Sửa
.env:
CAMERA_BASE_URL=http://192.168.1.60
BOARD_BASE_URL=http://192.168.1.61- Sửa WiFi/IP trong firmware trước khi nạp:
firmware/esp32_cam_wifi_capture/wifi_config.h
firmware/board_rfid_servo_esp8266_wifi/wifi_config.h
Không commit mật khẩu WiFi thật lên GitHub.
Mở Arduino IDE và nạp:
firmware/esp32_cam_wifi_capture/esp32_cam_wifi_capture.ino
Board thường dùng: AI Thinker ESP32-CAM. Sau khi nạp, tháo IO0-GND nếu có, reset lại camera, rồi cấp nguồn bằng sạc dự phòng/5V.
Mở Arduino IDE và nạp:
firmware/board_rfid_servo_esp8266_wifi/board_rfid_servo_esp8266_wifi.ino
Board: NodeMCU 1.0 (ESP-12E Module). Khi nạp, nên rút RC522/servo nếu upload khó.
test_wifi_camera.batChụp ảnh từ ESP32-CAM, detect/crop biển số, OCR và in kết quả.
test_wifi_board.batKiểm tra NodeMCU + RC522, quét thẻ để xem UID.
test_wifi_servo.batGọi endpoint mở servo trên NodeMCU.
run_wifi_parking.batTuỳ chọn không OCR lúc xe ra:
run_wifi_parking_no_exit_ocr.batCamera status : http://<CAMERA_IP>/status
Camera capture: http://<CAMERA_IP>/capture
Board status : http://<BOARD_IP>/status
Board card : http://<BOARD_IP>/pop_card
Board open : http://<BOARD_IP>/open?dir=IN&plate=TEST&conf=1.00
Servo test : http://<BOARD_IP>/servo?angle=90&hold=1000
Servo config : http://<BOARD_IP>/set_servo?closed=40&open=135&min=35&max=135
firmware/ Arduino sketches cho ESP32-CAM và NodeMCU
server/ Python package xử lý LPR, database và WiFi workflow
tools/ Script test/diagnose
models/ YOLO .pt detector
samples/ Ảnh test không chứa dữ liệu cá nhân
captures/ Ảnh runtime, không commit nội dung thật
data/ SQLite database runtime, không commit database thật
logs/ Log runtime
- Không commit
.env,data/*.db,captures/*.jpg,logs/*,.venv/,.tools/. models/license_plate_detector.ptkhoảng vài MB, có thể commit được. Nếu thay bằng model lớn hơn 100 MB, hãy dùng Git LFS hoặc hướng dẫn tải riêng.- Cấu hình WiFi trong
wifi_config.hđang là placeholder. Mỗi máy cần sửa SSID/password trước khi nạp firmware.
- NumPy 2.x / Torch báo
_ARRAY_API not found: chạyfix_numpy2_error.bat. - PaddleOCR OpenMP
libiomp5md.dllconflict: project đã dùng OCR subprocess/persistent worker. Nếu vẫn lỗi, chạyfix_omp_error.bat. - Paddle PIR/oneDNN inference error: dùng PaddlePaddle 3.2.2 như trong requirements; chạy
fix_paddle_pir_error.bat. - ESP8266 không nạp được qua CH340: rút servo/RC522, đổi cáp USB data, chọn NodeMCU 1.0, upload speed 57600.
- Servo quay quá tay: chỉnh
SERVO_CLOSED_ANGLE,SERVO_OPEN_ANGLE,SERVO_MIN_ANGLE,SERVO_MAX_ANGLEtrongwifi_config.hhoặc gọi/set_servo.