Bài-tập-cuối-kỳ

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Họ và tên: Nguyễn Quang Linh

MSV: 105200457
Lớp: 20TDHCLC3
Lớp học phần: 20.33

ĐỀ THI CUỐI HỌC KÌ HỌC PHẦN HỆ THỐNG NHÚNG VÀ IOT


I Giới thiệu
Trong bài tập cuối cùng này, bạn sẽ thiết kế một hệ thống Internet of Things (IoT) đầy đủ
để phân loại hoạt động của người dùng theo thời gian thực. Bạn sẽ sử dụng bảng IoT với
cảm biến gia tốc và con quay hồi chuyển, nền tảng đám mây nơi bạn có thể khởi tạo máy
ảo (ví dụ: Google Cloud Platform) và điện thoại di động Android. Dự án bao gồm một
loạt các nhiệm vụ độc lập trên nhiều nền tảng, bao gồm
• Phát triển firmware cho hệ thống nhúng
• Thu thập kết quả đo cho các hoạt động khác nhau (đi bộ, chạy, v.v.)
• Đào tạo và triển khai các thuật toán học máy phù hợp để phát hiện chuyển động
• Phát triển giao diện web back-end và cơ sở dữ liệu liên quan
• Thiết kế các chương trình truyền thông mạng mạnh mẽ
• Phát triển ứng dụng di động
Khi kết thúc bài thực hành này, bạn sẽ có một nguyên mẫu hoạt động của một hệ thống
có thể phân loại các hoạt động khác nhau với độ trễ không đáng kể và hiển thị kết quả
trên giao diện người dùng di động.
II Yêu cầu
Trong bài tập này, bạn sẽ sử dụng phần cứng và nền tảng sau:
• Bo mạch DISCO-L475VG-IOT01A được tích hợp con quay hồi chuyển, gia tốc kế và
bộ thu phát Wi-Fi.
• Nền tảng quản lý thiết bị Arm Pelion.
• Nền tảng đám mây (ví dụ: Google Cloud Platform - GCP).
• Điện thoại thông minh Android (ví dụ: Motorola Moto G7).
Không có hạn chế cụ thể nào về phần mềm (máy chủ web, cơ sở dữ liệu, khung máy học
và sơ đồ truyền thông) mà bạn nên sử dụng, để có đủ sự linh hoạt trong thiết kế dự án
cũng như có chỗ cho sự sáng tạo. Tuy nhiên, chúng tôi liệt kê bên dưới một số tùy chọn
phổ biến mà bạn có thể muốn xem xét:
• Máy chủ web: Django, Flask, Node.js, PHP.
• Cơ sở dữ liệu: MySQL, SQLite, SQL server, Firebase.
• Khung học máy: TensorFlow, PyTorch, MXNet.
Xin lưu ý rằng bạn có thể tự do lựa chọn các giải pháp phần mềm khác miễn là chúng có
thể giúp bạn đạt được các nhiệm vụ được mô tả bên dưới.
III Nhiệm vụ
3.1 Tổng quan
Hình 1 bên dưới minh họa cấp cao về hệ thống IoT mà bạn sẽ phát triển. Bo mạch
DISCO L475VG-IOT01A hoạt động như một thiết bị đeo được, có thể thu được số đọc
cảm biến và gửi chúng định kỳ đến nền tảng Arm Pelion thông qua kết nối Wi-Fi. Dịch
vụ đám mây thu thập các bản cập nhật đọc và suy đoán hoạt động hiện tại của người dùng
dựa trên mô hình học máy được đào tạo trước. Cuối cùng, người dùng có thể xem số liệu
thống kê tương ứng trong ứng dụng di động bằng cách truy vấn API web.

Hình 1. Hình minh họa các thành phần chính của hệ thống IoT
Nhiệm vụ được chia thành nhiều nhiệm vụ như sau:
1. Phát triển hệ thống nhúng và giao tiếp với Arm Pelion.
2. Lựa chọn, đào tạo và triển khai mô hình học máy.
3. Thiết kế mặt sau.
4. Phát triển ứng dụng di động.
Bốn nhiệm vụ được mô tả chi tiết trong phần còn lại của phần này.
3.2 Phát triển hệ thống nhúng
Trong bài tập này, chúng ta lại sử dụng bo mạch DISCO-L475VG-IOT01A, tương thích
với Mbed OS. Bắt đầu bằng cách làm theo hướng dẫn tại
https://os.mbed.com/guides/connect-device-to-pelion/ . Sau khi hoàn thành phần hướng
dẫn, bạn sẽ có một dự án mẫu trong trình biên dịch trực tuyến của mình, bao gồm thư
viện Wi-Fi cho phép bo mạch IoT của bạn kết nối với điểm phát sóng Wi-Fi cá nhân. Tuy
nhiên, để có được số đọc từ cảm biến, bạn cần xác định mô-đun chip trên bo mạch của
mình và nhập các thư viện liên quan vào trình biên dịch của bạn. Bạn có thể tìm thấy các
thư viện liên quan đến cảm biến của mình tại https://os.mbed.com/code/ .
Tương tự, dự án ví dụ cho thấy cách kết nối và gửi dữ liệu từ bo mạch đến hệ thống quản
lý Pelion:
M2MObjectList m2m_obj_list;
// GET resource 3000/0/5701
m2m_get_res = M2MInterfaceFactory::create_resource(m2m_obj_list, 3000, 0, 5701,
M2MResourceInstance::INTEGER, M2MBase::GET_ALLOWED);
cloud_client->add_objects(m2m_obj_list);
m2m_get_res->set_value();
Đoạn mã này liên kết một tài nguyên (bất kỳ giá trị nào) với đường dẫn web
/3000/0/5701. Đường dẫn có thể được chỉ định ngẫu nhiên. Mọi cập nhật tài nguyên đều
có thể được đẩy lên nền tảng Pelion thông qua giao thức M2M, bằng cách gọi hàm
set_value() và bạn có thể xem các bản cập nhật đồng thời tại
https://portal.mbedcloud.com/devices/list . Các API do Arm cung cấp sẽ hữu ích trong
việc triển khai liên lạc mạng:
https://www.pelion.com/docs/devicemanagement/current/mbed-client/class_m2_m_resou
rce.html .
Trong dự án này, tài nguyên mà bạn sẽ sử dụng là các số đọc từ con quay hồi chuyển và
gia tốc kế. Bạn nên cẩn thận về số lượng tài nguyên bạn cần tạo, từ góc độ cả chi phí liên
lạc và việc sử dụng API. Ở giai đoạn này, bạn có thể chưa quen với API Pelion.
3.3 Mô hình học máy móc
Để đạt được sự nhận dạng hoạt động, bạn sẽ tận dụng sức mạnh của máy học. Bạn có thể
sử dụng tập dữ liệu sau trên Kaggle: https://www.kaggle.com/vmalyi/run-or-walk , tập dữ
liệu này chứa dữ liệu cảm biến được thu thập trước đó từ gia tốc kế và con quay hồi
chuyển. Tài liệu trong đó giải thích cách thu thập dữ liệu và mô hình nào được sử dụng
để đào tạo.
Bạn thực sự nên đọc qua các bài đăng, trong trường hợp bạn có thể hy vọng thu thập
thêm dữ liệu sau này, đồng thời nếu bạn muốn nâng cao độ tin cậy của mô hình của mình
hoặc đa dạng hóa các kịch bản phát hiện. Ngay cả khi bạn không muốn làm như vậy, các
bài đăng gốc vẫn chứa gợi ý chính về đơn vị đo lường được sử dụng để biểu thị dữ liệu
cảm biến, gợi ý này không được ghi rõ ràng trong tập dữ liệu.
Tuy nhiên, bạn không nên sử dụng mô hình tương tự như đề xuất của tác giả tương ứng.
Bạn có thể thấy rằng phương pháp của anh ấy đã/không thể sử dụng các số đọc từ tất cả
các trục. Ở đây có một điểm quan trọng: bạn nên cố gắng hết sức để đảm bảo rằng mô
hình của bạn có thể khái quát hóa tốt trong nhiều tình huống thử nghiệm nghiêm ngặt. Để
đạt được điều này, bạn cần làm cho mô hình của mình tìm hiểu càng nhiều thông tin hữu
ích càng tốt.
Về mặt thiết kế mô hình, bạn có thể xem xét khía cạnh sau để đảm bảo mô hình của bạn
đạt được hiệu suất tốt:
1. Tận dụng thông tin tạm thời. Rõ ràng, phát hiện chuyển động là một nhiệm vụ nhận
dạng mẫu trên dữ liệu đa chiều theo chuỗi thời gian. Nói cách khác, nhiệm vụ này nhạy
cảm với thời gian, vì vậy bạn cần đảm bảo rằng mô hình có thể tìm hiểu các mối tương
quan về thời gian từ tập dữ liệu. Đối với một số nhiệm vụ nhạy cảm với thời gian (ngay
cả đối với nhiệm vụ này), có thể một mô hình không nhạy cảm với thời gian có thể thể
hiện hiệu suất hợp lý. Tuy nhiên, hãy lưu ý rằng nếu mô hình của bạn không trích
xuất/tìm hiểu các mối tương quan thời gian từ tập dữ liệu, bạn có thể chỉ thu được những
hiểu biết hạn chế.
2. Giữ mọi thứ nhẹ nhàng. Theo dõi hoạt động không phải là một nhiệm vụ học tập khó
khăn đòi hỏi hàng nghìn thông số và ngày đào tạo. Khi thiết kế một mô hình, bạn nên bắt
đầu từ giải pháp đơn giản nhất và dần dần thêm các khối vào đó, thay vì đi thẳng vào một
mô hình deep learning phức tạp. Mặc dù tất cả hoạt động tính toán có thể được thực hiện
trên đám mây nhưng bạn không nên sử dụng nhiều hơn mức mình cần. Các mô hình khác
nhau theo mặc định sẽ sử dụng các tài nguyên khác nhau. Bạn có thể nghĩ đến những câu
hỏi sau trước khi bắt đầu: Tốt hơn nên chọn một mô hình phức tạp sẽ đạt được hiệu suất
xuất sắc nhưng có nhiều tham số và cần nhiều dữ liệu để đào tạo hay chọn một mô hình
có ít tham số hơn có thể đào tạo một đợt? Bạn coi trọng tài nguyên tính toán hoặc tài
nguyên bộ nhớ hơn? Bạn có muốn mô hình của mình đưa ra những diễn giải xác suất hay
không?
3.4 Thiết kế mặt sau
Ngoài nền tảng quản lý thiết bị Pelion, bạn có thể lấy số đọc trong thời gian thực thông
qua Pelion SDK, có sẵn bằng một số ngôn ngữ lập trình (Python, Java, Javascript và C#).
Bạn có thể tìm thấy tài liệu đầy đủ tại: https://www.pelion.com/docs/device-
management/current/mbed-cloud-sdk-references/index.html .
Đối với hoạt động liên lạc giữa thiết bị và nền tảng Pelion, điều quan trọng là phải quyết
định tần suất cũng như tốc độ lấy mẫu thích hợp. Cứ 20 giây một lần sẽ phát sinh độ trễ
lớn và bạn có thể mất thông tin quan trọng theo thời gian trong khi việc đọc 100 lần mỗi
giây sẽ tạo ra nhiều lưu lượng truy cập và có thể không cần thiết. Vì vậy, trước tiên bạn
cần phải thực hiện một số thí nghiệm thăm dò.
Khi bạn đã đào tạo mô hình học máy của mình, bạn cần phát triển một máy chủ web
1. Đưa ra dự đoán định kỳ, dựa trên kết quả đọc từ nền tảng Pelion.
2. Lưu trữ dự đoán trên Đám mây (trong cơ sở dữ liệu).
3. Tạo API web để gọi khi người dùng muốn xem dự đoán theo thời gian thực.
4. Tạo API web để gọi khi người dùng muốn xem hồ sơ hoạt động lịch sử của họ.
Tất nhiên, bạn có thể thêm nhiều chức năng hơn cho cả logic máy chủ và thiết kế di động
để có khả năng sử dụng tốt hơn. Như đã giải thích ở trên, máy chủ web cần thực hiện
đồng thời ít nhất ba tác vụ:
1. Lắng nghe và trả lời các yêu cầu HTTP.
2. Chờ đợi các bài đọc mới và đưa ra dự đoán dựa trên những bài đọc này.
3. Thực hiện các thao tác với cơ sở dữ liệu.
Bạn cần phải thiết kế cẩn thận logic của máy chủ để ngăn chặn các lỗi không mong
muốn, chẳng hạn như ghi đè dữ liệu và bế tắc, chỉ nêu một số lỗi.
3.5 Phát triển ứng dụng di động
Bạn nên sử dụng điện thoại thông minh Android mà bạn nên phát triển ứng dụng di động
để hiển thị thông tin liên quan được lấy từ đám mây. Android Studio là công cụ dễ tiếp
cận nhất để phát triển ứng dụng và bạn có thể tự do chọn Java hoặc Kotlin làm ngôn ngữ
lập trình. Nếu bạn quen thuộc hơn với JavaScript, có một số khung công tác JS dành cho
thiết bị di động mà bạn cũng có thể lựa chọn, chẳng hạn như Cordova và NativeScript.
Nếu bạn đang sử dụng Android Studio, bạn nên sử dụng Volley, thư viện HTTP do
Google phát triển để liên lạc với dịch vụ đám mây. Bạn có thể tìm thêm thông tin về
Volley tại https://developer.android.com/training/volley. Android nghiêm cấm các hoạt
động đòi hỏi nhiều I/O, chẳng hạn như kết nối mạng, chạy trong luồng giao diện người
dùng (đó là luồng chính). Thông thường, các yêu cầu HTTP được gói trong một lớp
Asyntask và cần phải xác định hàm gọi lại.
ảnh hưởng rất lớn đến năng suất. Volley cung cấp các API tiện lợi cho các yêu cầu HTTP
khác nhau có thể giảm đáng kể số lượng mã.Không có yêu cầu cụ thể nào về thiết kế của
ứng dụng dành cho thiết bị di động, nhưng nhìn chung nó phải có các chức năng sau:
1. Hiển thị các dự đoán theo thời gian thực được lấy từ đám mây.
2. Hiển thị lịch sử các bản ghi hoạt động được lưu trữ trong cơ sở dữ liệu trên đám mây.
3. Đảm bảo người dùng có thể tương tác với ứng dụng một cách trơn tru và mã không có
lỗi. Giao diện người dùng và hình ảnh động hấp dẫn cũng rất được khuyến khích.
Bài 1: Các công việc cần làm để hoàn thành dự án
 Bước 1: Chuẩn bị Môi trường Phần mềm
- Cài đặt môi trường phần mềm:
Cài đặt STM32CubeIDE để phát triển phần mềm cho bo mạch STM32.
Cài đặt Mbed CLI để có thể sử dụng Mbed OS.
 Bước 2: Tạo Dự Án Mbed
- Tạo dự án Mbed
Sử dụng Mbed CLI để tạo dự án mới cho bo mạch DISCO-L475VG-IOT01A.
- Chọn mục tiêu và bo mạch
Thiết lập mục tiêu cho dự án và chọn bo mạch DISCO-L475VG-IOT01A.
 Bước 3: Thêm Mã cho Cảm Biến
- Chỉnh sửa mã nguồn
Mở và chỉnh sửa các file mã nguồn để đọc giá trị từ cảm biến trên bo mạch. Ví dụ, nếu có
một cảm biến nhiệt độ, thêm mã để đọc giá trị từ nó.
 Bước 4: Kết Nối với Pelion Device Management
- Đăng ký tài khoản Pelion
Đăng ký một tài khoản trên Pelion Device Management.
- Tạo dự án trên Pelion
Tạo một dự án mới và lấy thông tin Device ID, API Key, và Endpoint.
3. Cấu hình Pelion trong Dự Án Mbed:
- Sử dụng các thông tin chứng chỉ và khóa từ Pelion để cấu hình Mbed OS.
 Bước 5: Kết Nối và Theo Dõi
- Chỉnh Sửa Mã để Kết Nối với Pelion:
Sử dụng thư viện Mbed Pelion để kết nối với Pelion. Điều này bao gồm việc thêm mã để
cấu hình kết nối và gửi dữ liệu.
- Kết nối Bo mạch với Pelion
Chạy chương trình trên bo mạch để kết nối với Pelion.
- Theo dõi Giá trị Cảm biến trên Giao diện Pelion
Truy cập giao diện Pelion Device Management để theo dõi giá trị cảm biến từ bo mạch
của bạn.
Bài 2: Kiến trúc IOT của hệ thống
1. Cảm Biến và Bo Mạch DISCO-L475VG-IOT01A (Edge Devices)
- Cảm Biến: Bao gồm các cảm biến như nhiệt độ, độ ẩm, ánh sáng hoặc các cảm
biến khác được kết nối trực tiếp vào bo mạch DISCO-L475VG-IOT01A.
- Bo Mạch DISCO-L475VG-IOT01A: Là một thiết bị IoT chạy phần mềm nhúng để
đọc giá trị từ cảm biến, xử lý dữ liệu và gửi nó lên tới tầng Edge Computing.
2. Tầng Thu Thập và Xử Lý Dữ Liệu (Edge Computing)
- Chương Trình Nhúng: Có nhiệm vụ đọc giá trị từ cảm biến và chuẩn bị dữ liệu để
gửi tới Arm Pelion.
- Thư Viện Mbed Pelion: Sử dụng thư viện Mbed Pelion để kết nối bo mạch
DISCO-L475VG-IOT01A với Arm Pelion.
3. Mạng Kết Nối (Network)
- Mạng Di Động: Kết nối bo mạch với Arm Pelion thông qua mạng di động, sử
dụng giao thức bảo mật như TLS/DTLS để đảm bảo an toàn trong truyền tải dữ
liệu.
4. Tầng Pelion Device Management (Pelion DM)
- Pelion Device Management: Cung cấp các dịch vụ quản lý thiết bị, gồm đăng ký
thiết bị, quản lý chứng chỉ, và cung cấp giao diện cho việc theo dõi và quản lý các
thiết bị IoT.
5. Dịch Vụ Đám Mây (Cloud Services)
- Lưu Trữ Dữ Liệu: Dữ liệu từ cảm biến có thể được lưu trữ tạm thời hoặc lâu dài
trên dịch vụ đám mây để phục vụ cho các nhu cầu phân tích dữ liệu hoặc báo cáo
dài hạn.
6. Ứng Dụng và Giao Diện Người Dùng
- Ứng Dụng Di Động và Web: Người dùng có thể theo dõi và quản lý các thiết bị
IoT thông qua giao diện người dùng được cung cấp bởi Pelion hoặc ứng dụng di
động và web khác.
7. Dịch Vụ Phân Tích Dữ Liệu (Analytics)
- Phân Tích Dữ Liệu Thông Minh: Có thể tích hợp dịch vụ phân tích dữ liệu thông
minh để xử lý và hiểu rõ hơn về dữ liệu từ cảm biến.
8. Quản Lý Thiết Bị và An Ninh
- Quản Lý Thiết Bị (Device Management): Cung cấp chức năng quản lý từ xa cho
bo mạch DISCO-L475VG-IOT01A, bao gồm cập nhật firmware và cấu hình.
- -An Ninh: Đảm bảo an ninh dữ liệu và thiết bị qua quá trình truyền tải và lưu trữ
dữ liệu.
9. Luồng Dữ Liệu
- Cảm biến gửi dữ liệu: Dữ liệu từ cảm biến được đọc bởi bo mạch DISCO-
L475VG-IOT01A.
- Bo mạch kết nối với Pelion: Dữ liệu được chuẩn bị và gửi tới Arm Pelion qua
mạng di động.
- Pelion quản lý thiết bị: Pelion Device Management đăng ký và quản lý bo mạch.
- Lưu trữ và Theo Dõi: Dữ liệu được lưu trữ và có thể được theo dõi thông qua giao
diện người dùng hoặc tích hợp với các dịch vụ đám mây và phân tích dữ liệu.

You might also like