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

BC giao thuc MQTT trong IOT

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.11 MB, 28 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA: KỸ THUẬT ĐIỆN TỬ I

----------

BÁO CÁO NGHIÊN CỨU KHOA HỌC
Đề tài: “Giao thức truyền tải MQTT trong IOT”

Giảng viên hướng dẫn: TS. Nguyễn Quốc Uy
Sinh viên thực hiện: Nguyễn Huy Thông
Lớp : D14DT01

Hà Nội, năm 2017

Nguyễn Huy Thông – D14DT01

1


LỜI CẢM ƠN
Kể từ ngày bước chân vào giảng đường đại học, em đã nhận được sự giúp đỡ vô
cùng to lớn từ quý thầy cô, gia đình và bạn bè.
Từ đáy lòng mình, em xin gửi lời cảm ơn chân thành nhất tới quý thầy cô đang
công tác tại khoa Kỹ Thuật Điện Tử 1 – Học viện Công nghệ Bưu chính Viễn thông đã
hết lòng dìu dắt, chỉ bảo để truyền đạt kiến thức cho em cũng như các bạn sinh viên
khác.
Mặc dù đã hoàn thiện sản phẩm cũng như báo cáo, tuy nhiên, do hạn chế về thời
gian cũng như kiến thức của bản thân nên sản phẩm chưa thực sự tối ưu. Em rất mong
nhận được sự đóng góp từ quý thầy cô để có thêm kinh nghiệm trong việc nghiên cứu
và phát triển sản phẩm trong tương lai.
Em xin chân thành cảm ơn.


Hà Nôi, ngày 23 tháng 11 năm 2017
Sinh viên thực hiện

Nguyễn Huy Thông

Nguyễn Huy Thông – D14DT01

2


MỤC LỤC

Nguyễn Huy Thông – D14DT01

3


DANH MỤC HÌNH ẢNH

Nguyễn Huy Thông – D14DT01

4


DANH MỤC BẢNG BIỂU

Nguyễn Huy Thông – D14DT01

5



DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Từ viết tắt

Viết đầy đủ

IoT

Internet of Things

MQTT

Message Queuing Telemetry
Transport

RasPi3

Raspberry Pi 3

TCP

Transmission Control Protocol

Nguyễn Huy Thông – D14DT01

Giải nghĩa

6

Giao thức điều khiển truyền vận



LỜI MỞ ĐẦU
Trong khoảng 2 năm trở lại đây, chắc hẳn nhiều người đã không
ít lần nghe thoáng qua về khái niệm Internet of Things, hay bắt gặp
tin tức về các sản phẩm được quảng cáo là phục vụ cho nhu cầu
“smart home” (nhà thông minh). Trong đó, những thiết bị gia dụng
như lò nướng hay tủ lạnh có thể "nói chuyện" được với nhau. Trong
bối cảnh mà hàng ngày càng nhiều chủng loại thiết bị được kết nối
với nhau qua một mạng, sẽ là không thừa khi chúng ta trang bị cho
mình các kiến thức căn bản về hệ sinh thái Internet of Things này.
Một bối cảnh giả định điển hình sẽ diễn ra như sau: Khi chúng ta
bước gần về đến cửa nhà, cơ chế điều khiển tự động tích hợp trong
chìa khóa (hay thậm chí là điện thoại, thẻ tín dụng, smartwatch) của
chúng ta sẽ tự động mở cửa từ xa. Khóa cửa sẽ gửi tín hiệu không
dây đến hệ thống mạng nội bộ trong nhà, trước hết là khiến đèn cửa
và hàng lang được kích hoạt. Hệ thống điều hòa, vốn đã chuyển sang
trạng thái chờ khi chúng ta rời đi, sẽ tiếp tục hoạt động trở lại. Theo
một số cài đặt sẵn, thậm chí máy pha cà phê sẽ có thể tự động được
kích hoạt để chuẩn bị sẵn 1 tách cà phê thơm phức ngay khi ta bước
chân vào phòng khách. Mọi thiết bị trong một smart house sẽ giao
tiếp và hoạt động một cách hài hòa, từ đó đưa chúng ta đến một
định nghĩa đơn giản nhất cho IoT: “Một hệ sinh thái IoT thực sự là
một thế giới trong đó mọi thiết bị đều có thể phối hợp được với
nhau”.
Vậy cái gì đã làm nên giao thức giao tiếp đó, nguyên lý hoạt động các giao thức
mà IOT sử dụng là gì? Với mong muốn bước đầu tiếp cận với thế giới IoT,
em quyết định thực hiện đề tài: “Giao thức truyền tải MQTT trong IOT”.
Nội dung của đề tài bao gồm 3 chương:
• Chương 1: Tổng quan về Internet of things.

• Chương 2: Giao thức MQTT.
• Chương 3: Ứng dụng của MQTT trong IOT

Nguyễn Huy Thông – D14DT01

7


CHƯƠNG 1: TỔNG QUAN VỀ INTERNET OF THINGS
1.1. Sự phát triển của IoT
Trong thời gian gần đây, cộng đồng những người nghiên cứu, đam mê tìm hiểu
về công nghệ thường hay nhắc tới IoT. Tuy nhiên, chưa nhiều người thực sự hiểu về
khái niệm này.
Thực chất, biểu hiện của Internet of Things (IoT) đã xuất hiện ngay từ thời kỳ sơ
khai của Internet, khi các nhà phát minh mong muốn kết nối tất cả mọi thứ qua một
mạng lưới đồng nhất để có thể điều khiển chúng phục vụ cho mục đích của con người.
Theo định nghĩa từ Wikipedia, Internet of Things (IoT) là một kịch bản của thế
giới, khi mà mỗi đồ vật, mỗi đồ vật, con người được cung cấp một định danh của riêng
mình, và tất cả có khả năng truyền tải, trao đổi thông tin, dữ liệu qua một mạng duy
nhất mà không cần đến sự tương tác trực tiếp giữa người với người, hay người với
máy tính. IoT đã phát triển từ sự hội tụ của công nghệ không dây, công nghệ vi cơ điện
tử và Internet.
Gần đây, Internet of Things còn bao gồm cả những giao tiếp theo kiểu máy với
máy (M2M), hạn chế sự tác động của con người nhưng chủ yếu được áp dụng trong
sản xuất năng lượng hay các ngành công nghiệp nặng.
Viễn cảnh tưởng chừng chỉ có trên phim ảnh này đã dần hiển hiện trên thực tế,
với sự phát triển của Nhà thông minh, TV thông minh, tủ lạnh thông minh,…. và cũng
không thể không kể tới sự mở rộng không gian địa chỉ lên IPv6 thay vì IPv4 như trước
đây.


Hình 1.1: Tổng quan về IoT
Nhiều chuyên gia công nghệ cũng như các kỹ sư đều dự đoán tương lai của IoT
sẽ rất phát triển từ nay cho tới năm 2020 với một kịch bản vô cùng khả thi:
Nguyễn Huy Thông – D14DT01

8








4 tỷ người kết nối với nhau.
4 ngàn tỷ USD doanh thu.
Hơn 25 triệu ứng dụng.
Hơn 25 tỷ hệ thống nhúng và hệ thống thông minh.
50 ngàn tỷ Gigabytes dữ liệu.

Hình 1.2: Tương lai IoT từ nay đến 2020

Nguyễn Huy Thông – D14DT01

9


1.2. Phương thức kết nối thiết bị không dây
Với việc IoT trở nên phổ biến, làm sao mà có thể không tính đến khía cạnh an
ninh như là một phần của cuộc cách mạng IoT toàn bộ. Trong bối cảnh này, kiến thức

về IoT và các công nghệ truyền thông / các giao thức khác kết hợp với nó trở nên quan
trọng. Mark Walters, Phó Giám đốc Phát triển Chiến lược của ZigBee Alliance cho
biết: “Các nhà lắp đặt bảo mật phải có một sự hiểu biết vững chắc về mạng, bảo mật
mạng và dữ liệu, và mối quan ngại về sự riêng tư. Ai nhận được thông tin gì, họ đang
làm gì, và ai sở hữu và kiểm soát nó là những yếu tố rất quan trọng cần phải được tìm
hiểu”.Ngay bây giờ, có một loạt các lựa chọn kết nối với các hệ khung IoT (IoT
Framework), mỗi một lựa chọn này đều quy định cụ thể một phạm vi truyền tải, tốc độ
dữ liệu, mức tiêu thụ năng lượng và mức độ bảo mật. Một số trong số chúng được liệt
kê như sau.
1.2.1. Bluetooth
Bluetooth là lý tưởng cho việc truyền dữ liệu tầm ngắn giữa các thiết bị hỗ trợ
Bluetooth như điện thoại thông minh và máy tính xách tay. Nó hoạt động trong băng
tần 2.4GHz của phổ radio. Phạm vi từ 1 đến 100 mét. Tốc độ dữ liệu điển hình là 1
Mbps và tốc độ này có thể khác nhau tùy thuộc vào phiên bản Bluetooth được sử dụng.
Với chuẩn Bluetooth năng lượng thấp (BLE), điện năng tiêu thụ giảm đáng kể. Ngày
càng có nhiều khách sạn và nhà ở sử dụng ổ khóa thông minh (smart lock) để đóng/mở
cửa khi đọc được tín hiệu từ điện thoại thông minh có hỗ trợ BLE của người dùng.
1.2.2. ZigBee và Z-Wave
Cả ZigBee và Z-Wave đều lý tưởng cho việc truyền dữ liệu với tốc độ thấp, và
khả năng kết nối kiểu mạng lưới (mesh network) của chúng có thể mở rộng khoảng
cách truyền nếu cần thiết. Cả hai giao thức đều lý tưởng cho các mạng sử dụng trong
gia đình, đang ngày càng trở nên phổ biến ở Hoa Kỳ.
ZigBee hoạt động ở dải 2.4GHz. Liên minh ZigBee (Zigbee Alliance) đã phát
triển các công nghệ khác nhau, ví dụ như ZigBee PRO, ZigBee RF4CE và ZigBee IP
và gần đây đã kết hợp tất cả hồ sơ ứng dụng vào một giải pháp gọi là ZigBee 3.0. ZWave sử dụng phần tần số 900MHz. Các thiết bị bao gồm: cảm biến chuyển động, cảm
biến cửa / cửa sổ và khóa cửa.
1.2.3. RFID
RFID hoạt động trong dải tần số 120kHz đến 2.45GHz, có tầm hoạt động từ 0.5
đến 100 mét, và truyền dữ liệu từ 4 đến 424 kbps, tùy thuộc vào loại RFID được sử
dụng. Các ứng dụng công nghệ này đa dạng và tùy biến. “RFID đã được sử dụng rộng

rãi trong lĩnh vực nhận dạng tầm ngắn (công nghệ LF), ví dụ như trong điều khiển truy
cập, cho đến các ứng dụng UHF tầm xa (vài mét) mới nhất có khả năng xác định được

Nguyễn Huy Thông – D14DT01

10


nhiều tập hợp của hàng ngàn vật thể trong vài giây”. Andrea Azzoni, Quản lý Tiếp thị
của Fluidmesh Networks .
1.2.4. Wifi
Wi-Fi đã trở thành một công nghệ truyền dẫn không dây thống trị thị trường.
Tiêu chuẩn phổ biến nhất được sử dụng trong nhà ở và doanh nghiệp hiện nay là
802.11n, hoạt động trong dải tần 2.4GHz và 5GHz của phổ radio. Tầm truyền dữ liệu
khoảng 50 mét, và tốc độ dữ liệu thường là 150 đến 200 Mbps. Mặc dù các tính năng
này làm cho Wi-Fi thích hợp để chuyển các tập tin lớn nhưng chúng cũng tạo ra các sự
cố khác, ví dụ nhiễu và tiêu thụ điện năng lớn.
1.2.5. MQTT
MQTT (Message Queuing Telemetry Transport) là một giao thức gởi dạng
publish/subscribe sử dụng cho các thiết bị Internet of Things với băng thông thấp, độ
tin cậy cao và khả năng được sử dụng trong mạng lưới không ổn định.
Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao
nên nó là một giao thức lý tưởng cho các ứng dụng M2M
1.3. Đặt vấn đề
Hiện nay có rất nhiều giao thức giao tiếp giữa các thiết bị IoT được đưa ra như:
HTTP, Universal Plug and Play (UPnP), CoAP, XMPP, MQTT.
Đặc biệt đó trong đó là MQTT được sử dụng rất rộng rãi. Nhiều công nghệ lớn
được sử dụng như: Facebook cho ứng dụng Facebook Messenger, IBM, Intel,
Amazon…
Cụ thể với đề tài nghiên cứu khoa học , em sẽ đi sâu vào nghiên cứu với đề tài:

“Giao Thức truyền tải MQTT trong IOT”. Với mục đích tìm hiểu và sử dụng nó để
nghiên cứu phát triển các mô hình IOT một cách dễ dàng hơn.

Nguyễn Huy Thông – D14DT01

11


CHƯƠNG 2: GIAO THỨC MQTT
2.1. Tổng Quát
Ở chương này, em sẽ trình bày về giao thức MQTT, một giao thức được nhiều kỹ
sư khuyên dùng trong lĩnh vực IoT, đặc biệt trong việc điều khiển thiết bị và giám sát
trạng thái cảm biến..
Giao thức MQTT hoạt động theo cơ chế publish/subscribe, khác với cơ chế
request/response của một số giao thức như HTTP, CoAP,… Cơ chế publish/subscribe
hoạt động dựa trên 3 yếu tố:
• Publisher: kết nối tới broker và gửi gói tin
• Subscriber: kết nối tới một broker tương tự, nhận bản tin mà thiết bị theo dõi.
• Message Broker: bộ điều khiển trung tâm, luân chuyển bản tin giữa các thiết bị
trong hệ thống.
Nội dung của bản tin được nhận biết bằng Topic do Publisher quy định. Khi tiến
hành gửi bản tin, Publisher có quyền lựa chọn nội dung của bản tin có được giữ lại bởi
server hay không. Nếu được giữ lại, mỗi Subscriber sẽ nhận được bản tin mới nhất khi
theo dõi Topic của bản tin. Bên cạnh đó, các Topic được sắp xếp theo cấu trúc cây.
Dấu “/” được sử dụng để chia các Topic lớn thành các Topic nhỏ. Khi theo dõi bản tin,
Subscriber có thể theo dõi toàn bộ Topic lớn để nhận được bản tin từ những Topic nhỏ,
hoặc chỉ theo dõi một vài Topic nhỏ để nhận những bản tin cần thiết.
Ví dụ: trong một ngôi nhà có nhiều tầng và mỗi tầng có nhiều thiết bị thì ta có
các topic như sau:
• Home/Floor1

o Home/Floor1/Device1
o Home/Floor1/Device2
o …
o Home/Floor1/Device(m)
• Home/Floor2
o Home/Floor2/Device1
o Home/Floor2/Device2
o …
o Home/Floor2/Device(m)
• …
• Home/Floor(n)
o Home/Floor(n)/Device1
o Home/Floor(n)/Device2
o …
o Home/Floor(n)/Device(n)

Nguyễn Huy Thông – D14DT01

12


Hình 2. 1 Tổng quát về giao thức MQTT
2.2. Kiến trúc giao thức MQTT

Bảng 2. 1 Kiến trúc giao thức MQTT
Giao thức MQTT nằm ở lớp ứng dụng trong mô hình TCP/IP.
Lớp ứng dụng của mô hình TCP/IP kiểm soát các giao thức lớp cao, các chủ đề
về trình bày, biểu diễn thông tin, mã hóa và điều khiển hội thoại. Bộ giao thức TCP/IP
Nguyễn Huy Thông – D14DT01


13


tổ hợp tất cả các ứng dụng liên quan đến các chủ đề vào trong một lớp và đảm bảo số
liệu này được đóng gói thích hợp trước khi chuyển nó đến lớp kế tiếp. TCP/IP không
chỉ chứa các đặc tả về lớp Internet và lớp vận chuyển, như IP và TCP, mà còn đặc tả
cho các ứng dụng phổ biến
2.3. Quản lý chất lượng dịch vụ
Có 3 mức độ quản lý chất lượng dịch vụ (Quality of Service – QoS: khả năng
giúp cho việc truyền dữ liệu với thời gian trễ tối thiểu và cung cấp băng thông cho
những ứng dụng truyền thông đa phương tiện thời gian thực) trong giao thức MQTT.
2.3.1. Unacknowledged service (QoS 0)
Mức thấp nhất, bản tin được truyền ít nhất một lần tới Subscriber. Bản tin sẽ
truyền 1 lần tới subscriber. Trong trường hợp không nhận được sẽ bị thất thoát thông
tin.

Hình 2. 2 Mô hình QoS 0
Ưu điểm tốn ít dữ liệu, do có nhược điểm nên thích hợp để gửi các dữ liệu từ
cảm biến có tính liên tục, thất thoát dữ liệu không quá ảnh hưởng đến hệ thống
2.3.2. Acknowledged service (QoS 1)
Mức thứ 2, mỗi thiết bị nhận sẽ xác nhận thông tin của bản tin được nhận. Nếu
không có sự xác thực bản tin nào diễn ra, thông tin sẽ được gửi lại một lần nữa. Điều
này sẽ đảm bảo gói tin được chuyển đi ít nhất một lần.

Nguyễn Huy Thông – D14DT01

14


Hình 2. 3 Mô hình QOS 1

Việc nhận được message bên phía server được xác nhận bởi một message
PUBACK. Nếu có lỗi do kết nối hoặc gửi đến device, hoặc message xác nhận không
nhận được sau một khoảng thời gian nhất định, sender sẽ gửi lại message và set DUP
bit trong phần header của message header. Message đến server ít nhất 1 lần. Cả
message SUBSCRIBE và message UNSUBSCRIBE đều sử dụng QoS 1. Khi nhận
được một message lặp lại từ phía client, server sẽ publish các message đến các
subscribers, và gửi một message PUBACK khác.
Ở mức này thông tin được truyền đi có sự đảm bảo, nhưng nhược điểm là tốn
dữ liệu hơn mức thứ nhất. thích hợp các dữ liệu có tần suất truyền tải ít.

2.3.3. Assured service (QoS 2)
Mức cao nhất ,tại đây gói tin không chỉ được xác nhận, mà còn được gửi đi theo
2 bước. Bước đầu tiên là truyền, nhận dữ liệu; bước tiếp theo là xác nhận gói tin. Điều
này giúp đảm bảo rằng quá tin được gửi chính xác một lần tới Subscriber.

Hình 2. 4 Mô hình QoS 2

Nguyễn Huy Thông – D14DT01

15


Một luồng được thêm vào luồng QoS 1 ở trên để đảm bảo rằng message bị lặp
lại không bị chuyển đến ứng dụng. Đây là mức độ cao nhất khi khi phân phối message,
không message lặp nào được chấp nhận. Nhờ đó mà lưu lượng mạng sẽ tăng lên. Nếu
phát hiện lỗi, hoặc sau một khoảng thời gian nhất định, luồng protocol sẽ được thực
hiện lại từ kết quả của message xác nhận cuối cùng; hoặc là PUBLISH , hoặc là
PUBREL. Luồng protocol đảm bảo rằng message đến các subscriber chỉ đúng 1 lần.
Do có nhiều lần truyền và yêu cầu xác thực từ cả hai phía nên cách này tốn rất
nhiều dữ liệu và thời gian. Nên sử dụng cho các thông tin có tính yêu cầu, ra lệnh và

không có tính lặp lại.
Ở đây, nếu server nhận được message, các bên quan tâm nghĩa là các subscriber
đến topic của message PUBLISH đó. Nếu một subscriber nhận một message, thì các
bên quan tâm ám chỉ đến các ứng dụng bên phía client mà đã subcribe một hoặc nhiều
topics và đang đợi một message đến từ server.
Nếu một server mà không xác nhận được một PUBLISH từ một client, thì nó
không có cách nào để thông bao đến client đó. Vì thế nó phải đảm bảo một mức hiểu
biết nhất định, tùy thuộc vào các rule QoS, client sẽ không được báo rằng việc xác
thực message PUBLISH nó gửi đi.
2.4. Mô tả gói tin
2.4.1. Connect
Sau khi Client kết nối với Server, gói tin đầu tiên được gửi đi từ Client tới Server
phải là gói tin Connect. Một Client chỉ có thế gửi gói tin Connect một lần trong mạng
đã được khởi tạo.

Bảng 2. 2 Connect Packet Fixed Header

Nguyễn Huy Thông – D14DT01

16


Bảng 2. 3 Protocol Name
Nếu tên giao thức không được gửi đúng, Server sẽ bỏ qua bản tin và xử lý bản tin
tiếp theo.

Bảng 2. 4 Cờ trạng thái
Các bit cờ trạng thái cho phép bên Server nhận dạng gói tin, yêu cầu của gói tin
là như thế nào. Ví dụ, nếu Username Flag được set lên 1, thì gói tin phải chứa thông
tin của người dùng, ngược lại nếu Username Flag bằng 0, gói tin sẽ không chứa thông

tin của người dùng.
Nội dung của gói tin:
• Nhận dạng Client: mỗi Client kết nối tới Server có một ID riêng biệt. ID phải
được sử dụng bởi Client và Server để nhận dạng trạng thái của quá trình kết nối
giữa Client và Server trong một phiên “giao dịch”. ClientID phải xuất hiện
trong gói tin CONNECT khi gửi từ Client tới Server. ClientID là một chuỗi
UTF-8 đã được mã hóa. Server xử lý được ClientID có độ dài 1-23 bytes.
ClientID chỉ được phép chứa các ký tự nhìn thấy được trong bảng mã ASCII.
• Will Topic và Will Message là thành phần tiếp theo trong nội dung của gói tin
Connect nếu cờ Will được set bằng 1.
• User Name: User name có thể được Server sử dụng trong quá trình đồng bộ dữ
liệu và cho phép Client kết nối tới Server.
• Password: được sử dụng để phục vụ trong quá trình đồng bộ bản tin. Password
trong gói tin Connect của giao thức MQTT có dạng như sau

Nguyễn Huy Thông – D14DT01

17


Bảng 2. 5 Password

password có độ dài từ 0-65535 bytes, trong đó, 2 byte đầu cho phép nhận biết
độ dài của password được gửi tới.
Phản hồi:
• Nếu Server không nhận được gói tin Connect trong một khoảng thời gian nhất
định, Server sẽ ngắt kết nối tới Client.
• Server phải chứng thực gói tin Connect sau khi nhận được.
• Server sẽ kiểm tra gói tin Connect có thỏa mãn điều kiện kết nối không, sau đó
trả lại tín hiệt ACK/NACK để Client biết liệu có thể kết nối tới Server hay

không.

2.4.2. PUBLISH
Gói tin điều khiển Publish được gửi từ Client tới Server hoặc từ Server tới Client
để gửi bản tin.
Header của gói tin Publish có dạng như sau:

Bảng 2. 6 Header của gói tin Publish
Xử lý gói tin Publish: Client sử dụng gói tin Publish để gửi bản tin tới Server.
Server cũng sử dụng gói tin Publish để gửi tin nhắn tới Client mà đang theo dõi Topic
chứa tin nhắn. Khi Client thực hiện đăng ký với bộ lọc Topic bao gồm các kí hiệu, nó
có thể cho 826 ID của Client chồng lên nhau để tin nhắn được công bố có thể phù hợp
với nhiều bộ lọc.
Phản hồi trạng thái sau khi nhận được gói tin Publish.

Nguyễn Huy Thông – D14DT01

18


Bảng 2. 7 Phản hồi trạng thái của gói tin Publish tương ứng với từng trạng thái
QoS
2.4.3. SUBSCRIBE
Gói tin Subscribe được gửi từ Client tới Server để tạo một hoặc nhiều
Subscription. Mỗi Subscription đại diện cho một Topic mà Client muốn nhận tin nhắn.
Server sẽ gửi lại gói tin Publish để Client có thể nhận được tin nhắn đã được gửi tới
Subscription của Client.
Header của gói tin Subscribe có dạng như sau:

Bảng 2. 8 Header của gói tin Subscribe

Nội dung của gói tin Subscribe bao gồm kết quả từ bộ lọc Topic, để chỉ ra Topic
mà Client đang theo dõi để nhận bản tin. Kết quả của bộ lọc Topic trả về là một chuỗi
được mã hóa theo định dạng UTF-8.
Định dạng gói tin Subscribe có dạng như sau:

Bảng 2. 9 Định dạng gói tin Subscribe

Nguyễn Huy Thông – D14DT01

19


Phản hồi trạng thái: Khi Server nhận được gói tin Subcribe từ Client, Server sẽ
trả về gói tin phản hồi. Gói tin phản hồi cũng có phần nhận dạng gói tin như gói tin
Subscribe. Server được cho phép gửi gói tin Publish mà trùng với Subscription trước
khi Server gửi gói tin phản hồi.
Message SUBSCRIBE cho phép client subscribe một hoặc nhiều topics với
server. Message được published lên server sẽ được chuyển đến client bằng message
PUBLISH . Message SUBSCRIBE cũng chỉ ra QoS level mà subscriber muốn nhận
message. Khi nhận được một message SUBSCRIBE message, server trả lời bằng
message SUBACK.
Một server bắt đầu gửi một message PUBLISH cho yêu cầu của về subscription
của client thậm chí trước khi client nhận được message SUBACK. Nếu một server
không xác nhận một yêu cầu SUBSCRIBE từ client, thì nó không có cách nào thông
tin cho client. Vì thế nó tạo ra message SUBACK như là để xác nhận, và client sẽ
không được thông báo rằng nó không được xác thực. Một server có quyền chỉ định
một level of QoS thấp hơn client yêu cầu. Điều này có thể xảy ra nếu server không thể
cung cấp các levels of QoS cao hơn. Ví dụ, nếu server không cung cấp một cơ chế lưu
trữ tin cậy nào đó nó có thể chỉ cấp cho các subscriptions với QoS là 0.
• PINGREQ - PING request

Message PINGREQ có nghĩa là message "Kết nối vẫn tốt đúng không?" được gửi
từ một client đã kết nối đến server.
• PINGRESP - PING response
Một message PINGRESP được gửi từ server cho một message PINGREQ và nó
có nghĩa là "OK".
• DISCONNECT - Disconnect notification
Message DISCONNECT được gửi từ client đến server để báo rằng nó sẽ đóng
kết nối TCP/IP đang kết nối. Cái này cho phép một clean disconnection, chứ không chỉ
là hủy kết nối. Một server không nên để việc đóng kết nối này cho phía client sau khi
nhận message DISCONNECT.

2.5. Ưu và nhược điểm của giao thức MQTT
MQTT là một giao thức truyền thông để truyền các thông điệp giữa nhiều khách
hàng thông qua broker trung tâm. Nó tách riêng người sản suất và người tiêu thụ bằng
cách cho phép các client gửi bản tin đi và có các broker quyết định đường đi và sao
chép bản tin. MQTT có một số hỗ trợ để duy trì bản tin, nhưng nó làm tốt nhất nhiệm
vụ là bus truyền dữ liệu trực tiếp.

Nguyễn Huy Thông – D14DT01

20


Giao thức MQTT thì nhẹ nhàng và nhanh hơn. Nó mất rất ít bytes cho việc kết
nối với server và kết nối có thể giữ trạng thái mở xuyên suốt.
MQTT hoạt động tốt trong môi trường băng thông thấp, độ trễ cao, sử dụng ít
năng lượng.
Các định dạng thông điệp của giao thức MQTT phong phú, sử dụng cho được
nhiều mục đích miễn là phía client biết được định dạng bản tin để giao tiếp.
MQTT trong giai đoạn gần đây đang nổi lên như là một giao thức được sử dụng

phổ biến đóng một vai trò quan trọng dùng cho giao tiếp IoT, rất nhiều hãng công nghệ
lớn đã sử dụng, áp dụng và hỗ trợ giao thức MQTT cho các ứng dụng của mình như:
Facebook, IBM, Intel, Amazon, WSO2, Microsoft,…
Tuy nhiên, hạn chế ở đây là chưa có một quy chuẩn nào cho việc đặt tên cho các
Topic dẫn tới việc các dự án khi được triển khai trong thực tế, gây khó khăn cho người
tham gia phát triển sau. Bên cạnh đó, MQTT cũng chỉ phù hợp cho việc gửi và nhận
những bản tin có kích thước không lớn.

CHƯƠNG 3: ỨNG DỤNG CỦA MQTT TRONG IOT
3.1. Raspberry Pi với MQTT
3.1.1. Raspberry Pi

Nguyễn Huy Thông – D14DT01

21


Hình 3. 1 Raspberry Pi 3
RasPi3 là một máy vi tính rất nhỏ gọn, kích thước hai cạnh chỉ cỡ một cái thẻ
ATM. Người ta đã tích hợp mọi thứ cần thiết trong đó để bạn sử dụng như một cái máy
vi tính. Trên bo mạch của Pi có CPU, GPU, RAM, khe cắm thẻ microSD, Wi-Fi,
Bluetooth và 4 cổng USB 2.0. Khi mua Pi về, bạn chỉ việc cài hệ điều hành (thực ra là
copy/paste cái thư mục vô thẻ nhớ), gắn chuột, bàn phím và màn hình là bắt đầu sử
dụng được rồi (hoặc cao cấp hơn xíu là remote desktop từ một máy khác qua, hoặc
SSH).
RasPi3làm các thứ như:
• Đầu coi phim HD giống như Android Box, hỗ trợ KODI đầy đủ.
• Máy chơi game cầm tay, console, game thùng. Chơi như máy điện tử băng
ngày xưa, giả lập được nhiều hệ máy.
• Cắm máy tải Torrent 24/24.

• Dùng làm VPN cá nhân.
• Biến ổ cứng bình thường thành ổ cứng mạng (NAS).
• Làm camera an ninh, quan sát từ xa.
• Hiển thị thời tiết, hiển thị thông tin mạng nội bộ...
• Máy nghe nhạc, máy đọc sách.
Nguyễn Huy Thông – D14DT01

22


• Làm thành một cái máy Terminal di động có màn hình, bàn phím, pin dự
phòng để sử dụng mọi lúc mọi nơi, dò pass Wi-Fi...
• Làm thiết bị điều khiển Smart Home, điều khiển mọi thiết bị điện tử trong
nhà.
• Điều khiển robot, máy in không dây từ xa, Airplay...
Với sức mạnh phần cứng của mình, RasPi3 có khả năng thực hiện những công
việc phức tạp liên quan tơi đồ họa, hình ảnh. Trong lĩnh vực IoT, với 2 module kết nối
không dây (wifi, bluetooth 4.0), cùng với cáp mạng RJ45 hỗ trợ đường truyền tốc độ
cao, RasPi3 là giải pháp tối ưu cho việc phát triển một gateway, một trạm trung chuyển
bản tin trong một mạng. Ở đồ án của mình, RasPi3 được sử dụng như một gateway để
trao đổi gói tin giữa các thiết bị.
3.1.2. Sử dụng MQTT điều khiển Raspberry Pi qua mobie
RasPi3 vừa là MQTT server vừa là MQTT client 1 và sẽ Subscribe topic do ta
qui định. Ở đây thì ta sẽ cho topic là ptit/demo/led.
Code cho RasPi3:
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO
on = 0
off = 1
led = [2,3,4]

GPIO.setmode(GPIO.BCM)
GPIO.setup(led, GPIO.OUT)
GPIO.output(led, off)
def on_connect(client, userdata, flags, rc):
client.subscribe("home/led1")
client.subscribe("home/led2")
client.subscribe("home/led3")

def on_message(client, userdata, msg):
if msg.topic == "home/led1":

Nguyễn Huy Thông – D14DT01

23


if msg.payload == "on" or msg.payload == "ON" or msg.payload == "1":
GPIO.output(led[0], on)
print "Led 1 : ON"
if msg.payload == "off" or msg.payload == "OFF" or msg.payload == "0":
GPIO.output(led[0], off)
print "Led 1 : OFF"
if msg.topic == "home/led2":
if msg.payload == "on" or msg.payload == "ON" or msg.payload == "1":
GPIO.output(led[1], on)
print "Led 2 : ON"
if msg.payload == "off" or msg.payload == "OFF" or msg.payload == "0":
GPIO.output(led[1], off)
print "Led 2 : OFF"
if msg.topic == "home/led3":

if msg.payload == "on" or msg.payload == "ON" or msg.payload == "1":
GPIO.output(led[2], on)
print "Led 3 : ON"
if msg.payload == "off" or msg.payload == "OFF" or msg.payload == "0":
GPIO.output(led[2], off)
print "Led 3 : OFF"

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
try:
client.loop_forever()
Nguyễn Huy Thông – D14DT01

24


except KeyboardInterrupt:
client.loop_stop()
Chương trình trên mobie:
mobile là MQTT client 2 và sẽ Publish topic được định nghĩa ở trên.
Ta sử dụng app có sẵn là: MQTT dashboard

Hình 3. 2 MQTT dashboard

Nguyễn Huy Thông – D14DT01

25



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×