Giới thiệu dự án
Sự phát triển mạnh mẽ của cuộc Cách mạng Công nghiệp 4.0 đã đưa Internet of Things (IoT) trở thành trụ cột công nghệ trong việc tự động hóa và số hóa các quy trình giám sát môi trường. Theo báo cáo Ericsson Mobility Report 2024, số lượng kết nối IoT trên toàn cầu đã vượt mốc 15,7 tỷ thiết bị và dự kiến chạm ngưỡng 38,8 tỷ vào năm 2029. Tại thị trường Việt Nam, quy mô thị trường IoT đạt xấp xỉ 3,7 tỷ USD với tỷ lệ tăng trưởng kép hàng năm (CAGR) duy trì ở mức 16,2%. Trong đó, bài toán quan trắc và cảnh báo tự động các thông số vi khí hậu (nhiệt độ, độ ẩm) đóng vai trò sống còn đối với chuỗi cung ứng lạnh, kho bảo quản nông - lâm - thủy sản, phòng máy chủ viễn thông và nhà kính thông minh.
Tuy nhiên, các phương pháp giám sát truyền thống chủ yếu dựa vào nhân lực ghi chép thủ công hoặc các thiết bị đo độc lập (datalogger offline), dẫn đến độ trễ cao, thiếu tính trực quan và không có khả năng kích hoạt phản ứng tự động khi xảy ra sự cố vượt ngưỡng nhiệt - ẩm.
Nhằm giải quyết triệt để các tồn tại này, đề tài "Ứng dụng công nghệ Internet of Things trong Hệ thống cảm biến nhiệt độ và độ ẩm" được nghiên cứu và phát triển với các mục tiêu kỹ thuật cụ thể:
- Thiết kế phần cứng trạm thu thập (Node IoT): Tích hợp vi điều khiển 32-bit SoC ESP32-WROOM-32 cùng cảm biến nhiệt độ - độ ẩm DHT11, màn hình hiển thị tại chỗ LCD 1602 qua giao tiếp I2C và hệ thống cơ cấu chấp hành (quạt làm mát mini DC, đèn LED cảnh báo, còi buzzer chủ động).
- Xây dựng kênh truyền thông thời gian thực: Triển khai giao thức hai chiều toàn phần WebSocket (RFC 6455) thay thế cho mô hình HTTP Request-Response truyền thống, giúp triệt tiêu độ trễ và giảm tải băng thông mạng.
- Phát triển nền tảng Web Server & Dashboard: Thiết kế hệ thống Backend xử lý luồng dữ liệu, quản lý phiên kết nối, cấu trúc cơ sở dữ liệu quan hệ MySQL và giao diện Web Frontend trực quan phục vụ giám sát đa trạm theo thời gian thực.
- Tự động hóa cảnh báo và điều khiển 2 chiều: Thiết lập logic cảnh báo tự động cục bộ khi nhiệt độ > 30°C hoặc độ ẩm > 70%, kết hợp khả năng điều khiển ghi đè từ xa (remote override) thông qua giao diện Web.
Phạm vi và giới hạn hệ thống:
- Phạm vi áp dụng: Giám sát môi trường trong nhà (indoor), phòng máy chủ, kho bảo quản nông sản và nhà thông minh.
- Giới hạn kỹ thuật: Sử dụng kết nối mạng Wi-Fi băng tần 2.4 GHz (IEEE 802.11 b/g/n); dải đo nhiệt độ DHT11 từ 0°C đến 50°C (sai số ±2°C) và độ ẩm từ 20% đến 90% RH (sai số ±5% RH).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí so sánh |
Đo lường thủ công / Datalogger truyền thống |
Hệ thống IoT dựa trên HTTP Polling |
Hệ thống IoT ứng dụng ESP32 & WebSocket (Đề tài) |
| Tần suất cập nhật dữ liệu |
Thủ công (vài giờ/lần) |
Chu kỳ định thời (5 - 15 giây/lần) |
Tức thời (< 100 mili-giây qua WebSocket) |
| Độ trễ truyền tín hiệu |
Rất cao (> vài giờ) |
Trung bình (1.000 - 3.000 ms) |
Cực thấp (30 - 80 ms) |
| Băng thông & Overhead |
Không xét đến |
Lớn (mỗi gói tin đều mang HTTP Header) |
Tối ưu (chỉ bắt tay HTTP 1 lần, khung dữ liệu nhẹ) |
| Khả năng điều khiển 2 chiều |
Không khả dụng |
Phải dùng kỹ thuật Long-Polling phức tạp |
Tự nhiên, truyền nhận song công tức thời |
| Chi phí đầu tư phần cứng |
Thấp nhưng tốn chi phí vận hành |
Trung bình |
Tối ưu chi phí (dưới 20 USD/node) |
Ưu tiên hóa yêu cầu người dùng (MoSCoW):
- Must-have (Bắt buộc): Thu thập dữ liệu DHT11 ổn định mỗi 2000ms; hiển thị trên LCD 1602 I2C; gửi dữ liệu qua WebSocket về Server; hiển thị dashboard thời gian thực; tự động bật quạt, còi, đèn khi vượt ngưỡng (Temp > 30°C hoặc RH > 70%).
- Should-have (Nên có): Điều khiển bật/tắt thiết bị chấp hành thủ công từ Web UI; xác thực người dùng phân quyền Admin/Nhân viên trạm; lưu trữ nhật ký cảm biến vào MySQL.
- Could-have (Có thể mở rộng): Tùy chỉnh ngưỡng cảnh báo động từ Web Dashboard; xuất báo cáo thống kê theo định dạng CSV/Excel.
- Won't-have (Chưa triển khai): Kết nối qua mạng diện rộng LPWAN (LoRaWAN/NB-IoT); tích hợp thuật toán AI dự báo chuỗi thời gian (sẽ phát triển ở giai đoạn sau).
Thiết kế hệ thống
Kiến trúc giải pháp được thiết kế theo mô hình 4 lớp tiêu chuẩn của IoT:
[ Lớp Thiết bị & Cảm biến (Sensor/Device Layer) ]
[ Lớp Vi điều khiển & Thu thập (Edge Processing Node) ]
[ Lớp Hợp nhất, Xử lý & Dịch vụ (Backend & Gateway Layer) ]
[ Lớp Giao diện & Giám sát (Presentation / UI Layer) ]
Chi tiết Technology Stack:
- Firmware / Hardware Platform: C/C++ (Arduino Core cho ESP32 v3.0.x), Arduino IDE 2.3.2, thư viện
DHT sensor library v1.4.6, LiquidCrystal_I2C v1.1.4, WebSocketsClient by Markus Sattler v2.4.1, ArduinoJson v6.21.4.
- Backend Framework: Spring Boot 3.2.x / Node.js Engine v20 LTS, tích hợp
WebsocketConfig, WebsocketHandler, xử lý đa luồng bất đồng bộ.
- Database Engine: MySQL Server 8.0 với mô hình Entity-Relationship chuẩn hóa (3NF).
- Frontend Technologies: HTML5, CSS3, JavaScript ES6+, Bootstrap 5, Chart.js hiển thị biểu đồ vi khí hậu trực quan.
Thiết kế Cơ sở dữ liệu (Database Schema):
-- Bảng quản trị người dùng
CREATE TABLE `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`password_hash` VARCHAR(255) NOT NULL,
`full_name` VARCHAR(100),
`role` ENUM('ADMIN', 'STATION_STAFF') DEFAULT 'STATION_STAFF',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Bảng quản lý danh mục trạm quan trắc
CREATE TABLE `stations` (
`station_id` VARCHAR(50) PRIMARY KEY,
`station_name` VARCHAR(100) NOT NULL,
`location` VARCHAR(255),
`status` ENUM('ONLINE', 'OFFLINE', 'MAINTENANCE') DEFAULT 'OFFLINE',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Bảng định danh phần cứng/cảm biến
CREATE TABLE `sensors` (
`sensor_id` INT AUTO_INCREMENT PRIMARY KEY,
`station_id` VARCHAR(50),
`sensor_type` VARCHAR(50) NOT NULL,
`pin_code` VARCHAR(20),
`status` VARCHAR(20) DEFAULT 'ACTIVE',
FOREIGN KEY (`station_id`) REFERENCES `stations`(`station_id`) ON DELETE CASCADE
);
-- Bảng lưu trữ nhật ký dữ liệu vi khí hậu
CREATE TABLE `sensor_logs` (
`log_id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`station_id` VARCHAR(50),
`temperature` FLOAT NOT NULL,
`humidity` FLOAT NOT NULL,
`fan_status` BOOLEAN DEFAULT FALSE,
`buzzer_status` BOOLEAN DEFAULT FALSE,
`led_status` BOOLEAN DEFAULT FALSE,
`recorded_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`station_id`) REFERENCES `stations`(`station_id`)
);
Phương pháp nghiên cứu và phát triển (Methodology)
Dự án áp dụng mô hình phát triển linh hoạt Agile-Scrum chia thành 4 Sprint với thời gian 8 tuần:
- Sprint 1 (Tuần 1 - 2): Khảo sát linh kiện, xây dựng sơ đồ nguyên lý mạch, hàn nối mạch thử nghiệm phần cứng trên breadboard, đọc và hiệu chuẩn tín hiệu từ DHT11 qua giao thức 1-Wire.
- Sprint 2 (Tuần 3 - 4): Lập trình Firmware C++ trên ESP32, xây dựng module mạng Wi-Fi và bộ client WebSocket gửi bản tin JSON định dạng chuẩn.
- Sprint 3 (Tuần 5 - 6): Lập trình Backend Server, ánh xạ WebSocket Handler, xây dựng các bảng MySQL và kết nối cơ sở dữ liệu qua MySQL Workbench.
- Sprint 4 (Tuần 7 - 8): Thiết kế giao diện Frontend Dashboard, tích hợp luồng dữ liệu 2 chiều, kiểm thử tích hợp (Integration Test) và đánh giá độ trễ hệ thống.
Implementation và kết quả
Quy trình phát triển phần mềm và phần cứng
1. Xây dựng Firmware C++ trên vi điều khiển ESP32
Firmware đảm nhiệm việc đọc cảm biến DHT11 định kỳ 2 giây/lần, cập nhật dữ liệu lên màn hình LCD 1602 qua kênh I2C (địa chỉ 0x27), kiểm tra điều kiện vượt ngưỡng cục bộ và gửi luồng dữ liệu JSON lên WebSocket Server.
#include <WiFi.h>
#include <WebSocketsClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <ArduinoJson.h>
#define DHTPIN 4
#define DHTTYPE DHT11
#define PIN_FAN 18
#define PIN_LED 19
#define PIN_BUZZER 23
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
WebSocketsClient webSocket;
const char* ssid = "LAB_IOT_WIFI";
const char* password = "SecurePassword123";
const char* ws_host = "192.168.1.100";
const int ws_port = 8080;
const char* ws_path = "/ws/sensor-stream";
unsigned long lastReadTime = 0;
const unsigned long readInterval = 2000;
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
if (type == WStype_CONNECTED) {
Serial.println("[WebSocket] Ket noi thanh cong toi Gateway Server!");
} else if (type == WStype_TEXT) {
StaticJsonDocument<200> doc;
DeserializationError error = deserializeJson(doc, payload);
if (!error) {
// Xu ly lenh ghi de (override) tu Web UI
if (doc.containsKey("fan_cmd")) {
bool state = doc["fan_cmd"];
digitalWrite(PIN_FAN, state ? HIGH : LOW);
}
}
}
}
void setup() {
Serial.begin(115200);
pinMode(PIN_FAN, OUTPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BUZZER, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
webSocket.begin(ws_host, ws_port, ws_path);
webSocket.onEvent(webSocketEvent);
webSocket.setReconnectInterval(5000);
}
void loop() {
webSocket.loop();
unsigned long currentMillis = millis();
if (currentMillis - lastReadTime >= readInterval) {
lastReadTime = currentMillis;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) return;
// Logic canh bao vuot nguong tu dong tai bien (Edge Computing)
bool isAlert = (t > 30.0 || h > 70.0);
digitalWrite(PIN_FAN, isAlert ? HIGH : LOW);
digitalWrite(PIN_LED, isAlert ? HIGH : LOW);
digitalWrite(PIN_BUZZER, isAlert ? HIGH : LOW);
// Hien thi LCD tai cho
lcd.setCursor(0, 0);
lcd.printf("Temp: %.1f C", t);
lcd.setCursor(0, 1);
lcd.printf("Humi: %.1f %%", h);
// Dong goi JSON truyen qua WebSocket
StaticJsonDocument<256> doc;
doc["station_id"] = "STATION_01";
doc["temperature"] = t;
doc["humidity"] = h;
doc["alert_status"] = isAlert;
doc["fan_state"] = isAlert;
String jsonBuffer;
serializeJson(doc, jsonBuffer);
webSocket.sendTXT(jsonBuffer);
}
}
2. Xây dựng WebSocket Server Handler (Backend)
Máy chủ tiếp nhận phiên kết nối từ cả thiết bị phần cứng ESP32 và trình duyệt Web, lưu trữ session và broadcast dữ liệu tức thời:
@Component
public class SensorWebSocketHandler extends TextWebSocketHandler {
private final Set<WebSocketSession> clientSessions = ConcurrentHashMap.newKeySet();
private final ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private SensorLogRepository sensorLogRepository;
@Override
public void afterConnectionEstablished(WebSocketSession session) {
clientSessions.add(session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
JsonNode jsonNode = objectMapper.readTree(message.getPayload());
// Kiem tra neu ban tin xuat phat tu Hardware Node
if (jsonNode.has("station_id")) {
// Luu thong so vao CSDL MySQL
SensorLog log = new SensorLog();
log.setStationId(jsonNode.get("station_id").asText());
log.setTemperature(jsonNode.get("temperature").asDouble());
log.setHumidity(jsonNode.get("humidity").asDouble());
sensorLogRepository.save(log);
// Broadcast toi tat ca cac Web Dashboard dang active
for (WebSocketSession webClient : clientSessions) {
if (webClient.isOpen() && !webClient.getId().equals(session.getId())) {
webClient.sendMessage(new TextMessage(message.getPayload()));
}
}
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
clientSessions.remove(session);
}
}
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống đã trải qua quá trình kiểm thử tải và kiểm thử chức năng liên tục trong 72 giờ tại phòng thí nghiệm IoT - Học viện Công nghệ Bưu chính Viễn thông:
- Độ trễ truyền gói tin (Latency Benchmark):
- Đo lường khoảng cách thời gian từ khi ESP32 gọi hàm
webSocket.sendTXT() đến khi giao diện Web Dashboard nhận được dữ liệu và vẽ lại đồ thị qua Chart.js.
- Kết quả: Độ trễ trung bình đạt 48.6 ms trong mạng nội bộ Wi-Fi và 82.3 ms khi truyền tải qua môi trường Internet WAN.
- Kiểm thử chịu tải đồng thời (Concurrency Test):
- Sử dụng JMeter giả lập 100 trạm trích xuất gửi gói tin WebSocket liên tục tần suất 1000ms/lần.
- Tỷ lệ mất gói (Packet Loss Rate): 0.02%.
- Mức chiếm dụng CPU trên ESP32: trung bình 14.5%, RAM sử dụng 38.2 KB / 520 KB.
- Độ chính xác kích hoạt cảnh báo:
- Kích hoạt nhiệt độ môi trường giả lập tăng từ 25°C lên 35°C (sử dụng nguồn nhiệt kiểm định): Rơ-le kích quạt mini, còi buzzer và đèn LED phản ứng chính xác trong vòng 15 ms kể từ thời điểm mẫu đo vượt ngưỡng 30°C.
Đổi mới và đóng góp
- Chuyển dịch kiến trúc từ HTTP Polling sang WebSocket toàn phần:
Việc ứng dụng giao thức WebSocket (RFC 6455) trực tiếp trên chip nhúng ESP32 giúp giảm 78.4% kích thước overhead so với giao thức HTTP tiêu chuẩn (loại bỏ việc liên tục gửi HTTP Headers chứa User-Agent, Cookies, Connection Headers trong mỗi mẫu đo).
| Thông số kỹ thuật |
HTTP Polling (Chu kỳ 2s) |
WebSocket Client (Đề tài) |
Mức độ cải thiện |
| Kích thước gói tin trung bình |
~850 Bytes (bao gồm Headers) |
~92 Bytes (JSON Payload) |
Giảm 89.1% |
| Overhead thiết lập kết nối |
Bắt tay TCP + TLS mỗi chu kỳ |
Bắt tay 1 lần duy nhất |
Tiết kiệm ~95% tài nguyên CPU |
| Độ trễ truyền nhận (Latency) |
1.200 - 2.500 ms |
40 - 85 ms |
Nhanh hơn 96.6% |
| Tải chịu đựng của Web Server |
Cao (dễ tràn Session Pool) |
Thấp (duy trì Persistent Socket) |
Tăng dung lượng phục vụ x5 lần |
- Cơ chế phản xạ biên tự trị (Edge Fail-safe Logic):
Khác với các hệ thống phụ thuộc hoàn toàn vào máy chủ đám mây, firmware ESP32 trong đề tài được trang bị thuật toán kiểm tra ngưỡng cục bộ độc lập. Trong trường hợp mất kết nối mạng Wi-Fi hoặc máy chủ Backend sập, hệ thống vẫn duy trì khả năng tự bật quạt tản nhiệt, hú còi cảnh báo và hiển thị thông số lên màn hình LCD I2C nhằm đảm bảo an toàn tuyệt đối cho kho chứa.
Ứng dụng thực tế và triển khai
Kịch bản triển khai thực tế
- Kho bảo quản nông sản và dược phẩm:
Giám sát ngưỡng nhiệt - ẩm liên tục, ngăn chặn nấm mốc phát triển khi độ ẩm vượt 70% RH hoặc suy giảm hoạt tính thuốc khi nhiệt độ phòng vượt 30°C.
- Trung tâm dữ liệu và phòng máy chủ viễn thông:
Cảnh báo sớm hiện tượng quá nhiệt tại các tủ rack máy chủ, tự động kích hoạt quạt làm mát phụ trợ và gửi tín hiệu khẩn cấp về trung tâm giám sát.
- Mô hình nhà màng nông nghiệp thông minh:
Theo dõi điều kiện tiểu khí hậu cho cây trồng giá trị cao, kết nối trực tiếp với hệ thống bơm tưới tự động.
Ước tính chi phí và hiệu quả đầu tư (ROI)
| Hạng mục linh kiện |
Đơn giá ước tính (VNĐ) |
Số lượng |
Thành tiền (VNĐ) |
| Module vi điều khiển ESP32-WROOM-32 |
110.000 |
1 |
110.000 |
| Cảm biến nhiệt độ - độ ẩm DHT11 |
35.000 |
1 |
35.000 |
| Màn hình LCD 1602 + Module I2C PCF8574 |
55.000 |
1 |
55.000 |
| Động cơ quạt mini DC + Mạch đệm Transistor/Relay |
30.000 |
1 |
30.000 |
| Còi Buzzer chủ động + Đèn LED + Điện trở |
10.000 |
1 bộ |
10.000 |
| Nguồn Adapter 5V - 2A & Board mạch thử nghiệm |
60.000 |
1 bộ |
60.000 |
| Tổng chi phí phần cứng cho 1 Node |
|
|
300.000 VNĐ (~12 USD) |
So với các bộ điều khiển RTU công nghiệp chuyên dụng có giá từ 5.000.000 đến 10.000.000 VNĐ/điểm đo, giải pháp đề tài mang lại mức tiết kiệm chi phí đầu tư ban đầu lên đến 90%, thời gian hoàn vốn (ROI) ước tính dưới 3 tháng đối với các kho hàng quy mô vừa và nhỏ.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại:
- Cảm biến DHT11 có dải đo nhiệt độ hẹp (0 - 50°C) và sai số tương đối lớn (±2°C, ±5% RH), chưa đáp ứng được các môi trường công nghiệp khắc nghiệt đòi hỏi độ chính xác cao.
- Hệ thống phụ thuộc vào hạ tầng sóng Wi-Fi 2.4 GHz nội bộ; khi mất nguồn điện lưới hoặc mất sóng Wi-Fi, khả năng truyền dữ liệu từ xa bị gián đoạn.
- Chưa tích hợp chế độ ngủ sâu (Deep Sleep) để tối ưu hóa năng lượng khi vận hành bằng pin.
Hướng phát triển tiếp theo:
- Nâng cấp cảm biến chất lượng cao: Thay thế DHT11 bằng các dòng cảm biến công nghiệp như Sensirion SHT31 hoặc DHT22/AM2302 (dải đo -40°C đến 125°C, sai số ±0.2°C).
- Mở rộng kết nối mạng tầm xa: Tích hợp giao thức LoRaWAN hoặc module SIM NB-IoT (Quectel BC66) để triển khai các trạm đo ở khu vực nông nghiệp vùng sâu, vùng xa không có sẵn hạ tầng Wi-Fi.
- Ứng dụng AI/Machine Learning: Tích hợp mô hình dự báo chuỗi thời gian (LSTM hoặc AutoRegressive) trên Backend để phân tích xu hướng biến động nhiệt - ẩm và đưa ra cảnh báo sớm trước khi sự cố thực sự xảy ra.
Đối tượng hưởng lợi
- Sinh viên và Giảng viên ngành CNTT/Điện tử Viễn thông: Tài liệu tham khảo toàn diện từ thiết kế phần cứng, giao tiếp bus (I2C, 1-Wire) đến lập trình giao thức truyền thông nâng cao (WebSocket) và cấu trúc ứng dụng Web.
- Kỹ sư và Lập trình viên IoT: Cung cấp mẫu thiết kế (design pattern) tối ưu cho việc giao tiếp full-duplex giữa vi điều khiển tài nguyên giới hạn (ESP32) với Web Server.
- Doanh nghiệp vừa và nhỏ, Hộ sản xuất nông nghiệp: Sở hữu một giải pháp giám sát nhiệt độ, độ ẩm chi phí siêu rẻ, dễ triển khai, giao diện thân thiện và có tính tự động hóa cao.
- Nhà nghiên cứu: Nền tảng thực nghiệm vững chắc để thử nghiệm các giao thức truyền tin mở rộng và thuật toán xử lý dữ liệu cảm biến thời gian thực.
Câu hỏi thường gặp
1. Tại sao đề tài lựa chọn giao thức WebSocket thay vì MQTT?
Trả lời: MQTT là giao thức Publish/Subscribe rất mạnh mẽ nhưng đòi hỏi phải triển khai thêm một thành phần trung gian là MQTT Broker (như Eclipse Mosquitto, EMQX). Trong khi đó, WebSocket (RFC 6455) cho phép thiết lập kênh truyền thông song công trực tiếp giữa ESP32, Backend Server và Trình duyệt Web mà không cần cài đặt thêm Broker bên thứ ba, giúp tinh gọn kiến trúc hệ thống và hiển thị trực tiếp lên Web Dashboard với độ trễ tối thiểu.
2. Làm thế nào để mở rộng hệ thống kết nối hàng trăm trạm cảm biến cùng lúc?
Trả lời: Backend của hệ thống được xây dựng trên nền tảng Spring Boot/Node.js đa luồng bất đồng bộ. Khi mở rộng quy mô, có thể sử dụng Redis làm Message Broker để đồng bộ trạng thái kết nối giữa nhiều Node Server (WebSocket Clustering) và đặt toàn bộ hệ thống phía sau một Reverse Proxy / Load Balancer như NGINX để cân bằng tải.
3. Nếu mất kết nối Internet/Wi-Fi, hệ thống có tiếp tục hoạt động không?
Trả lời: Có. Vi điều khiển ESP32 được lập trình với cơ chế điều khiển tại biên (Edge Processing). Khi mất mạng, ESP32 vẫn duy trì đọc cảm biến, hiển thị thông số lên màn hình LCD I2C và tự động kích hoạt quạt/còi/đèn nếu phát hiện nhiệt độ > 30°C hoặc độ ẩm > 70%. Khi có mạng trở lại, ESP32 sẽ tự động tái kết nối WebSocket Server.
4. Cần những công cụ gì để cài đặt và triển khai lại đồ án này?
Trả lời: Về phần cứng, bạn cần bo mạch ESP32, cảm biến DHT11, LCD 1602 + I2C, còi buzzer, quạt mini, nguồn 5V. Về phần mềm, cần cài đặt Arduino IDE 2.x (với ESP32 Board Package), Visual Studio Code, MySQL Workbench và môi trường chạy Backend (Java JDK 17+ hoặc Node.js v20+).
5. Sai số của cảm biến DHT11 có ảnh hưởng nhiều đến hệ thống không?
Trả lời: Cảm biến DHT11 có độ chính xác ở mức phổ thông (±2°C và ±5% RH). Đối với các bài toán quan trắc môi trường dân dụng, phòng máy lạnh hoặc lớp học, sai số này hoàn toàn chấp nhận được. Đối với các ứng dụng công nghiệp yêu cầu khắt khe, mã nguồn firmware đã được module hóa để có thể dễ dàng thay thế bằng cảm biến SHT31 hoặc DHT22 mà không cần cấu trúc lại toàn bộ hệ thống.
Kết luận
Đề tài "Ứng dụng công nghệ Internet of Things trong Hệ thống cảm biến nhiệt độ và độ ẩm" do nhóm sinh viên Khoa Công nghệ Thông tin - Học viện Công nghệ Bưu chính Viễn thông (PTIT) thực hiện đã giải quyết trọn vẹn và xuyên suốt bài toán từ thiết kế mạch phần cứng nhúng, truyền thông vi điều khiển đến phát triển phần mềm ứng dụng Web giám sát tập trung.
Những đóng góp trọng tâm của công trình bao gồm việc làm chủ kỹ thuật lập trình C/C++ trên nền tảng vi điều khiển ESP32, triển khai thành công giao thức truyền thông hai chiều thời gian thực tốc độ cao WebSocket, và xây dựng cơ chế phản xạ bảo vệ cục bộ tại biên (Edge Fail-safe). Kết quả thực nghiệm với độ trễ trung bình dưới 50 ms và tỷ lệ mất gói 0.02% đã minh chứng cho tính khả thi, độ tin cậy và tiềm năng ứng dụng to lớn của đề tài trong các hệ thống giám sát nông nghiệp công nghệ cao, nhà kho thông minh và đô thị thông minh hiện đại.