HC VIN CÔNG NGH BƯU CHÍNH VIN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
------- -------
O CÁO BÀI TP LỚN
IoT và ng dng
:
H thng cm biến đo
nhit đ và đ m
M c l c
I. Mô t h thng ...................................................................................................................................................... 3
1. Mc đích. ..........................................................................................................................................................
2. Các thiết b s dng trong h thng. ................................................................................................................. 3
3. Các kiến thc cơ bn. ....................................................................................................................................... 4
3.1 ESP8266 NodeMCU 9.0. ......................................................................................................................... 4
3.2 Giao thc MQTT. .................................................................................................................................... 6
3.3 Websocket. ............................................................................................................................................... 8
II. Thiết kế h thng. ................................................................................................................................................ 12
1. Tng quan h thng. ....................................................................................................................................... 12
1.1 Sơ đ hot đng. .................................................................................................................................... 12
1.2 Mô t sơ đ. ........................................................................................................................................... 12
2. Database. ........................................................................................................................................................ 1
2.1 Code to bng. ....................................................................................................................................... 13
3. Backend (ExpressJS). ..................................................................................................................................... 14
3.1 Sơ đ hot đng ca server. ................................................................................................................... 14
3.2 Mô t hot đng. .................................................................................................................................... 14
3.3 Code chi tiết và gii thích. ..................................................................................................................... 15
4. Client. ............................................................................................................................................................. 2
4.1 Kết ni với websocket. .......................................................................................................................... 26
4.2 Kết ni với database thông qua api. ....................................................................................................... 26
5. Arduino ........................................................................................................................................................... 2
5.1 Code chi tiết và gii thích ...................................................................................................................... 28
5.2 Phn chưa làm được ............................................................................................................................... 34
III. Giao din ........................................................................................................................................................ 3
1. Dashboard ....................................................................................................................................................... 3
2. Sensor Log ...................................................................................................................................................... 35
I. t h thng
1. Mục đích.
H ng s dng cm biến đ thông báo nhit đ và đ m cho người dùng thông qua trang web có th truy cp vth i
mng LAN. Trang web s cung cp nhit đ và đ m với dashboard hin th d nhìn, cho phép người dùng có th
xem thông tin nhit đ và đ m trc tiếp ời gian thth c.
2. Các thiết b s dng trong h thng.
Phn cng
1 kit ESP8226 NodeMCU 9.0
1 cm biến nhit đ và đ m DHT11
2 đèn led
1 bng mch
Và các loi dây dn đi kèm
Phn mm:
Arduino IDE
Mosquitto (Giao thc MQTT) và MQTT explorer
Framework ExpressJS (Backend)
Websocket Server
HTML/CSS/JS (Client)
3. Các kiến thc cơ bn.
3.1 . ESP8266 NodeMCU 9.0
Gii thiu chung.
ESP8266 là mt vi mch Wi-Fi giá r với kh năng x lý TCP/IP đy đ và kh năng vi điu khin, được sn xut bi
Espressif Systems. ESP8266 tích hợp phiên bn nâng cao ca b x lý 32-bit L106 Diamond ca Tensilica và SRAM
trên chip. Nó đã tr nên ph biến nh vào giá thành hợp lý và tính d s dng.
Phn cng.
Module Wi-Fi: Tích hợp Wi-Fi, h c hai băng tn 2.4 GHz và 5 GHz.tr
B x lý: B x lý Tensilica L106 32-bit RISC ch tc đ 80 MHz.y
B nh:
RAM: 80 KB
Flash: 4 MB
Chân GPIO: 17 chân GPIO với 11 chân đ giao tiếp với các thiết b ngoi vi khác nhau.
ADC: Mt chân ADC 10-bit cho đu vào analog.
Ngun đin: cng micro-USB 5V
Các kh năng khác.
Framework h tr:
Arduino
ESP8266 Non-OS SDK
ESP8266 RTOS SDK
Giao thc upload:
Espota
Esptool
Tài liu tham kho.
https://docs.platformio.org/en/latest/boards/espressif8266/nodemcu.html
https://nodemcu.readthedocs.io/en/latest/
https://projecthub.arduino.cc/PatelDarshil/getting-started-with-nodemcu-esp8266-on-arduino-ide-b193c3
3.2 Giao thc MQTT.
Giao thc MQTT (Message Queuing Telemetry Transport) là mt giao thc nhn tin nh, ph ến trong các ng bi
dng IoT (Internet of Things) do tính đơn gin và hiu qu ca nó trong vic truyn d u gia các thiết b. Trong li
báo cáo này, chúng ta s tìm hiu cách s dng MQTT trong mt h thng IoT da trên module ESP8266, mt vi điu
khin tích hợp WiFi, thường được s dng trong các d án IoT do tính năng kết ni mng và chi phí thp.
Tổng quan.
MQTT là giao thc nhn tin da trên mô hình publish/subscribe,
nơi các thiết b phát d u (publishers) gi thông đip đến mli t
hoc nhiu ch đ (topics), và các thiết b nhn (subscribers) đăng
ký các ch đ này đ nhn thông đip. Giao thc này được thiết
kế đ hot đng hiu qu trong các môi trường có băng thông hn
chế hoc kết ni không n đnh, với kh năng s dng rt ít tài
nguyên h thng.
Các thành phn chính ca MQTT.
Broker: Là máy ch trung gian qun lý các kết ni, truyn ti thông đip gia các publisher và subscriber.
Broker ph ến là Mosquitto.bi
Publisher: Thiết b hoc ng dng gi thông đip lên broker.
Subscriber: Thiết b hoc ng dng nhn thông đip t broker.
Cht lưng dch v (QoS).
MQTT h trba mc đ QoS đ đm bo thông đip đưc truyn ti mt cách chính xác:
QoS 0: "At most once" - Thông đip đưc gi mt ln mà không có đm bo vic nhn.
QoS 1: "At least once" - Thông đip được gi ít nht mt ln, có th b trùng lp.
QoS 2: "Exactly once" - Thông đip được gi đúng mt ln, không có kh năng b trùng lp.
ESP8266 và Vai trò trong H ng IoT.th
ESP8266 là mt module WiFi ph ến với kh năng kết ni mng d dàng và chi phí thp, lý tưng cho các d án bi
IoT. Với vi x lý 32-bit, nó cung cp sc mnh tính toán đ đ x lý các nhim v IoT đơn gin và có th lp trình
bng các ngôn ng như Arduino C++.
Trin khai MQTT vi ESP8266.
Yêu cu phn cng:
Module ESP8266 (ví d: NodeMCU)
Cm biến (ví d: cm biến nhit đ DHT11)
Ngun cp đin (USB hoc pin)
Yêu cu phn mm:
Arduino IDE
Thư vin PubSubClient đ h trMQTT
Thư vin ESP8266WiFi đ kết ni mng
Các bưc trin khai:
Bước 1: Cài đt Arduino IDE và thêm ESP8266 vào Board Manager
MArduino IDE, vào mc File -> Preferences và thêm đường dn
http://arduino.esp8266.com/stable/package_esp8266com_index.json vào Additional Board Manager URLs.
Vào Tools -> Board -> Board Manager và tìm kiếm ESP8266, sau đó cài đt.
Bước 2: Cài đt các thư vin cn thiết
Cài đt thư vin PubSubClient t Library Manager trong Arduino IDE.
Cài đt thư vin ESP8266WiFi đ kết ni WiFi.
Bước 3: Viết mã kết ni và gi d u qua MQTTli
Các đon mã kết ni s đưc áp dng trc tiếp trong d án
Bước 4: Upload mã và giám sát kết qu
Kết ni ESP8266 với máy tính, chn đúng board và port trong Arduino IDE, sau đó upload mã.
MSerial Monitor đ giám sát kết ni và d u được gi đi.li
Kế n.t lu
Giao thc MQTT cùng với module ESP8266 cung cp mt gii pháp mnh m và linh hot cho các ng dng IoT,
cho phép truyn d u gia các thiết b mt cách hiu qu và tin cy. Với s h ca cng đng và các thư vili tr n
mã ngun mở, vic trin khai h ng IoT với ESP8266 và MQTT trnên d dàng và tiết kim chi phí.th
Tài liu tham kho.
https://www.emqx.com/en/mqtt-guide
https://www.hivemq.com/mqtt/
https://www.comparitech.com/net-admin/what- -mqtt/is
3.3 Websocket.
Tổng quan.
WebSocket là mt giao thc truyn ti d liu hai chiu (full-duplex) trên web, cho phép truyn ti d liu trong thi
gian thc gia trình duyt web và máy ch. u này có nghĩa là mt kết ni duy trì gi máy khách và máy ch, cho Đi a
phép thông tin được gi đi và nhn li mt cách hiu qu và nhanh chóng mà không cn phi thiết lp kết ni mi
mi khi truyn ti thông tin.
Các s n chính trong WebSocket:ki
1. Mở kết ni (Open): Khi mt kết ni WebSocket được thiết lp gia trình duyt và máy ch.
2. Nhn d u (Message)li : Khi trình duyt hoc máy ch nhn được d liu mi.
3. Gi d u (Send)li : Khi trình duyt hoc máy ch gi d liu.
4. Đóng kết ni (Close): Khi kết ni WebSocket b đóng.
5. Li (Error): Nếu có li trong quá trình thiết lp hoc s dng kết ni WebSocket.
Công dng ca WebSocket:
ng dng web thi gian thc: WebSocket thường được s dng đ phát trin các ng dng web thời gian
thc như trò chơi trc tuyến, ng dng trò chuyn và các ng dng cp nht d liu trc tiếp.
Hiu sut cao: WebSocket có hiu sut cao hơn và tiết kim năng lưng hơn so với các gii pháp truyn ti
d u trc tiếp khác như Ajax hoc Comet.li
Trin khai vi ExpressJS
Bước 1: Cài đt thư vin
npm install express ws
Bước 2: To máy ch express và thiết lp Websocket
Thiết lp có trong phn Code chi tiết và gii thích backend
Bư Chớc 3: y máy ch
Bước 4: Kết ni tới máy ch websocket t Client
Thiết lp có trong phn Client
Tài liu tham kho.
Websocket là gì? Ưu và nhược đim ca websocket bn cn biết (stringee.com)
WebSocket là gì? Lý do s dng WebSocket (200lab.io)
Socket là gì? WebSocket là gì? Hiu hơn v Websocket | TopDev
ws - npm (npmjs.com) (Trin khai)
4. năng Yêu cu chc
Kết ni và qun lý cơ s d u MySQLli
Thiết lp kết ni tới cơ sd u MySQL.li
Chèn, cp nht, xóa và truy vn d liu t các bng trong cơ sd liu.
X lý và qun lý d liu cm biến và hành đng
Nhn d u t các cm biến thông qua MQTT và lưu vào cơ sd li liu.
Ly d u cm biến t cơ sd u theo nhiu tiêu chí khác nhau (tt c, theo trang, theo thời gian, theo li li
tìm kiếm).
Ly d u hành đng t cơ sd u theo nhiu tiêu chí khác nhau (tt c, theo trang, theo thời gian, theo li li
tìm kiếm).
Cung cp API cho giao din ngưi dùng
Cung cp API RESTful đ ly thông tin tng quan v d u cm biến và hành đng.li
Cung cp API đ ly d u cm biến và hành đng theo trang, theo khong thời gian, theo tiêu chí tìm li
kiếm, và theo sp xếp.
Giao tiếp thi gian thc qua WebSocket
Thiết lp WebSocket đ truyn d u thời gian thc t máy ch tới client.li
Gi và nhn d u cm biến và hành đng qua WebSocket.li
Giao tiếp vi MQTT Broker
Kết ni tới MQTT Broker đ nhn và gi thông báo MQTT.
Nhn d u cm biến t MQTT và phát thông báo tới tt c các client kết ni qua WebSocket.li
Nhn và x lý thông báo hành đng t MQTT và phát tới tt c các client kết ni qua WebSocket.
X lý d u đu vào t clientli
X lý yêu cu t client đ ly d u cm biến và hành đng.li
Phát thông báo tới tt c các client kết ni khi có d u mới t MQTT.li
Qun lý kết ni client
Qun lý kết ni và ngt kết ni ca các client.
Phát thông báo tới tt c các client khi có s thay đi trong d u cm biến hoc hành đng.li
5. c Phân công công vi
5.1 Phân công ban đu
H tên
sinh viên
Các ni dung đã tham gia
Li An Nguyên
B19DCCN475
Tìm hiu v giao thc Websocket
Lp trình Backend website
Cài đt và x lý database
Nguyn Phi Hùng
B20DCCN296
Mua và chun b các thiết b
Lp đt các thiết b
Lp trình Arduino nhn d u t cm biếnli
Phm Trung Kiên
B18DCAT122
Tìm hiu v Arduino và cách lp trình Arduino
Lp trình Frontend website
Nguyn Đình Thành
B19DCAT176
Tìm hiu v giao thc MQTT
Lp trình gi và nhn d u v giao thc MQTT li i
5.2 Theo dõi
Công vic
Bt đu
Hoàn thành
Ngưi thc hin
Chun b ến thc và thiết bki
Tìm hiu v Arduino và cách lp trình Arduino
12/7
17/7
Phm Trung Kiên
Tìm hiu v giao thc Websocket
15/7
19/7
Li An Nguyên
Tìm hiu v giao c MQTTth
15/7
19/7
Nguyn Đình Thành
Mua các thiết b
15/7
18/7
Nguyn Phi Hùng
Lp đt các thiết b
19/7
20/7
Nguyn Phi Hùng
Code project
Lp trình Arduino nhn d u t cm biếnli
21/7
24/7
Nguyn Phi Hùng
Lp trình gi và nhn d u với giao thc MQTT li
24/7
26/7
Nguyn Đình Thành
Lp trình Frontend website
23/7
25/7
Phm Trung Kiên
Lp trình Backend website
25/7
29/7
Li An Nguyên
Cài đt và x lý database
29/7
31/7
Li An Nguyên
Rà soát và fix bug nh
1/8
4/8
Li An Nguyên
II. Thiết kế h thng.
1. Tổng quan h th ng.
1.1 ng. Sơ đ hot đ
1.2 Mô t sơ đ.
MQTT Broker:
Kết ni với mqtt://localhost:1883.
Đăng ký 2 titles sensorPub và actionPub.
ExpressJS Server (HTTP server):
Lng nghe trên cng 3000.
S dng các route đ x lý yêu cu t client (/api/sensor/* và /api/action/*).
WebSocket:
Được to trên cùng mt máy ch HTTP như Express.
Lng nghe kết ni WebSocket t client.
Cho phép hin th thông tin cm biến realtime.
MySQL Database:
Kết ni đến MySQL server và s dng cơ s d liu.
Các bng d liu bao gm sensor và action.
Web Client:
Hin th thông tin lch s đo cm biến và đèn.
Hin th realtime đo lường ca cm biến DHT11.
2. Database.
Database đưc s dng là MySQL gm 2 bng:
Sensor: Dùng đ ghi l các bn ghi (logs) nhn đưc t cm biến DHT11i
Action: Dùng đ ghi li các bn ghi bt tt đèn t phía client
2.1 Code to bng.
Sensor
CREATE TABLE `project.iot.esp8266_dht11`.`sensor` (
`id` INT NOT NULL AUTO_INCREMENT,
`device_id` VARCHAR(255) NOT NULL,
`humidity` INT NOT NULL,
`temperature` FLOAT NOT NULL,
`light` INT NOT NULL,
`time` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`))
Action
CREATE TABLE `project.iot.esp8266_dht11`.`action` (
`id` INT NOT NULL AUTO_INCREMENT,
`device_id` VARCHAR(45) NOT NULL,
`status` VARCHAR(45) NOT NULL,
`time` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`id`))
3. Backend (ExpressJS).
3.1 Sơ đ ho ng ca server.t đ
3.2 Mô t hot đng.
Nhn d u t MQTTli :
MQTT Client kết ni đến MQTT broker và đăng ký ch đ sensorPub và actionPub.
Khi nhn được tin nhn t sensorPub, MQTT Client chèn d u vào bng sensor.li
Khi nhn được tin nhn t bt k ch đ nào, MQTT Client phát li tin nhn đến tt c các client WebSocket.
Gi d u đến WebSocketli :
Client kết ni đến WebSocket server.
Khi client gi tin nhn, WebSocket server chèn d u vào bng action và phát li tin nhn đến MQTT li
broker.
X lý yêu cu HTTP:
ExpressJS server lng nghe các yêu cu HTTP t client.
Da vào route, các controller s gi các hàm t model đ thao tác d liu.
Kết qu được tr v cho client thông qua HTTP response.
3.3 Code chi tiế i thích.t và gi
Database và Express Server.JS
Các file liên quan:
mysql.common.js
action.model.js & sensor.model.js
action.controller.js & sensor.controller.js
mysql.common.js
Cung cp mt ConnectionService dng tng quát đ tương tác được với c 2 bng sensor và action.
Service này cung cp các câu lnh query tương tác trc tiếp với database đ thêm và ly ra d liu.
Service gm các hàm sau:
Kết ni vi MySQL database
host: 'localhost',
user: 'ast.iot',
password: '123456',
database: 'project.iot.esp8266_dht11',
dateStrings: ['DATETIME']
Với data đã có t MQTT messages.
Ghi các data vào Database.
Biến table là tên bng ('sensor' or 'action').
Các data cn thiết cho vic biu din lên client
bao gm:
{ numData, numPage, startTime, endTime }
Data đc bit này ph trách cho vic display các
bng.
Ly tt c data t mt bng
Chia page theo id tăng dn.
Mi page 30 dòng data.
Sp xếp d u theo:li
type: Tăng hoc gim
value: Theo ct mun sp xếp
Tìm kiếm data theo:
type: Ct mun tìm kiếm
search: Giá tr ca ct
If type is time, subData will be the data that
contains the 'search' string.
If type is not time, subData will be the data that
equals the 'search' string.
Ly thông tin s dòng và s trang đ phân trang
Lc và ly thông tin trong khong thời gian xác
đnh
Ly ra các thông tin đc bi đ n th clientt hi
action.model.js
insertData: L actionData t y
websocket ri chèn vào database.
Các hàm còn li ch yếu gi các
hàm trong Connection t file
mysql.common.js và gán tên database
'action'
actionFlag là đi tượng cha các
thông tin đ render bng Action Log
phía client
sensor.model.js
insertData: L sensorData t y
websocket ri chèn vào database.
getSearch: Kết hợp 2 hàm đ ly
cùng lúc 2 loi d liu t database
getTimeData: Tương t getSearch
getSort: Ly ra data đã được sp
xếp theo điu kin

Preview text:

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN ------- -------
BÁO CÁO BÀI TẬP LỚN IoT và ứng dụng Đề tài
: Hệ thống cảm biến đo
nhiệt độ và độ ẩm Mục lục I.
Mô tả hệ thống ...................................................................................................................................................... 3 1.
Mục đích. .......................................................................................................................................................... 2.
Các thiết bị sử dụng trong hệ thống. ................................................................................................................. 3 3.
Các kiến thức cơ bản. ....................................................................................................................................... 4 3.1
ESP8266 NodeMCU 9.0. ......................................................................................................................... 4 3.2
Giao thức MQTT. .................................................................................................................................... 6 3.3
Websocket. ............................................................................................................................................... 8
II. Thiết kế hệ thống. ................................................................................................................................................ 12 1.
Tổng quan hệ thống. ....................................................................................................................................... 12 1.1
Sơ đồ hoạt động. .................................................................................................................................... 12 1.2
Mô tả sơ đồ. ........................................................................................................................................... 12 2.
Database. ........................................................................................................................................................ 1 2.1
Code tạo bảng. ....................................................................................................................................... 13 3.
Backend (ExpressJS). ..................................................................................................................................... 14 3.1
Sơ đồ hoạt động của server. ................................................................................................................... 14 3.2
Mô tả hoạt động. .................................................................................................................................... 14 3.3
Code chi tiết và giải thích. ..................................................................................................................... 15 4.
Client. ............................................................................................................................................................. 2 4.1
Kết nối với websocket. .......................................................................................................................... 26 4.2
Kết nối với database thông qua api. ....................................................................................................... 26 5.
Arduino ........................................................................................................................................................... 2 5.1
Code chi tiết và giải thích ...................................................................................................................... 28 5.2
Phần chưa làm được ............................................................................................................................... 34 III.
Giao diện ........................................................................................................................................................ 3 1.
Dashboard ....................................................................................................................................................... 3 2.
Sensor Log ...................................................................................................................................................... 35
I. Mô tả hệ thống
1. Mục đích.
Hệ thống sử dụng cảm biến để thông báo nhiệt độ và độ ẩm cho người dùng thông qua trang web có thể truy cập với
mạng LAN. Trang web sẽ cung cấp nhiệt độ và độ ẩm với dashboard hiển thị dễ nhìn, cho phép người dùng có thể
xem thông tin nhiệt độ và độ ẩm trực tiếp ở thời gian thực.
2. Các thiết bị sử dụng trong hệ thống. Phần cứng • 1 kit ESP8226 NodeMCU 9.0
• 1 cảm biến nhiệt độ và độ ẩm DHT11 • 2 đèn led • 1 bảng mạch
• Và các loại dây dẫn đi kèm Phần mềm: • Arduino IDE
• Mosquitto (Giao thức MQTT) và MQTT explorer
• Framework ExpressJS (Backend) • Websocket Server • HTML/CSS/JS (Client)
3. Các kiến thức cơ bản. 3.1 ESP8266 NodeMCU 9.0. Giới thiệu chung.
ESP8266 là một vi mạch Wi-Fi giá rẻ với khả năng xử lý TCP/IP đầy đủ và khả năng vi điều khiển, được sản xuất bởi
Espressif Systems. ESP8266 tích hợp phiên bản nâng cao của bộ xử lý 32-bit L106 Diamond của Tensilica và SRAM
trên chip. Nó đã trở nên phổ biến nhờ vào giá thành hợp lý và tính dễ sử dụng. Phần cứng.
Module Wi-Fi: Tích hợp Wi-Fi, hỗ trợ cả hai băng tần 2.4 GHz và 5 GHz.
Bộ xử lý: Bộ xử lý Tensilica L106 32-bit RISC chạy ở tốc độ 80 MHz. Bộ nhớ: • RAM: 80 KB • Flash: 4 MB
Chân GPIO: 17 chân GPIO với 11 chân để giao tiếp với các thiết bị ngoại vi khác nhau.
ADC: Một chân ADC 10-bit cho đầu vào analog.
Nguồn điện: cổng micro-USB 5V
Các khả năng khác. Framework hỗ trợ: • Arduino • ESP8266 Non-OS SDK • ESP8266 RTOS SDK Giao thức upload: • Espota • Esptool
Tài liệu tham khảo.
• https://docs.platformio.org/en/latest/boards/espressif8266/nodemcu.html
• https://nodemcu.readthedocs.io/en/latest/
• https://projecthub.arduino.cc/PatelDarshil/getting-started-with-nodemcu-esp8266-on-arduino-ide-b193c3 3.2 Giao thức MQTT.
Giao thức MQTT (Message Queuing Telemetry Transport) là một giao thức nhắn tin nhẹ, phổ biến trong các ứng
dụng IoT (Internet of Things) do tính đơn giản và hiệu quả của nó trong việc truyền dữ liệu giữa các thiết bị. Trong
báo cáo này, chúng ta sẽ tìm hiểu cách sử dụng MQTT trong một hệ thống IoT dựa trên module ESP8266, một vi điều
khiển tích hợp WiFi, thường được sử dụng trong các dự án IoT do tính năng kết nối mạng và chi phí thấp. Tổng quan.
MQTT là giao thức nhắn tin dựa trên mô hình publish/subscribe,
nơi các thiết bị phát dữ liệu (publishers) gửi thông điệp đến một
hoặc nhiều chủ đề (topics), và các thiết bị nhận (subscribers) đăng
ký các chủ đề này để nhận thông điệp. Giao thức này được thiết
kế để hoạt động hiệu quả trong các môi trường có băng thông hạn
chế hoặc kết nối không ổn định, với khả năng sử dụng rất ít tài nguyên hệ thống.
Các thành phần chính của MQTT.
Broker: Là máy chủ trung gian quản lý các kết nối, truyền tải thông điệp giữa các publisher và subscriber. Broker phổ b ế i n là Mosquitto. •
Publisher: Thiết bị hoặc ứng dụng gửi thông điệp lên broker. •
Subscriber: Thiết bị hoặc ứng dụng nhận thông điệp từ broker.
Chất lượng dịch vụ (QoS).
MQTT hỗ trợ ba mức độ QoS để đảm bảo thông điệp được truyền tải một cách chính xác: •
QoS 0: "At most once" - Thông điệp được gửi một lần mà không có đảm bảo việc nhận. •
QoS 1: "At least once" - Thông điệp được gửi ít nhất một lần, có thể bị trùng lặp. •
QoS 2: "Exactly once" - Thông điệp được gửi đúng một lần, không có khả năng bị trùng lặp.
ESP8266 và Vai trò trong Hệ thống IoT.
ESP8266 là một module WiFi phổ biến với khả năng kết nối mạng dễ dàng và chi phí thấp, lý tưởng cho các dự án
IoT. Với vi xử lý 32-bit, nó cung cấp sức mạnh tính toán đủ để xử lý các nhiệm vụ IoT đơn giản và có thể lập trình
bằng các ngôn ngữ như Arduino C++.
Triển khai MQTT với ESP8266.
Yêu cầu phần cứng:
Module ESP8266 (ví dụ: NodeMCU) •
Cảm biến (ví dụ: cảm biến nhiệt độ DHT11) •
Nguồn cấp điện (USB hoặc pin)
Yêu cầu phần mềm: • Arduino IDE •
Thư viện PubSubClient để hỗ trợ MQTT •
Thư viện ESP8266WiFi để kết nối mạng
Các bước triển khai:
Bước 1: Cài đặt Arduino IDE và thêm ESP8266 vào Board Manager •
Mở Arduino IDE, vào mục File -> Preferences và thêm đường dẫn
http://arduino.esp8266.com/stable/package_esp8266com_index.json vào Additional Board Manager URLs. •
Vào Tools -> Board -> Board Manager và tìm kiếm ESP8266, sau đó cài đặt.
Bước 2: Cài đặt các thư viện cần thiết •
Cài đặt thư viện PubSubClient từ Library Manager trong Arduino IDE. •
Cài đặt thư viện ESP8266WiFi để kết nối WiFi.
Bước 3: Viết mã kết nối và gửi dữ l ệ i u qua MQTT
Các đoạn mã kết nối sẽ được áp dụng trực tiếp trong dự án
Bước 4: Upload mã và giám sát kết quả •
Kết nối ESP8266 với máy tính, chọn đúng board và port trong Arduino IDE, sau đó upload mã. •
Mở Serial Monitor để giám sát kết nối và dữ l ệ i u được gửi đi. Kết luận.
Giao thức MQTT cùng với module ESP8266 cung cấp một giải pháp mạnh mẽ và linh hoạt cho các ứng dụng IoT,
cho phép truyền dữ liệu giữa các thiết bị một cách hiệu quả và tin cậy. Với sự hỗ trợ của cộng đồng và các thư viện
mã nguồn mở, việc triển khai hệ thống IoT với ESP8266 và MQTT trở nên dễ dàng và tiết kiệm chi phí.
Tài liệu tham khảo.
https://www.emqx.com/en/mqtt-guide https://www.hivemq.com/mqtt/
https://www.comparitech.com/net-admin/what-is-mqtt/ 3.3 Websocket. Tổng quan.
WebSocket là một giao thức truyền tải dữ liệu hai chiều (full-duplex) trên web, cho phép truyền tải dữ liệu trong thời
gian thực giữa trình duyệt web và máy chủ. Đ ề
i u này có nghĩa là một kết nối duy trì giữa máy khách và máy chủ, cho
phép thông tin được gửi đi và nhận lại một cách hiệu quả và nhanh chóng mà không cần phải thiết lập kết nối mới
mỗi khi truyền tải thông tin. Các sự k ệ
i n chính trong WebSocket:
1. Mở kết nối (Open): Khi một kết nối WebSocket được thiết lập giữa trình duyệt và máy chủ.
2. Nhận dữ liệu (Message): Khi trình duyệt hoặc máy chủ nhận được dữ liệu mới.
3. Gửi dữ liệu (Send): Khi trình duyệt hoặc máy chủ gửi dữ liệu.
4. Đóng kết nối (Close): Khi kết nối WebSocket bị đóng.
5. Lỗi (Error): Nếu có lỗi trong quá trình thiết lập hoặc sử dụng kết nối WebSocket.
Công dụng của WebSocket:
Ứng dụng web thời gian thực: WebSocket thường được sử dụng để phát triển các ứng dụng web thời gian
thực như trò chơi trực tuyến, ứng dụng trò chuyện và các ứng dụng cập nhật dữ liệu trực tiếp. •
Hiệu suất cao: WebSocket có hiệu suất cao hơn và tiết kiệm năng lượng hơn so với các giải pháp truyền tải dữ l ệ
i u trực tiếp khác như Ajax hoặc Comet.
Triển khai với ExpressJS
Bước 1: Cài đặt thư viện npm install express ws
Bước 2: Tạo máy chủ express và thiết lập Websocket
Thiết lập có trong phần Code chi tiết và giải thích backend Bước 3: Chạy máy chủ
Bước 4: Kết nối tới máy chủ websocket từ Client
Thiết lập có trong phần Client
Tài liệu tham khảo.
Websocket là gì? Ưu và nhược điểm của websocket bạn cần biết (stringee.com)
WebSocket là gì? Lý do sử dụng WebSocket (200lab.io)
Socket là gì? WebSocket là gì? Hiểu hơn về Websocket | TopDev
ws - npm (npmjs.com) (Triển khai)
4. Yêu cầu chức năng
Kết nối và quản lý cơ sở dữ liệu MySQL
Thiết lập kết nối tới cơ sở dữ liệu MySQL. •
Chèn, cập nhật, xóa và truy vấn dữ liệu từ các bảng trong cơ sở dữ liệu.
Xử lý và quản lý dữ liệu cảm biến và hành động
Nhận dữ liệu từ các cảm biến thông qua MQTT và lưu vào cơ sở dữ liệu. •
Lấy dữ liệu cảm biến từ cơ sở dữ l ệ
i u theo nhiều tiêu chí khác nhau (tất cả, theo trang, theo thời gian, theo tìm kiếm). •
Lấy dữ liệu hành động từ cơ sở dữ liệu theo nhiều tiêu chí khác nhau (tất cả, theo trang, theo thời gian, theo tìm kiếm).
Cung cấp API cho giao diện người dùng
Cung cấp API RESTful để lấy thông tin tổng quan về dữ liệu cảm biến và hành động. •
Cung cấp API để lấy dữ liệu cảm biến và hành động theo trang, theo khoảng thời gian, theo tiêu chí tìm kiếm, và theo sắp xếp.
Giao tiếp thời gian thực qua WebSocket
Thiết lập WebSocket để truyền dữ liệu thời gian thực từ máy chủ tới client. • Gửi và nhận dữ l ệ
i u cảm biến và hành động qua WebSocket.
Giao tiếp với MQTT Broker
Kết nối tới MQTT Broker để nhận và gửi thông báo MQTT. •
Nhận dữ liệu cảm biến từ MQTT và phát thông báo tới tất cả các client kết nối qua WebSocket. •
Nhận và xử lý thông báo hành động từ MQTT và phát tới tất cả các client kết nối qua WebSocket. Xử lý dữ l ệ
i u đầu vào từ client
Xử lý yêu cầu từ client để lấy dữ liệu cảm biến và hành động. •
Phát thông báo tới tất cả các client kết nối khi có dữ l ệ i u mới từ MQTT.
Quản lý kết nối client
Quản lý kết nối và ngắt kết nối của các client. •
Phát thông báo tới tất cả các client khi có sự thay đổi trong dữ l ệ
i u cảm biến hoặc hành động.
5. Phân công công việc 5.1 Phân công ban đầu Họ tên Mã sinh viên
Các nội dung đã tham gia
Tìm hiểu về giao thức Websocket Lại An Nguyên B19DCCN475 Lập trình Backend website
Cài đặt và xử lý database
Mua và chuẩn bị các thiết bị Nguyễn Phi Hùng B20DCCN296
Lắp đặt các thiết bị
Lập trình Arduino nhận dữ liệu từ cảm biến
Tìm hiểu về Arduino và cách lập trình Arduino Phạm Trung Kiên B18DCAT122 Lập trình Frontend website
Tìm hiểu về giao thức MQTT Nguyễn Đình Thành B19DCAT176
Lập trình gửi và nhận dữ l ệ i u với giao thức MQTT 5.2 Theo dõi Công việc Bắt đầu
Hoàn thành Người thực hiện Chuẩn bị k ế
i n thức và thiết bị
Tìm hiểu về Arduino và cách lập trình Arduino 12/7 17/7 Phạm Trung Kiên
Tìm hiểu về giao thức Websocket 15/7 19/7 Lại An Nguyên
Tìm hiểu về giao thức MQTT 15/7 19/7 Nguyễn Đình Thành Mua các thiết bị 15/7 18/7 Nguyễn Phi Hùng
Lắp đặt các thiết bị 19/7 20/7 Nguyễn Phi Hùng Code project
Lập trình Arduino nhận dữ liệu từ cảm biến 21/7 24/7 Nguyễn Phi Hùng
Lập trình gửi và nhận dữ l ệ
i u với giao thức MQTT 24/7 26/7 Nguyễn Đình Thành Lập trình Frontend website 23/7 25/7 Phạm Trung Kiên Lập trình Backend website 25/7 29/7 Lại An Nguyên
Cài đặt và xử lý database 29/7 31/7 Lại An Nguyên Rà soát và fix bug nhỏ 1/8 4/8 Lại An Nguyên
II. Thiết kế hệ thống.
1. Tổng quan hệ thống. 1.1 Sơ đồ hoạt ộ đ ng. 1.2 Mô tả sơ đồ. MQTT Broker:
• Kết nối với mqtt://localhost:1883.
• Đăng ký 2 titles sensorPub và actionPub.
ExpressJS Server (HTTP server):
• Lắng nghe trên cổng 3000.
• Sử dụng các route để xử lý yêu cầu từ client (/api/sensor/* và /api/action/*). WebSocket:
• Được tạo trên cùng một máy chủ HTTP như Express.
• Lắng nghe kết nối WebSocket từ client.
• Cho phép hiển thị thông tin cảm biến realtime. MySQL Database:
• Kết nối đến MySQL server và sử dụng cơ sở dữ liệu.
• Các bảng dữ liệu bao gồm sensor và action. Web Client:
• Hiển thị thông tin lịch sử đo cảm biến và đèn.
• Hiển thị realtime đo lường của cảm biến DHT11. 2. Database.
Database được sử dụng là MySQL gồm 2 bảng:
Sensor: Dùng để ghi lại các bản ghi (logs) nhận được từ cảm biến DHT11
Action: Dùng để ghi lại các bản ghi bật tắt đèn từ phía client 2.1 Code tạo bảng. Sensor
CREATE TABLE `project.iot.esp8266_dht11`.`sensor` (
`id` INT NOT NULL AUTO_INCREMENT,
`device_id` VARCHAR(255) NOT NULL, `humidity` INT NOT NULL, `temperature` FLOAT NOT NULL, `light` INT NOT NULL,
`time` TIMESTAMP NULL DEFAULT NULL, PRIMARY KEY (`id`)) Action
CREATE TABLE `project.iot.esp8266_dht11`.`action` (
`id` INT NOT NULL AUTO_INCREMENT,
`device_id` VARCHAR(45) NOT NULL,
`status` VARCHAR(45) NOT NULL,
`time` TIMESTAMP NULL DEFAULT NULL, PRIMARY KEY (`id`))
3. Backend (ExpressJS). 3.1 Sơ đồ hoạt ộ đ ng của server. 3.2 Mô tả hoạt động.
Nhận dữ liệu từ MQTT:
• MQTT Client kết nối đến MQTT broker và đăng ký chủ đề sensorPub và actionPub.
• Khi nhận được tin nhắn từ sensorPub, MQTT Client chèn dữ liệu vào bảng sensor.
• Khi nhận được tin nhắn từ bất kỳ chủ đề nào, MQTT Client phát lại tin nhắn đến tất cả các client WebSocket.
Gửi dữ liệu đến WebSocket:
• Client kết nối đến WebSocket server.
• Khi client gửi tin nhắn, WebSocket server chèn dữ liệu vào bảng action và phát lại tin nhắn đến MQTT broker.
Xử lý yêu cầu HTTP:
• ExpressJS server lắng nghe các yêu cầu HTTP từ client.
• Dựa vào route, các controller sẽ gọi các hàm từ model để thao tác dữ liệu.
• Kết quả được trả về cho client thông qua HTTP response. 3.3 Code chi tiết và g ả i i thích.
Database và ExpressJS Server. Các file liên quan: • mysql.common.js •
action.model.js & sensor.model.js •
action.controller.js & sensor.controller.js mysql.common.js
• Cung cấp một ConnectionService dạng tổng quát để tương tác được với cả 2 bảng sensor và action.
• Service này cung cấp các câu lệnh query tương tác trực tiếp với database để thêm và lấy ra dữ liệu. Service gồm các hàm sau:
Kết nối với MySQL database host: 'localhost', user: 'ast.iot', password: '123456',
database: 'project.iot.esp8266_dht11', dateStrings: ['DATETIME']
Với data đã có từ MQTT messages. Ghi các data vào Database.
Biến table là tên bảng ('sensor' or 'action').
Các data cần thiết cho việc biểu diễn lên client bao gồm:
{ numData, numPage, startTime, endTime }
Data đặc biệt này phụ trách cho việc display các bảng.
Lấy tất cả data từ một bảng
Chia page theo id tăng dần. Mỗi page 30 dòng data. Sắp xếp dữ l ệ i u theo: • type: Tăng hoặc giảm
• value: Theo cột muốn sắp xếp Tìm kiếm data theo:
type: Cột muốn tìm kiếm
search: Giá trị của cột
If type is time, subData will be the data that contains the 'search' string.
If type is not time, subData will be the data that equals the 'search' string.
Lấy thông tin số dòng và số trang để phân trang
Lọc và lấy thông tin trong khoảng thời gian xác định
Lấy ra các thông tin đặc biệt để h ể i n thị client action.model.js
• insertData: Lấy actionData từ
websocket rồi chèn vào database.
• Các hàm còn lại chủ yếu gọi các
hàm trong Connection từ file
mysql.common.js và gán tên database 'action'
• actionFlag là đối tượng chứa các
thông tin để render bảng Action Log phía client sensor.model.js
insertData: Lấy sensorData từ
websocket rồi chèn vào database.
getSearch: Kết hợp 2 hàm để lấy
cùng lúc 2 loại dữ liệu từ database
getTimeData: Tương tự getSearch
getSort: Lấy ra data đã được sắp xếp theo điều kiện