



















Preview text:
HC VIN CNG NGH BU CHNH VIN THNG
BÁO CÁO BÀI TẬP LỚN
IOT VÀ ỨNG DỤNG
Giảng viên hướng dẫn: Nguyễn Quốc Uy
Sinh viên thực hiện: Lê Quang Thắng Mã sinh viên: B22DCCN812 Nhóm lớp: 16 Hà Nội – 2025 LỜI CẢM ƠN
Để hoàn thiện bài báo cáo bài tập lớn môn học "IoT và Ứng dụng", em xin trân
trọng gửi lời cảm ơn chân thành và sâu sắc nhất tới thầy Nguyễn Quốc Uy.
Trong suốt quá trình học tập và thực hiện đề tài, em đã nhận được sự hướng dẫn,
chỉ bảo tận tình từ thầy. Những bài giảng tâm huyết và kiến thức chuyên môn quý báu mà
thầy truyền đạt chính là nền tảng vững chắc giúp em vượt qua khó khăn và hoàn thành tốt nhất bài báo cáo này.
Một lần nữa, em xin kính chúc thầy dồi dào sức khỏe, hạnh phúc và luôn thành
công trong sự nghiệp giảng dạy.
Em xin chân thành cảm ơn!
Hà Nội, ngày 27 tháng 9 năm 2025
MỤC LỤC
LỜI CẢM ƠN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
CHƠNG 1: GIỚI THIU BÀI TOÁN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1. Đặt vấn đề . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
CHƠNG 2: CÁC CHỨC NĂNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1. Các chức năng cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2. Các thiết bị được sử dụng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
CHƠNG 3: GIAO DIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1. Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2. Data Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.3. Active History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4. Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
CHƠNG 4: THIẾT KẾ H THỐNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1. Phần cứng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.1. Các thiết bị và thành phần . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.1.2. Thiết kế mạch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.1.3. Lập trình cho mạch điều khiển ESP32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2. Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2.1. Thiết kế cơ sở dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.3. Xây dựng API Docs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3.1. Lấy dữ liệu cảm biến . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.3.2. Lấy lịch sử hoạt động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3.3. Lấy trạng thái thiết bị gần nhất . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.6. Biểu đồ tuần tự . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.7. Front-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.8. Lấy dữ liệu từ server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
CHƠNG 1: GIỚI THIU BÀI TOÁN
1.1. Đặt vấn đề:
Trong bối cảnh của cuộc Cách mạng công nghiệp lần thứ tư, sự phát triển vũ bão
của công nghệ đã tạo ra những bước tiến đột phá, cải thiện sâu sắc chất lượng đời sống.
Giữa làn sóng đổi mới đó, Internet vạn vật (IoT - Internet of Things) đã khẳng định vị thế
là một công nghệ trụ cột, đóng vai trò then chốt trong việc kiến tạo một tương lai thông
minh. Về bản chất, IoT tạo ra một hệ sinh thái nơi các thiết bị vật lý có thể kết nối, thu thập
và trao đổi dữ liệu thông qua mạng Internet, cho phép chúng tương tác và vận hành một
cách tự động mà không đòi hỏi sự can thiệp trực tiếp từ con người.
CHƠNG 2: CÁC CHỨC NĂNG
2.1. Các chức năng cơ bản:
• Giám sát thông tin nhiệt độ, độ ẩm, cường độ ánh sáng theo thời gian thực thông qua các cảm biến.
• Điều khiển bật tắt các thiết bị đèn, quạt và điều hoà thông qua socket và giao thức MQTT.
• Theo dõi lịch sử thông số cảm biến Data Sensor: Tìm kiếm theo các tiêu chí, sắp
xếp theo ID, nhiệt độ, độ ẩm, cường độ ánh sáng và thời gian.
• Theo dõi lịch sử bật tắt thiết bị Active History: Tìm kiếm theo các tiêu chí, sắp xếp
theo ID, thiết bị và thời gian.
2.2. Các thiết bị được sử dụng: • Phần cứng: o ESP32
o Cảm biến đo nhiệt độ, độ ẩm DHT11
o Cảm biến ánh sáng 4 pin o 3 đèn led • Phần mềm: o Front-end: HTML, CSS o Back-end: Nodejs o MQTT broker: Mosquit o
CHƠNG 3: GIAO DIN 3.1. Dashboard:
Trang Dashboard hiển thị trực quan các thông số thu thập từ cảm biến nhiệt độ, độ
ẩm và ánh sáng. Dữ liệu được biểu diễn bằng biểu đồ động cho thấy sự thay đổi giá trị theo
thời gian, đồng thời cung cấp các nút thao tác để người dùng dễ dàng điều khiển thiết bị. Hình 3.1. Trang Dashboard 3.2. Data Sensor:
Trang Data Sensor lưu trữ lại các bản ghi dữ liệu thu được từ các cảm biến theo thời gian thực.
• Bảng dữ liệu cảm biến (Data Sensor) gồm 5 cột chính:
o ID: Số thứ tự bản ghi.
o Nhiệt độ (°C): Giá trị đo từ cảm biến nhiệt độ.
o Độ ẩm (%): Giá trị đo từ cảm biến độ ẩm.
o Độ sáng (lux): Cường độ ánh sáng thu được từ cảm biến.
o Thời gian: Thời điểm ghi nhận dữ liệu.
• Trang Data Sensor có một khung tìm kiếm để người dùng tìm kiếm thông tin theo mong muốn.
• Các nút cho phép sắp xếp các dữ liệu theo hướng tăng hoặc giảm dần.
• Trang Data Sensor được phân trang và mỗi trang chứa tối đa 50 bản ghi dữ liệu.
Hình 3.2. Trang Data Sensor (1)
Hình 3.3. Trang Data Sensor (2) 3.3. Active History:
Trang Active History lưu trữ lại các bản ghi lịch sử hoạt động bật tắt của các thiết bị theo thời gian thực.
• Bảng lịch sử hoạt động (Active History) gồm 4 cột chính:
o ID: Số thứ tự bản ghi.
o Thiết bị: Tên thiết bị được điều khiển (Quạt, Đèn, Điều hoà, …).
o Trạng thái: Trạng thái hiện tại của thiết bị (Bật/Tắt).
o Thời gian: Thời điểm ghi nhận thao tác điều khiển.
• Trang Active History có một khung tìm kiếm để người dùng tìm kiếm thông tin theo mong muốn.
• Các nút cho phép sắp xếp các dữ liệu theo hướng tăng hoặc giảm dần.
• Trang Active History được phân trang và mỗi trang chứa tối đa 20 bản ghi dữ liệu.
Hình 3.4. Trang Active History (1)
Hình 3.5. Trang Active History (2) 3.4. Profile:
Trang Profile hiển thị các thông tin cá nhân và các đường dẫn đến Github, Figma và
tài liệu PDF mô tả dự án. Hình 3.6. Trang Profile
CHƠNG 4: THIẾT KẾ H THỐNG
4.1. Phần cứng:
4.1.1. Các thiết bị và thành phần:
Mạch bao gồm các thành phần: Thành phần Hình ảnh thành phần Mạch điều khiển ESP32
Cảm biến nhiệt độ, độ ẩm DHT11 Cảm biến ánh sáng 4 pin Led 5mm Breadboard Dây nối
4.1.2. Thiết kế mạch:
Hình 4.1. Thiết kế mạch
4.1.3. Lập trình cho mạch điều khiển ESP32:
Sử dụng IDE Arduino cùng các thư viện PubSub, Wifi với ESP32. ESP32 được cấu
hình để kết nối mạng, trao đổi dữ liệu với các thiết bị và dịch vụ bên ngoài. Chương trình
sử dụng cơ chế callback để xử lý các sự kiện khi có tín hiệu hoặc dữ liệu gửi đến, giúp hệ
thống phản hồi kịp thời mà không làm gián đoạn các tác vụ khác. Nhờ vậy, việc điều khiển
và giám sát trên ESP32 trở nên linh hoạt và hiệu quả hơn.
Hình 4.2. Lập trình điều khiển cho ESP32 (1)
Hình 4.3. Lập trình điều khiển cho ESP32 (2)
Chương trình trên ESP32 được cấu hình để thực hiện cơ chế publish/subscribe với
Mosquit o Broker. Cách tiếp cận này cho phép thiết lập kênh giao tiếp hiệu quả giữa ESP32
và Backend Server thông qua giao thức MQTT – một giao thức nhẹ, tối ưu cho các ứng
dụng IoT và phù hợp với các thiết bị có tài nguyên hạn chế. 4.2. Backend:
4.2.1. Thiết kế cơ sở dữ liệu:
• Cơ sở dữ liệu sẽ gồm có 2 bảng chính: o Data Sensor:
▪ ID (integer(10)): Mỗi bản ghi dữ liệu sẽ có một ID duy nhất, giúp
phân biệt và truy xuất dữ liệu một cách chính xác.
▪ temperature (integer(10)): Lưu trữ giá trị nhiệt độ đo được tại một thời điểm.
▪ humidity (integer(10)): Lưu trữ giá trị độ ẩm đo được.
▪ light (integer(10)): Lưu trữ giá trị cường độ ánh sáng đo được.
▪ datetime (timestamp): Ghi lại mốc thời gian chính xác (ngày và giờ)
khi dữ liệu được cảm biến gửi về. o Active History:
▪ ID (integer(10)): Đảm bảo mỗi hành động được ghi lại là duy nhất.
▪ device (varchar(255)): Lưu tên của thiết bị đã được điều khiển.
▪ action (varchar(255)): Lưu hành động đã thực hiện trên thiết bị.
▪ time (timestamp): Ghi lại mốc thời gian chính xác khi hành động được thực hiện.
Hình 4.4. Biểu đồ ERD
4.3. Xây dựng API Docs:
Xây dựng API Docs sử dụng Postman:
Hình 4.5. Giao diện trang chủ Postman
4.3.1. Lấy dữ liệu cảm biến: • Method: GET
• Endpoint: /api/sensors
• Mô tả: Trả về một danh sách dữ liệu từ các cảm biến, có bao gồm hỗ trợ phân
trang, tìm kiếm và sắp xếp
o ht p:/ localhost:3000/api/sensors
Hình 4.6. Test API phân trang dữ liệu từ cảm biến
o ht p:/ localhost:3000/api/sensors?page=2&limit=10
Hình 4.7. Test API phân trang dữ liệu từ cảm biến
o ht p:/ localhost:3000/api/sensors?sort_key=temp&sort_dir=ASC
Hình 4.8. Test API sắp xếp dữ liệu cảm biến
o ht p:/ localhost:3000/api/sensors?search=28.5
Hình 4.9. Test API tìm kiếm dữ liệu cảm biến
4.3.2. Lấy lịch sử hoạt động: • Method: GET
• Endpoint: /api/history
• Mô tả: Trả về lịch sử điều khiển bật tắt các thiết bị, có bao gồm hô trợ phân trang,
tìm kiếm và sắp xếp.
o ht p:/ localhost:3000/api/history
Hình 4.10. Test API tìm kiế
m lịch sử hoạt động
o ht p:/ localhost:3000/api/history?search_field=action&search_value=ON
Hình 4.11. Test API tìm kiế m lịch sử hoạt động
o ht p:/ localhost:3000/api/history?page=2&limit=2
Hình 4.12. Test API tìm kiế m lịch sử hoạt động
o ht p:/ localhost:3000/api/history?sort_key=device&sort_dir=ASC
Hình 4.13. Test API lấy lịch sử hoạt động
4.3.3. Lấy trạng thái thiết bị gần nhất: • Method: GET
• Endpoint: /api/device-states
• Mô tả: Trả về trạng thái bật/tắt cuối cùng được ghi nhận của các thiết bị.
• ht p:/ localhost:3000/api/device-states
Hình 4.14. Test API lấy trạng thái thiết bị gần nhất