Tải bản đầy đủ (.docx) (65 trang)

XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA TRÊN NỀN TẢNG NODE.JS

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 65 trang )

TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN

XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG
MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA
TRÊN NỀN TẢNG NODE.JS

HÀ NỘI – 2017
TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG HÀ NỘI


KHOA CÔNG NGHỆ THÔNG TIN

PHÙNG THẾ NHÂN
XÂY DỰNG ỨNG DỤNG TRỰC TUYẾN THEO DÕI CHẤT LƯỢNG
MÔI TRƯỜNG VÀ ĐIỀU KHIỂN THIẾT BỊ TỪ XA
TRÊN NỀN TẢNG NODE.JS

Chuyên ngành : Công Nghệ Thông tin
Mã ngành : D480201
NGƯỜI HƯỚNG DẪN: ThS. LÊ LAN ANH

HÀ NỘI – 2017


LỜI CẢM ƠN
Trước tiên tôi xin gửi lời cám ơn chân thành và sâu sắc nhất tới các thầy
cô giáo trong trường Đại học Tài nguyên và Môi trường nói chung và các thầy
cô giáo trong khoa Công nghệ Thông tin nói riêng đã tận tình giảng dạy, truyền
đạt những kiến thức, kinh nghiệm quý báu trong suốt thời gian qua.
Đặc biệt tôi xin gửi lời cảm ơn đến cô giáo Ths. Lê Lan Anh đã tận tình


giúp đỡ, trực tiếp chỉ bảo, hướng dẫn tôi trong suốt quá trình làm đồ án tốt
nghiệp. Trong thời gian làm đồ án, tôi không ngừng tiếp thu thêm nhiều kiến
thức bổ ích và học tập được tinh thần làm việc, thái độ nghiên cứu đề tài
nghiêm túc, hiệu quả, đây là những điều rất cần thiết cho tôi trong quá trình
học tập và công tác sau này.
Sau cùng tôi xin gửi lời cảm ơn chân thành tới gia đình, bạn bè đã luôn
sát cánh, động viên, đóng góp ý kiến và tạo điều kiện tốt nhất để tôi có thể
hoàn thành đề tài này.

Sinh viên thực hiện
Phùng Thế Nhân


LỜI CAM ĐOAN
Tôi xin cam đoan rằng đây là công trình nghiên cứu của tôi. Các số
liệu và kết quả nghiên cứu trong đề tài này là trung thực và chưa từng được
công bố trong bất kỳ một công trình nào khác.
Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện đề tài đã được
cám ơn và các thông tin trích dẫn trong đề tài này đều được chỉ rõ nguồn gốc.
Sinh viên thực hiện

Phùng Thế Nhân


MỤC LỤC


DANH MỤC CÁC HÌNH



7

MỞ ĐẦU
1. Lý do chọn đề tài
Hiện nay, cuộc cách mạng công nghiệp lần 4 (công nghiệp số) đang tới
gần. Sự ra đời của hàng loạt công nghệ mới cho phép chúng ta có thể xây
dựng những thiết bị và hệ thống thông minh, mạnh mẽ, có khả năng hỗ trợ tối
đa tiện ích cho người dùng. Từ quản lý, vận hành xí nghiệp cho tới bật lò sưởi
hộ gia đình, tất cả đều có thể vận hành tự động và chính xác thông qua
internet mà không cần sự thao tác trực tiếp từ con người.
Để bắt kịp xu hướng công nghệ và hỗ trợ phát triển mở rộng các dự án
sau này, tôi đã tiến hành chọn đề tài: “Xây dựng ứng dụng trực tuyến theo dõi
chất lượng môi trường và điều khiển thiết bị từ xa trên nền tảng node.js.”
2. Mục tiêu
Xây dựng hệ thống có khả năng số hóa các đối tượng thực tế vào môi
trường máy tính và tương tác.
Chế tạo các thiết bị có khả năng số hóa các thông số của môi trường và
có thể điều khiển từ Internet.
Xây dựng Web Application phục vụ nghiệp vụ hệ thống.
3. Đối tượng và nội dung nghiên cứu













Đối tượng nghiên cứu:
Nền tảng Nodejs
Cơ sở dữ liệu mongodb
Thiết bị điện tử có khả năng kết nối internet
Nội dung nghiên cứu:
Khái niệm mô hình, giao thức, cách thức phát triển ứng dụng, khai thác các
mã nguồn mở để phục vụ quá trình phát triển thuận lợi hơn.
Cấu trúc Nodejs
Khai thác dữ liệu trong Mongodb
Điện toán đám mây
Thiết bị cảm ứng nhiệt độ, độ ẩm, khí gas, relay


8

4. Phương pháp tiếp cận nghiên cứu


Phương pháp nghiên cứu lý thuyết: tiến hành thu thập tài liệu, thông tin liên



quan đến đề tài.
Tổng hợp và phân tích tài liệu để đưa ra cơ sở lý thuyết về triển khai dự án



trên nền tảng Nodejs.

Kết nối Clound Mqtt với thiết bị điện tử và ứng dụng nodejs.
5. Bố Cục đồ án


Bố cục đồ án gồm 4 phần:
Chương 1: Tổng quan.
Chương 2: Phân tích thiết kế hệ thống.
Chương 3: Sản phẩm thiết bị đo nhiệt độ, độ ẩm, khí gas, điều
khiển máy bơm nước.
Chương 4: Sản phẩm theo dõi chất lượng môi trường trên nền
tảng Nodejs


9

CHƯƠNG I: TỔNG QUAN
1.1. Internet Of Thing là gì
IOT là thuật ngữ dùng để chỉ các đối tượng có thể được nhận biết
(identifiable) cũng như chỉ sự tồn tại của chúng trong một kiến trúc mang tính
kết nối. Cụm từ này được đưa ra bởi Kevin Ashton vào năm 1999. Ông là một
nhà khoa học đã sáng lập ra Trung tâm Auto-ID ở đại học MIT, nơi thiết lập
các quy chuẩn toàn cầu cho RFID (một phương thức giao tiếp không dây
dùng sóng radio) cũng như một số loại cảm biến khác. IoT sau đó cũng được
dùng nhiều trong các ấn phẩm đến từ các hãng và nhà phân tích.
"Thing" - sự vật - trong Internet of Things, có thể là một trang trại động
vật với bộ tiếp sóng chip sinh học, một chiếc xe ô tô tích hợp các cảm biến để
cảnh báo lái xe khi lốp quá non, hoặc bất kỳ đồ vật nào do tự nhiên sinh ra
hoặc do con người sản xuất ra mà có thể được gán với một địa chỉ IP và được
cung cấp khả năng truyền tải dữ liệu qua mạng lưới.
IoT phải có 2 thuộc tính: một là đó phải là một ứng dụng internet. Hai

là, nó phải lấy được thông tin của vật chủ.
Kiến trúc IoT được đại diện cơ bản bởi 4 phần: Vạn vật (Things), trạm
kết nối (Gateways), hạ tầng mạng và điện toán đám mây (Network and Cloud)
và các lớp tạo và cung cấp dịch vụ (Services-creation and Solutions Layers).
• Vạn vật (Things): Ngày nay có hàng tỷ vật dụng đang hiện hữu trên
thị trường gia dụng và công nghệ, ở trong nhà hoặc trên tay của người dùng.
Chẳng hạn như xe hơi, thiết bị cảm biến, thiết bị đeo và điện thoại di động
đang được kết nối trực tiếp thông qua băng tầng mạng không dây và truy cập
vào Internet. Giải pháp IoT giúp các thiết bị thông minh được sàng lọc, kết


10

nối và quản lý dữ liệu một cách cục bộ, còn các thiết bị chưa thông minh thì
có thể kết nối được thông qua các trạm kết nối.
• Trạm kết nối (Gateways): Một rào cản chính khi triển khai IoT đó là
gần 85% các vật dụng đã không được thiết kế để có thể kết nối với Internet và
không thể chia sẻ dữ liệu với điện toán đám mây. Để khắc phục vấn đề này,
các trạm kết nối sẽ đóng vai trò là một trung gian trực tiếp, cho phép các vật
dụng có sẵn này kết nối với điện toán đám mây một cách bảo mật và dễ dàng
quản lý.
• Hạ tầng mạng và điện toán đám mây (Network and Cloud):
- Cơ sở hạ tầng kết nối: Internet là một hệ thống toàn cầu của nhiều
mạng IP được kết nối với nhau và liên kết với hệ thống máy tính. Cơ sở hạ
tầng mạng này bao gồm thiết bị định tuyến, trạm kết nối, thiết bị tổng hợp,
thiếp bị lặp và nhiều thiết bị khác có thể kiểm soát lưu lượng dữ liệu lưu
thông và cũng được kết nối đến mạng lưới viễn thông và cáp - được triển khai
bởi các nhà cung cấp dịch vụ.
- Trung tâm dữ liệu/ hạ tầng điện toán đám mây: Các trung tâm dữ liệu
và hạ tầng điện toán đám mây bao gồm một hệ thống lớn các máy chủ, hệ

thống lưu trữ và mạng ảo hóa được kết nối.
• Các lớp tạo và cung cấp dịch vụ (Services-Creation and Solutions
Layers): Intel đã kết hợp những phần mềm quản lý API hàng đầu (Application
Progmraming Interface) là Mashery* và Aepona* để giúp đưa các sản phẩm
và giải pháp IoT ra thị trường một cách chóng và tận dụng được hết giá trị của
việc phân tích các dữ liệu từ hệ thống và tài sản đang có sẵn.
Các thành phần trong hệ sinh thái này rất đa dạng, bao gồm: thiết bị
phần cứng, hạ tầng kết nối, phần mềm nền tảng, và các công cụ phân tích dữ
liệu. Cụ thể như sau:


11

• Thiết bị IoT bao gồm các thiết bị phần cứng có khả năng giao tiếp
theo các chuẩn IoT được định nghĩa sẵn. Các thiết bị này rất đa dạng tùy theo
mục đích sử dụng như: thiết bị thông minh cá nhân (điện thoại, đồng hồ), thiết
bị gia dụng (tủ lạnh, đều hòa nhiệt độ), hay các thiết bị quan trắc, cảm biến đo
các điều kiện của môi trường (nhiệt độ, độ ẩm, ánh sáng) …
• Hạ tầng kết nối IoT chính là hạ tầng mạng, đường truyền di động để
các thiết bị IoT có thể kết nối, trao đổi dữ liệu với nhau thông qua một hệ
thống phần mềm nền tảng trung tâm. Các thiết bị này có thể kết nối tới phần
mềm trung tâm dưới dạng kết nối trực tiếp hoặc kết nối thông qua các thiết bị
trung gian (gateway).
• Phần mềm nền tảng IoT: đây được coi là trái tim của hệ sinh thái IoT
có các chức năng quản lý kết nối, tổng hợp, lưu trữ và xử lý dữ liệu gửi về từ
các thiết bị.
• Phần mềm phân tích dữ liệu lớn: Đây là thành phần mang lại giá trị
chính cho hệ sinh thái IoT bởi đích đến của IoT, xét cho cùng, không chỉ đơn
thuần là kết nối và nhận dữ liệu từ các thiết bị mà là khai thác dữ liệu đó thế
nào để tạo ra giá trị cho người dùng cuối.

• Phần mềm ứng dụng phục vụ trực tiếp người dùng cuối.
1.2. Lập trình nhúng C++
Xuất hiện từ những năm đầu thập niên 1960, hệ thống nhúng đang dần
trở thành một ngành phát triển mạnh mẽ trong lĩnh vực công nghệ thông tin
(CNTT), với những ứng dụng rộng rãi trong công nghiệp và đời sống.
Theo các chuyên gia, ước tính đến năm 2017, doanh số của thị trường phần
mềm cho hệ thống nhúng toàn cầu sẽ đạt cột mốc 23 tỷ đô-la Mỹ. Điều dự
báo nói trên, cùng với sự xuất hiện ngày càng nhiều các đối tác lớn trong lĩnh
vực này tại Việt Nam, đã mở ra một hướng đi mới cho thị trường phần mềm
của chúng ta trong tương lai.


12

Những đặc trưng của hệ thống nhúng:
- Hệ thống nhúng (embedded system) được định nghĩa là một hệ thống
chuyên dụng, thường có khả năng tự hành và được thiết kế tích hợp vào một
hệ thống lớn hơn để thực hiện một chức năng chuyên biệt nào đó.
- Khác với các máy tính đa chức năng (multi-purposes computers), ví dụ như
máy vi tính cá nhân (PC), một hệ thống nhúng thường chỉ thực hiện một hoặc
một vài chức năng nhất định. Hệ thống nhúng bao gồm cả thiết bị phần cứng
và phần mềm, hầu hết đều phải thỏa mãn yêu cầu hoạt động theo thời gian
thực (real-time).
- Tùy theo tính chất và yêu cầu, mức độ đáp ứng của hệ thống có thể
phải là rất nhanh (ví dụ như hệ thống thắng trong xe hơi hoặc điều khiển thiết
bị trong nhà máy), hoặc có thể chấp nhận một mức độ chậm trễ tương đối (ví
dụ như điện thoại di động, máy lạnh, ti-vi).
Để có thể dễ hình dung, ta xem ví dụ sau đây: một chiếc xe hơi trung
bình có khoảng 70-80 chip vi xử lý (micro controller unit), mỗi bộ vi xử lý
đảm nhiệm một nhiệm vụ, chẳng hạn như đóng mở cửa, điều khiển đèn tín

hiệu, đo nhiệt độ trong/ngoài xe, hiển thị giao diện người dùng (dashboard),
điều khiển thắng (nếu dùng hệ thống thắng điện)…
Do tính chất chuyên biệt của hệ thống nhúng và chúng thường được sản
xuất với số lượng lớn nên các nhà sản xuất thường yêu cầu phải tối ưu hóa
chúng nhằm giảm thiểu kích thước và chi phí sản xuất.
1.3. MongoDB


Khái niệm:
MongoDB là một chương trình cơ sở dữ liệu mã nguồn mở được thiết kế
theo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt
cho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc
nhất định nào. Chính do cấu trúc linh hoạt này nên MongoDB có thể được


13

dùng để lưu trữ các dữ liệu có cấu trúc phức tạp và đa dạng và không cố định


(hay còn gọi là Big Data).
Đặc điểm:
+ Kho lưu định hướng Document: Dữ liệu được lưu trong các tài liệu
kiểu JSON.
+ Lập chỉ mục trên bất kỳ thuộc tính nào.
+ Các truy vấn đa dạng.
+ Cập nhật nhanh hơn.




Cách hoạt động:
+ MongoDB hoạt động dưới một tiến trình ngầm service luôn mở một
cổng (Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ
các ứng dụng gửi vào sau đó mới tiến hành xử lý.
+ Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có
tên “_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác định được tính
duy nhất của bản ghi này so với bản ghi khác, cũng như phục vụ các thao tác
tìm kiếm và truy vấn thông tin về sau.
+ Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc
độ truy vấn thông tin đạt hiệu suất cao nhất.
+ Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ
nhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải
đọc từ ổ cứng.
+ Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng
dụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60
giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ
cứng.


14

Hình 1.1: Nguyên lý hoạt động của Mongodb



Lợi thế của MongoDB so với cơ sở dữ liệu quan hệ:
+ Ít Schema hơn: MongoDB là một cơ sở dữ liệu dựa trên Document,
trong đó một Collection giữ các Document khác nhau. Số trường, nội dung và
kích cỡ của Document này có thể khác với Document khác.
+ Cấu trúc của một đối tượng là rõ ràng.

+ Không có các Join phức tạp.
+ Khả năng truy vấn sâu hơn. MongoDB hỗ trợ các truy vấn động trên
các Document bởi sử dụng một ngôn ngữ truy vấn dựa trên Document mà
mạnh mẽ như SQL.
+ Dữ liệu được caching (ghi đệm) lên RAM, hạn chế truy cập vào ổ
cứng nên tốc độ đọc và ghi cao
+ MongoDB dễ dàng để mở rộng.
+Việc chuyển đổi/ánh xạ của các đối tượng ứng dụng đến các đối tượng
cơ sở dữ liệu là không cần thiết.
+Sử dụng bộ nhớ nội tại để lưu giữ phần công việc, giúp truy cập dữ liệu



nhanh hơn.
Nhược điểm:
+ Không ràng buộc, toàn vẹn nên không ứng dụng được cho các mô hình
giao dịch yêu cầu độ chính xác cao.


15

+ Không có cơ chế transaction (giao dịch) để phục vụ các ứng dụng ngân
hang.
+ Dữ liệu được caching, lấy RAM làm trọng tâm hoạt động vì vậy khi
hoạt động yêu cầu một bộ nhớ RAM lớn.
+ Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng
ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất


là rất cao.

Lưu ý khi sử dụng MongoDB:
+ MongoDB sinh ra để tăng tốc độ truy xuất dữ liệu, phù hợp cho các
ứng dụng cần tốc độ phản hồi nhanh (realtime như facebook chẳng hạn). Còn
các tác nghiệp cần tính toàn vẹn dữ liệu (trong banking).
+ MongoDB không có tính ràng buộc, một điều tồi tệ trong Database vì
vậy sẽ rất cần sự cẩn thận khi thao tác trên các collection có quan hệ dữ liệu
với nhau.
+ MongoDB đẩy trách nghiệm thao tác Database cho tầng ứng dụng nên
sẽ tốn tài nguyên(tài nguyên bây giờ không còn là vấn đề quá lớn).
+ MongoDb có thể mở trộng theo chiều ngang (scale out) phương pháp
tăng cường khả năng lưu trữ và xử lý là dùng nhiều máy tính phân tán.
MongoDb còn có thể mở rộng theo chiều dọc (scale up) tăng cấu hình server.
+ MongoDb có thể dùng nhiều máy tính phân tán để lưu trữ dữ liệu nên
chi phí sẽ rẻ hơn Mysql . Mysql sử dụng những máy chủ hàng khủng, độc
quyền nên sẽ đắt đỏ hơn.


16

1.4. Giới thiệu về javascript và node.js.
1.4.1 Tổng quan chung về javascript .
JavaScript là một ngôn ngữ kịch bản (scripting language) được dùng để
tạo các script ở máy client (client-side script) và máy server (server-side
script). Các script ở máy client được thực thi tại trình duyệt, các script ở máy
server được thực hiện trên server. Chương này sẽ giới thiệu cho chúng ta về
ngôn ngữ Javascript, và cách chèn một script vào trong tài liệu HTML.

Hình 1.2: Logo ngôn ngữ Javascript
HTML lúc đầu được phát triển như là một định dạng của tài liệu có thể
chuyển dữ liệu trên Internet Tuy nhiên, không lâu sau đó, trọng tâm của

HTML nặng tính hàn lâm và khoa học dần chuyển hướng sang người dùng
thường nhật vì ngày nay người dùng xem Internet như là một nguồn thông tin
và giải trí. Các trang Web ngày càng mang tính sáng tạo và đẹp mắt hơn nhằm
thu hút nhiều người dùng hơn. Nhưng thực chất kiểu dáng và nội dung bên
trong vẫn không thay đổi. Và người dùng hầu như không thể điều khiển trên
trang Web mỗi khi nó được hiển thị.


17

Javascript được phát triển như là một giải pháp cho vấn đề nêu trên.
Javascript là một ngôn ngữ kịch bản được Sun Microsystems và Netscape
phát triển. Nó được dùng để tạo các trang Web động và tương tác trên
Internet. Đối với những người phát triển HTML, Javascript rất hữu ích trong
việc xây dựng các hệ thống HTML có thể tương tác với người dùng.
JavaScript
JavaScript là một ngôn ngữ kịch bản dựa trên đối tượng nhằm phát
triển các ứng dụng Internet chạy trên phía client và phía server.
Các ứng dụng client được chạy trong một trình duyệt như Netscape
Navigator hoặc Internet Explorer, và các ứng dụng server chạy trên một Web
server như Microsoft’s Internet Information Server hoặc Netscape Enterprise
Server.
Hiệu ứng và quy tắc JavaScript
JavaScript là một ngôn ngữ lập trình được nhúng được trong các trang
HTML. JavaScript nâng cao tính động và khả năng tương tác cho web-site
bằng cách sử dụng các hiệu ứng của nó như thực hiện các phép tính, kiểm tra
form, viết các trò chơi, bổ sung các hiệu ứng đặc biệt, tuỳ biến các chọn lựa
đồ hoạ, tạo ra các mật khẩu bảo mật và hơn thế nữa.
Chúng ta có thể sử dụng JavaScript để:



Tương tác với người dùng: Chúng ta có thể viết mã để đáp lại các sự
kiện. Các sự này sẽ có thể phát sinh bởi người dùng - - nhấp chuột hay được
phát sinh từ hệ thống - - định lại kích thước của trang và v.v.


18


Thay đổi nội dung động: Mã JavaScript có thể dùng để thay đổi nội
dung và vị trí các phần tử một cách động trên một trang nhằm đáp lại sự
tương tác với người dùng.



Kiểm tra tính hợp lệ dữ liệu: Chúng ta có thể viết mã nhằm kiểm tra
tính hợp lệ của dữ liệu do người dùng nhập vào trước khi nó được gửi lên
Web server để xử lý.
Giống như các ngôn ngữ khác, JavaScript cũng tuân thủ một số quy tắc
ngữ pháp căn bản. Việc nắm vững các quy tắc ngữ pháp này có thể giúp ta
đọc được script và tự viết các script không bị lỗi.
Một số trong các luật này bao gồm:



Dùng Caps. JavaScript phân biệt chữ hoa chữ thường



Dùng Pairs. Trong JavaScript, luôn luôn có cặp ký hiệu mở và đóng.

Lỗi sẽ xuất hiện khi bỏ sót hoặc đặt sai một trong hai ký hiệu này.



Dùng Spaces (các ký tự trắng).Như HTML, JavaScript thường bỏ qua
ký tự trắng. Trong JavaScript, ta có thể thêm vào các ký tự trắng hoặc các tab
giúp cho ta dễ dàng đọc hay sửa các file script.



Dùng Chú thích (Comments).Các chú thích giúp ta ghi chú về chức
năng của đoạn script, thờI gian và ngườI tạo ra đoạn script.
Mặc dù cả client-side JavaScript và server-side JavaScript đều dựa trên
một ngôn ngữ nền tảng như nhau, nhưng mỗI loạI còn có thêm những tính
năng chuyên biệt phù hợp với môi trường mà nó chạy. Nghĩa là, client-side
JavaScript bao gồm các đối tượng được định nghĩa sẵn chỉ có thể sử dụng trên
trình duyêt, Server-side JavaScript bao gồm các đối tượng và các hàm được
định nghĩa sẵn chỉ có thể sử dùng trong các ứng dụng phía server (server-side
applications)


19


JavaScript trên Web Server
Chúng ta có thể nhúng các lệnh JavaScript chạy trên server (server-side
script) vào trong tài liệu HTML. Quá trình tạo ra các ứng dụng server-side là
một quá trình gồm hai giai đọan.

1.


Các trang HTML có chứa các câu lệnh JavaScript của cả client-side và serverside đều được tạo ra cùng với các file JavaScript. Tất cả các file này sẽ được
biên dịch thành dạng mã thực thi được là bytecode.

2.

Khi trình duyệt yêu cầu trang HTML, run-time engine sẽ thực thi mã lệnh
server-side JavaScript rồi trả trang HTML về cho trình duyệt.
Một số công dụng của script server-side bao gồm:

o

Kết nối vào các cơ sở dữ liệu

o

Chia sẻ thông tin cho những người dùng của một ứng dụng
1.4.2. Giới thiệu về Nodejs.
Node.js là một cách để chạy JavaScript trên server. Hiện nay, với sự phát
triển lớn mạnh của javascript thì Node.js đang tạo ra một làn sóng trong cộng
đồng với các sản phẩm nhanh, chính xác, và đáp ứng yêu cầu realtime.


20

Hình 1.3: Logo nền tảng Nodejs
Node.js là gì?
Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome.
Bình thường thì bạn cũng có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì.
Node.js làm điều đó đối với các web server. JavaScript suy cho cùng cũng chỉ

là một ngôn ngữ - vậy thì không có lý do gì để nói nó không thể sử dụng trên
môi trường server tốt như là trong trình duyệt của người dùng được.
Trong một môi trường server điển hình LAMP (Linux-Apache-MySQLPHP), bạn có một web server là Apache hoặc NGINX nằm dưới, cùng với
PHP chạy trên nó. Mỗi một kết nối tới server sẽ sinh ra một thread mới, và
điều này khiến ứng dụng nhanh chóng trở nên chậm chạp hoặc quá tải - cách
duy nhất để hỗ trợ nhiều người dùng hơn là bằng cách bổ sung thêm nhiều
máy chủ. Đơn giản là nó không có khả năng mở rộng tốt. Nhưng với Node.js
thì điều này không phải là vấn đề. Không có một máy chủ Apache lắng nghe
các kết nối tới và trả về mã trạng thái HTTP – lập trình viên sẽ phải tự quản lý
kiến trúc lõi của máy chủ đó. May mắn thay, có một số module giúp thực hiện
điều này được dễ dàng hơn, nhưng công việc này vẫn gây một chút khó khăn
khi mới bắt đầu. Tuy nhiên, kết quả thu được là một ứng dụng web có tốc độ
thực thi cao.


21

Hình 1.4: Klout – Một ứng dụng web thống kê các hoạt động xã hội
được xây dựng dựa trên Node.js vì ưu điểm tốc độ thực thi cao
JavaScript là một ngôn ngữ dựa trên sự kiện, vì vậy bất cứ thứ gì xảy ra
trên server đều tạo ra một sự kiện non-blocking. Mỗi kết nối mới sinh ra một
sự kiện; dữ liệu nhận được từ một upload form sinh ra một sự kiện datareceived; việc truy vấn dữ liệu từ database cũng sinh ra một sự kiện. Trong
thực tế, điều này có nghĩa là một trang web Node.js sẽ chẳng bao giờ bị khóa
(lock up) và có thể hỗ trợ cho hàng chục nghìn user truy cập cùng lúc. Node.js
đóng vai trò của server - Apache - và thông dịch mã ứng dụng chạy trên nó.
Giống như Apache, có rất nhiều module (thư viện) có thể được cài đặt để bổ
sung thêm các đặc trưng và chức năng như lưu trữ dữ liệu, hỗ trợ file Zip,
đăng nhập bằng Facebook, hoặc các cổng thanh toán. Dĩ nhiên, nó không có



22

nhiều thư viện như PHP, nhưng Node.js vẫn đang ở trong giai đoạn ban đầu
và có một cộng đồng rất mạnh mẽ ở đằng sau nó.
Một khái niệm cốt lõi của Node.js đó là các function bất đồng bộ
asynchronous functions) - vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này.
Với hầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi function
thực thi xong trước khi có thể tiếp tục chạy tiếp. Với Node.js, bạn xác định các
function sẽ chạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại của
ứng dụng vẫn chạy đồng thời. Nó là một chủ đề phức tạp mà tôi sẽ không đi vào
quá sâu trong bài viết này, nhưng đó là một trong những đặc trưng tiêu biểu của
Node.js, vì vậy việc nắm vững nó là điều hết sức quan trọng.
Trong quá trình phát triển ứng dụng dựa trên nền tảng, ta cần chú ý tới
hai đối số - request, bao gồm các tham số yêu cầu từ người dùng; và response,
cái chúng ta sử dụng để gửi kết quả trả về.
Các đặc tính của Node.js:
+ Không đồng bộ: Tất cả các API của NodeJS đều không đồng bộ (noneblocking), nó chủ yếu dựa trên nền của NodeJS Server và chờ đợi Server trả
dữ liệu về. Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ
chế thông báo các sự kiện của Node.js giúp máy chủ để có được một phản
ứng từ các cuộc gọi API trước (Realtime).
+ Chạy rất nhanh: NodeJ được xây dựng dựa vào nền tảng V8 Javascript
Engine nên việc thực thi chương trình rất nhanh.
+ Đơn luồng nhưng khả năng mở rộng cao: Node.js sử dụng một mô
hình luồng duy nhất với sự kiện lặp. cơ chế tổ chức sự kiện giúp các máy chủ
để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở
rộng như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử lý
yêu cầu. Node.js sử dụng một chương trình đơn luồng và các chương trình


23


tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu
cầu máy chủ truyền thống như Apache HTTP Server.
+ Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứng
dụng này chủ yếu là đầu ra dữ liệu.
+ Có giấy phép: NodeJS đã được cấp giấy phép bởi MIT License.
The Node Package Manager(NPM) - Trình quản lý gói tập tin
Khi làm việc với Node js thì một điều chắc chắn không nên bỏ qua là
xây dựng package quản lý sử dụng các cộng cụ NPM mà mặc định với mọi
cài đặt Node js. Ý tưởng của mô-đun NPM là khá tương tự như Ruby-Gems:
một tập hợp các hàm có sẵn có thể sử dụng được, thành phần tái sử dụng, tập
hợp các cài đặt dễ dàng thông qua kho lưu trữ trực tuyến với các phiên bản
quản lý khác nhau.
Danh sách các mô-đun có thể tìm trên web NPM package hoặc có thể
truy cập bằng cách sử dụng công cụ NPM CLI sẽ tự động cài đặt với Node js.
Một số các module NPM phổ biến nhất hiện nay là:
+ expressjs.com/ - Express.js, một Sinatra-inspired web framework khá
phát triển của Node.js, chứa rất nhiều các ứng dụng chuẩn của Node.js ngày
nay.
+ connect - Connect là một mở rộng của HTTP server framework cho
Node.js, cung cấp một bộ sưu tập của hiệu suất cao "plugins" được biết đến
như là trung gian; phục vụ như một nền tảng cơ sở cho Express
+ socket.io and sockjs - Hai thành phần Server-side websockets
components nổi tiếng nhất hiện nay.
+ Jade - Một trong những engines mẫu, lấy cảm hứng từ HAML, một
phần mặc định trong Express.js.
+ mongo and mongojs - MongoDB hàm bao để cung cấp các API cho cơ
sở dữ liệu đối tượng trong MongoDB Node.js



24

+ redis - thư viện Redis client.
+ coffee-script - CoffeeScript trình biên dịch cho phép developers viết
các chương trình Node.js của họ dùng Coffee.
+ underscore (lodash, lazy) - Thư viện tiện ích phổ biến nhất trong
JavaScript, package được sử dụng với Node.js, cũng như hai đối tác của mình,
hứa hẹn hiệu suất tốt hơn bằng cách lấy một cách tiếp cận thực hiện hơi khác
nhau.
+ forever - Có lẽ là tiện ích phổ biến nhất để đảm bảo rằng một kịch bản
nút cho chạy liên tục. Giữ quá trình Node.js của bạn lên trong sản xuất đối
mặt với bất kỳ thất bại không ngờ tới.
Tại sao lại sử dụng Node.js?
Đầu tiên là ưu điểm về tốc độ thực thi và khả năng mở rộng. Node.js có
tốc độ rất nhanh. Đó là một yêu cầu khá quan trọng khi bạn là một startup
đang cố gắng tạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộng
nhanh chóng, đáp ứng được một lượng lớn người dùng khi trang web của bạn
phát triển lên.
Node.js có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP sẽ quá
tải. Bên cạnh các lợi ích về tốc độ thực thi và khả năng mở rộng .
Nhược điểm
Giống như hầu hết các công nghệ mới, việc triển khai Node.js trên host
không phải là điều dễ dàng.
Một nhược điểm lớn khác của Node.js đó là nó vẫn đang trong giai
đoạn phát triển ban đầu, điều này có nghĩa là một số đặc trưng sẽ thay đổi
trong quá trình phát triển tiếp theo. Trong thực tế, nó bao gồm một chỉ số ổn
định (stability index), chỉ số này cho thấy mức độ rủi ro khi bạn sử dụng các
đặc trưng hiện có.



25

Hình 1.5: Rủi ro của nền tảng Nodejs
1.5. Linh kiện điện tử Ardunio
1.5.1. Ardunio là gì
Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng
tương tác với nhau hoặc với môi trường được thuận lợi hơn. Phần cứng bao
gồm một board mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVR
Atmel 8bit, hoặc ARM Atmel 32-bit. Những Model hiện tại được trang bị
gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số
tương thích với nhiều board mở rộng khác nhau.
Đượ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


×