Thư viện nguồn mở chính
Arduino ESP32: dự án phần cứng nguồn mở của thế giới, được hỗ trợ bởi cộng đồng IoT
Maker Vietnam [1]
Scikit Learn: scikit-learn là bộ công cụ sử dụng ngôn ngữ python, hỗ trợ các thuật
toán khai phá dữ liệu và học máy. [2]
M.E.O 2.0 Project: nền tảng mã nguồn mở Việt Nam của nhóm Maker Hanoi được xây dựng dựa
trên NodeRed và một số IoT Platform sẵn có. Dự án có thiết kế mở cả phần cứng
dưới dạng board mạch đồng hồ thông minh sử dụng chip Esp32. [3]
Các đội tuyển sẽ đọc, nghiên cứu, phân
tích, và tìm hiểu các thư viện, dự án nguồn mở này để nắm được các chức năng
chính, các giao tiếp, các thành phần (module) chính, cách sử dụng và cách mở rộng
tính năng trong bộ thư viện và dự án.
Nội dung đề thi cho phần thi “Phần mềm nguồn
mở” (viết tắt PMNM) sẽ bao gồm:
●
Thêm mới hoặc cải tiến tính năng
cho một dự án PMNM là M.E.O Project và ESP32, sử dụng bộ công cụ scikit-learn
trong vòng 8 tiếng tại nơi thi (theo
phong cách Hackathon [5]). Yêu cầu "thêm mới/cải tiến" sẽ được Ban Tổ
Chức công bố trước khi thí sinh vào phòng thi.
●
Thực nghiệm, tích hợp M.E.O
Project, thiết bị ESP32 với scikit-learn và trình diễn trước Ban Tổ Chức.
Python
Python (cùng HTML, JavaScript và CSS) là
ngôn ngữ lập trình được chọn sử dụng trong nội dung thi “Mã nguồn mở” năm nay
xoay quanh chủ đề phát triển các ứng dụng nguồn mở trên nền tảng IoT và điện
toán đám mây.
Arduino
Arduino là một cộng đồng
mã nguồn mở thiết bị nhúng bao gồm cả phần cứng và Arduino IDE. Được giới thiệu
vào năm 2005, Những nhà thiết kế của Arduino cố gắng mang đến một phương thức dễ
dàng, không tốn kém cho những người yêu thích, sinh viên và giới chuyên nghiệp
để tạo ra những thiết bị có khả năng tương tác với môi trường thông qua các cảm
biến và các cơ cấu chấp hành. Những ví dụ phổ biến cho những người yêu thích mới
bắt đầu bao gồm các robot đơn giản, điều khiển nhiệt độ và phát hiện chuyển động.
Đi cùng với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy
tính cá nhân thông thường và cho phép người dùng viết các chương trình cho
Arduino bằng ngôn ngữ C hoặc C++.
Git
Git là công cụ quản lý mã nguồn được sử dụng
rất nhiều tại các dự án mã nguồn mở trên thế giới. Sinh viên cần thiết phải tìm
hiểu Git và sử dụng git để nộp kết quả bài thi thông qua git diff và đẩy pull
request lên tới kho mã nguồn của BTC.
Thư viện phụ thuộc
NodeRed: nền
tảng hỗ trợ kết nối nhiều loại thiết bị IoT, các API và các dịch vụ từ các nhà
cung cấp khác. NodeRed cung cấp các tiện ích hỗ trợ thông qua giao diện trực
quan với yếu tố chính là các luồng làm việc (flow). Người dùng có thể định
nghĩa, tuỳ chỉnh các luồng làm việc theo đầu vào (input) để nhận dữ liệu từ các
hệ thống, biến đổi chuyển hoá dữ liệu (function) để gửi dữ liệu đến các hệ thống
bên ngoài thông qua các đầu ra (output). Trong M.E.O Project [3] đã tích hợp sẵn
NodeRed [4] và định nghĩa sẵn input, output để giúp người phát triển làm việc mới
mạch esp32.
numpy [8]: thư viện cơ bản phục vụ cho việc tính toán
khoa học: biểu diễn và hỗ trợ các phép toán trên ma trận, hỗ trợ các phép toán
đại số tuyến tính
Scipy [9]: thư
viện hỗ trợ để thực hiện các phép toán
Các thư viện sử dụng trên Arduino ESP32: [10]
[11] [12] [13]
Hình ảnh mẫu thiết bị đồng hồ thông
minh ESP32
Tính năng chính: có màn hình hiển thị Oled
1.3, cảm biến 6050 - gia tốc và gyro, đồng hồ thời gian thực ds3231, bộ thu
phát điều khiển hồng ngoại IR.
Tập dữ liệu mẫu[1]
Dữ liệu mẫu được thu thập bằng thiết bị và gán
nhãn theo các hành động có sẵn. Mô tả sơ bộ của dữ liệu gồm 7 thuộc tính và 1
nhãn:
-
Ax: số thực mô tả toạ độ
-
Ay: số thực mô tả toạ độ
-
Az: số thực mô tả toạ độ
-
Yaw: số thực mô tả toạ độ
-
Pitch: số thực mô tả
-
Roll: số thực mô tả
-
Time: đơn vị millisecond, tổng thời
gian thu thập dữ liệu
-
Category: nhãn thể hiện loại hành
động của bộ dữ liệu
Những điểm mới và thay đổi
trong cuộc thi OLP FOSS 2018
So với các cuộc thi Olympic Nguồn mở những
năm 2013 trở về trước, cuộc thi OLP FOSS 2018 có những điểm thay đổi như sau:
- Bỏ phần thi câu hỏi trắc nghiệm lý
thuyết về Phần mềm Nguồn mở.
- Bỏ phần thi trắc nghiệm về các thư viện
Nguồn mở.
- Bỏ phần thi lập trình dạng thuật toán
theo chủ đề.
- Thay vào đó, đề thi năm nay tập trung
vào một phần mềm thực tế hoặc/và một thư viện nguồn mở phổ biến.
- Trong toàn bộ thời gian thi, thí sinh
chỉ tập trung giải một bài toán duy nhất do Ban Tổ Chức công bố trước khi
thi.
- Thí sinh sẽ phải trình diễn kết quả
thi vào cuối buổi thi trong thời gian 5 phút.
- Thí sinh sẽ phải làm quen với kỹ năng
lập trình nhúng trên mạch ESP32, mã nguồn mở Arduino, M.E.O Project.
Về hướng ra đề thi
Bài thi sẽ tập trung vào việc xây dựng
thêm a) dịch vụ kết nối thiết bị ESP32 với M.E.O và NodeRed để giải quyết một
bài toán IoT và b) thu thập và xử lý các dữ liệu từ ESP32.
Tất cả các dịch vụ được yêu cầu đóng gói
và chạy trên Docker container. Đề bài sẽ được công bố ngay trước khi thi.
Về số lượng sinh viên tham
gia
- Ban tổ chức
không hạn chế số lượng đội sinh viên tham gia cuộc thi OLP FOSS 2018.
- Tuy nhiên, mỗi đội sinh viên có số
sinh viên tham gia tối đa là 03 (ba) người.
- Ban tổ chức sẽ cung cấp máy tính (PC)
cùng mạch thiết bị ESP32 và khuyến khích sinh viên áp dụng lập trình cặp (pair programming).
- Sinh viên được quyền mang và sử dụng
laptop cá nhân.
- Sinh viên được khuyến khích tương tác
cùng các cộng đồng nguồn mở tại Việt Nam như Vietnam OpenStack, Docker
Hanoi, Maker Hanoi, IoT Maker Vietnam để chuẩn bị kiến thức trước khi thi.
Về môi trường phát triển
A. Laptop: Khuyến khích cấu hình laptop
như bên dưới hoặc tương đương.
- CPU core i5 3.00 GHz hoặc tương
đương.
- RAM 4GB hoặc nhiều hơn.
- Internet connection (LAN hoặc
Wireless).
B. Môi trường:
- Ubuntu tối thiểu 16.04 64 bit.
- Trình biên dịch IDE Arduino
C. Công cụ:
- Board mạch ESP32: sẽ do BTC chuẩn bị.
Tiêu chí đánh giá
Một số tiêu chí đánh giá kết quả cuộc thi
là:
- Mức độ tối ưu, cải thiện công năng/sửa lỗi.
- Độ hoàn thiện cũng như tính sáng tạo của giải pháp IoT.
- Mã nguồn trong sáng, rõ ràng, có tài liệu đầy đủ thể hiện
tính nguồn mở.
Gợi ý
Để thực hiện tốt bài thi, thí sinh cần làm
quen với M.E.O, ESP32, scikit-learn và cần
nắm vững các thao tác làm việc với Docker.
Thời gian làm bài
Thời gian cho cuộc thi trong ngày là 07 (bảy)
tiếng, từ 07h30 sáng tới 14h30 trong ngày thi. Sau đó các đội cần trình bày sản
phẩm từ 14h30 tới 15h30.
Giải thưởng
Theo qui chế của OLP Tin học [6], giải
chính thức gồm giải nhất, giải nhì và giải ba. Hội đồng giám khảo sẽ căn cứ vào
chất lượng các bài thi để đề nghị số lượng giải thưởng.
Thông tin tham khảo
[1] Docker: https://github.com/espressif/arduino-esp32
[2] Scikit-learn: http://scikit-learn.org/stable/
[3] M.E.O Project: https://github.com/makerhanoi/meo-guide
[4] NodeRed: https://nodered.org/ và https://github.com/node-red
[5] Hackathon là gì: https://en.wikipedia.org/wiki/Hackathon
[6] Chương trình tổng thể: http://www.olp.vn/olympic/noi-quy
[7] Arduino Ide https://www.arduino.cc/en/Main/OldSoftwareReleases
[8] Numpy http://www.numpy.org/
[9] Scipy https://www.scipy.org/
[10] Oled 1.3 (SH1106) - u8g2 : https://github.com/olikraus/u8g2
[11] Mpu6050 – i2cdev : https://github.com/jrowberg/i2cdevlib
[12] Ds3231: https://github.com/jarzebski/Arduino-DS3231
& http://arduino.vn/bai-viet/369-giao-tiep-i2c-va-su-dung-module-realtime-clock-ds1307
[13] IR library: https://github.com/z3t0/Arduino-IRremote
Các cộng đồng nguồn mở hỗ trợ cho cuộc
thi
Vietnam
OpenStack
Facebook: https://www.facebook.com/VietOpenStack/
Group: https://www.facebook.com/groups/vietstack/
Slack: https://vietops.herokuapp.com/
Docker
Hanoi
Facebook: https://www.facebook.com/dockerhanoi
Group: https://www.facebook.com/groups/containervietnam/
Maker
Hanoi
Website: https://makerhanoi.org
Facebook: https://www.facebook.com/makerhanoi/
Meetup: https://www.meetup.com/Ha-Noi-Maker-Meetup/
(Download Thư viện phía dưới)