Dự án này là một hệ thống IoT dùng để thu thập, xử lý, lưu trữ và trực quan hóa dữ liệu cảm biến.
Hệ thống tích hợp cảm biến, MQTT broker, backend server, cơ sở dữ liệu, và JavaFX frontend để giám sát và tương tác theo thời gian thực.
Hệ thống bao gồm các thành phần chính sau:
-
Cảm biến (Node.js client / thiết bị phần cứng)
- Thu thập dữ liệu thô (ví dụ: nhiệt độ, độ ẩm, chuyển động).
- Gửi dữ liệu dưới dạng JSON qua giao thức MQTT đến broker.
-
MQTT Broker
- Đóng vai trò trung gian truyền tin giữa cảm biến và backend server.
- Đảm bảo truyền dữ liệu tin cậy bằng mô hình publish/subscribe của MQTT.
-
Backend Server (Spring Boot / Node.js Express)
- Đăng ký nhận dữ liệu từ MQTT broker.
- Xử lý các gói tin JSON từ cảm biến.
- Lưu dữ liệu vào cơ sở dữ liệu MySQL.
- Cung cấp HTTP REST API cho việc truy vấn dữ liệu và cập nhật.
- Xử lý logic tương tác với người dùng.
-
Cơ sở dữ liệu MySQL
- Lưu trữ dữ liệu cảm biến và thông tin liên quan.
- Hỗ trợ truy vấn dữ liệu lịch sử và dữ liệu theo thời gian thực.
-
JavaFX Frontend
- Ứng dụng desktop dành cho người dùng.
- Giao tiếp với backend qua HTTP API.
- Cung cấp giao diện trực quan, bảng điều khiển và chức năng tương tác thời gian thực.
-
Sensor → MQTT Broker
- Sensor publishes JSON data via MQTT.
-
MQTT Broker → Backend Server
- Backend subscribes to MQTT topics.
- Extracts and processes sensor data.
-
Backend Server → MySQL Database
- Stores processed JSON data into MySQL.
-
Backend Server ↔ JavaFX Frontend
- Uses HTTP requests for user interaction and updates.
- JavaFX fetches data and displays it to the user.
- IoT & Messaging: MQTT, Node.js (sensor simulation)
- Backend: Spring Boot (Java)
- Database: MySQL
- Frontend: JavaFX (desktop app)
- Communication:
- MQTT (sensor → broker → backend)
- HTTP REST API (backend ↔ frontend, backend ↔ database)
- Java 17+ (for Spring Boot & JavaFX)
- Node.js (for sensor simulation / Express backend option)
- MySQL 8.0+
- MQTT Broker (e.g., Mosquitto)
-
Start MQTT Broker
mosquitto -v
-
Run MySQL Database
mysql -u root -p CREATE DATABASE sensor_data; -
Start Backend Server
- Spring Boot:
./mvnw spring-boot:run
- Node.js Express:
npm install node server.js
- Spring Boot:
-
Run Sensor Simulation
node sensor.js
-
Run JavaFX Frontend
- Open in IDE (IntelliJ/Eclipse/NetBeans)
- Run
Main.java
{
"deviceId": "DV-101A-01",
"classroomId": 1
}-
Get all sensor data
GET /api/devices
-
Get sensor data by deviceId
GET /api/devices/{Id}
-
Fix devices by deviceCode
PUT /api/devices/{deivceCode}
- JWT-based authentication (optional).
- Role-based access for Admin / User.