Nhóm thực hiện khóa luận quyết định ứng dụng hệ thống vào văn phòng thông minh, giúp người dùng quản lý các thiết bị như đèn, quạt,... và có thể theo dõi tình
trạng của căn phòng như nhiệt độ, ánh sáng từ xa thông qua giao diện trên ứng dụng người dùng.
Hệ thống bao gồm các thành phần chính: node Gateway, node cảm biến nhiệt
độ, node cảm biến ánh sáng, node cảm biến lửa, node Relay 4 kênh. Node cảm biến nhiệt độ sử dụng chuẩn giao tiếp I2C dé truyền tín hiệu từ cảm biến nhiệt độ LM75
về nRF52832 giúp theo dõi nhiệt độ của căn phòng. Node cảm biến ánh sáng sử dung chuẩn giao tiếp GPIO dé truyền tín hiệu từ cảm biến ánh sáng về nRF52832, giúp người dùng theo dõi đèn đã thực sự được tắt hay chưa, đảm bảo sự chính xác của hệ thống. Node cảm biến lửa sử dụng chuẩn giao tiếp GPIO dé truyền tín hiệu từ cảm biến lửa về nRF52832, giúp việc báo động khi phát hiện ngọn lửa được kip thời. Node Relay 4 kênh nhận tín hiệu từ nRF52832 dé điều khién đóng mở các kênh thông qua kích điện áp mức thấp, các kênh này sẽ được nối với các thiết bị như đèn, quạt, 4m đun nước,... Cuối cùng là node Gateway được tích hợp module nRF52832 và module Wifi ESP8266 sử dụng chuẩn giao tiếp UART đề truyền nhận tín hiệu giữa 2 module. Node Gateway sẽ đóng vai trò cầu nối giữa các node trong mang mesh và Server, giúp truyền nhận tín hiệu cảm biến từ từng thiết bị trong mạng mesh đến người dùng cũng như tín hiệu điều khién từ người dùng đến các thiết bi này thông qua User App.
Cảm biến
lửa
Cảm biến
. . Sensor signal Uart 'Web Socket API
ánh sáng
= —————————* | nRF52832 | —————————> ESP8266 ——> Server <——ằ | User App
Cam bién †
nhiệt độ
Relay
4 kênh <
Tín hiệu điều khiển từ Server
Hình 3.1. Sơ đồ truyền tín hiệu trong hệ thong
3l
3.1. Thiết kế Gateway tích hợp nRF52832 với ESP8266
e Phan tích:
Gateway là một trong những phan quan trọng nhất trong mô hình mang mesh. Gateway được thiết kế với mục đích giúp cho người dùng có thể đễ dàng truy cập vào
hệ thống điều khiến các thiết bị trong văn phòng tích hợp công nghệ Bluetooth thông qua mạng Internet, do vậy Gateway được tích hợp 2 thành phần chính là module
Bluetooth nRF52832 và module Wifi ESP8266.
se Thiết kế:
Dữ liệu của các cảm biến truyền về nRF52832 (thông qua việc nhận dữ liệu từ mang mesh) sẽ được chuyên tiếp cho ESP8266 thông qua UART với baudrate
115200. ESP8266 sẽ xử lý dữ liệu nhận được và gửi lên Server thông qua WebSocket.
Dữ liệu truyền về từ Server sẽ được ESP8266 xử lý và được gửi lại qua UART cho nRF52832, sau đó dit liệu sẽ được gửi đến các node nhận lệnh điều khiến tương
ứng.
3.2. Thiết kế Node Relay 4 kênh
e Phan tích:
Relay 4 Kénh 5V gom 4 ro le hoạt động tại điện áp 5V DC, chịu được hiệu điện thế lên đến 250V AC 10A [16]. Relay 4 kênh 5V được thiết kế chắc chắn, khả năng cách điện tốt. Trên module đã có sẵn mạch kích relay sử dung transistor và IC cách ly bang ánh sáng giúp cách ly hoàn toàn mạch điều khiển (vi điều khiến) với
32
relay, bảo đảm vi điều khiến hoạt động ôn định. Có sẵn header rất tiện dụng khi kết
nối với vi điều khiển.
e Thiết kế:
Node Relay được thiết kế gồm nRF52832 và module relay 4 kênh. Cap nguồn cho relay 4 kênh được lấy trực tiếp từ nRF52832. Relay 4 kênh sử dung chân kích mức Thấp (0V), khi có tín hiệu 0V vào chân IN thì relay sẽ chuyên từ thường Hở
sang thường Đóng giúp cho dòng điện đi qua.
3.3. Thiết kế Node cảm biến nhiệt độ
e Phan tích:
Node cảm biến nhiệt độ sử dụng cảm biến LM75 sử dung chuẩn giao tiếp I2C,
sử dụng mức điện áp từ 2.8V đến 5.5V, có độ chính xác cao, tốc độ cảm biến nhanh, cung cấp độ chính xác lên tới 0,125°C, phạm vi đo nhiệt độ trong khoảng -55°C đến +125°C [13]. Chức năng chính của node cảm biến nhiệt độ là đo đạc nhiệt độ không khí trong phòng cũng như trong cả hệ thống như ngôi nhà, sân vuon,...
e Thiết kế:
Hiện tại nhóm tác giả dang sử dụng thư viện Im75b.h do Nordic cung cấp giúp cho việc cấu hình thanh ghi, thao tác giữa LM75 và module nRF52 được dễ dàng
hơn.
nRF52832 có thể trực tiếp đọc dữ liệu trong các thanh ghi thông qua bus I2C. LM75 có ba chân chọn địa chỉ logic A2, Al, AO. Mỗi chân thường được kết nối với
GND cho giá tri logic 0 hoặc với VCC cho logic 1 va cho phép người dùng định nghĩa
chúng. LM75 có slave addess có 7 bit gồm 4 bit cho MSB (Most Significant Byte) và
3 bit cho LSB (Least Significant Byte) (như hình Adress table bên dưới). Bén bit MSB được định nghĩa sẵn có giá trị 1001. Ở đây nêu chúng ta nối A2, A1 và A0 cho
GND thì sẽ được giá tri LSB là 000, từ đó có slave address của LM75 là 0x48 (1001000) [13].
33
Table 4. Address table
1 = HIGH; 0 = LOW.
MSB LSB
1 0 0 1 A2 Al A0
Hình 3.3. Address table [I3]
Để module nRF52 đọc duoc di liệu từ cảm biến, ta cần cấu hình Pointer Register (thanh ghi con trỏ). Khi cấp nguồn cho LM75, con trỏ tự động được gán giá
trị 00 và thanh ghi nhiệt độ (Temperature register) sẽ được chọn.
Table 6. Pointer register
B7 BB B5 B4 B3 B2 B[1:0]
0 0 0 = = =, pointer value
Table 7. Pointer value
B1 Bo Selected register
0 0 Temperature register (Temp)
0 1 Configuration register (Conf) ` `
1 0 Hysteresis register (Thyst)
1 1 Overtemperature shutdown register (Tos)
Hình 3.4. Thanh ghi con tro va giá trị các con tro [13]
Khi đọc thanh ghi Temp, tat cả 16 bit của 2 byte dit liệu (1 byte MSB và 1 byte LSB) đều phải được cung cấp cho dé vi điều khién có thé xử lý. Tuy nhiên chỉ có 11 bit chứa giá trị quan trong trong thanh ghi được sử dụng, 5 bit cuối cùng thuộc LSB
có giá tri đều bằng 0 và sẽ được lược bỏ [13].
Table 9. Temp register
MSByte LSByte
7 6 5 4 3 2 41 0 7 6 5 4 3 2 1 0 D10 DS D& DF D6 D5 D4 D3 D2 Di DO X X Xx x Xx
Hình 3.5. Thanh ghi nhiệt độ của LM75 [13]
Node cảm biến nhiệt độ sẽ cập nhật dữ liệu nhiệt độ mỗi phút một lần. Dữ liệu này sẽ được publish liên tục trong mang mesh rồi cập nhật real — time cho người dùng
thông qua Gateway.
34
3.4. Thiết kế Node cảm biến lửa
e Phan tích:
Node cảm biến lửa dùng để phát hiện lửa trong phạm vi 80cm, có thé điều chỉnh độ nhạy bằng biến trở. Kết quả trả về kiêu Digital (1 hoặc 0). Khi phát hiện có lửa thì chân OUT day điện thé lên mức cao và ngược lại.
e Thiết kế:
VCC VCC
Pin 23 (input) OUT
nRF52832
GND |
| GND
Hình 3.6. Sơ đồ kết nối trong node cảm biến lửa
Module nRF52 sử dụng pin GPIO 23, khi cảm biến lửa phát hiện có lửa, chân OUT của cảm biến lửa sẽ được kích từ mức thấp lên mức cao. Lúc này, dit liệu của cảm biến lửa sẽ được publish trong mạng mesh về Gateway. Gateway sẽ gửi tín hiệu này lên cơ sở dữ liệu của Server rồi cập nhật cảnh báo lửa cho người dùng qua User
App một cách real — time.
3.5. _ Thiết kế Node cảm biến ánh sáng
e Phân tích:
Node cảm biên ánh sáng quang trở phát hiện cường độ ánh sáng, sử dụng bộ
cảm biên photoresistor loại nhạy cảm, cho tín hiệu ôn định, rõ rang và chính xác hon
so với quang trở. Có biến trở dé điều chỉnh độ nhạy của cảm biến [14].
Node cảm biến ánh sáng hỗ trợ người dùng trong việc theo dõi chính xác thiết
bị phát sáng như đèn đã được bật/tắt theo đúng như trong ứng dụng người dùng hay
chưa.
e Thiết kế:
35
Ngõ ra DO trên cảm biên được dùng đê xác định cường độ ánh sáng của môi trường, khi ở ngoài sáng, ngõ ra DO có giá tri 0, ngược lại DO có giá tri 1.
3.6. _ Thiết kế mô hình mang mesh giao tiếp giữa Gateway với các Nodes
e Phân tích:
Sau khi đã phân tích hệ thống, nhóm đã sử dụng nRF5 SDK for Mesh là base- source cho khóa luận. nRF5 SDK for Mesh cung cấp các model đã dựng sẵn như Generic Model bao gồm Generic OnOff Server và Generic Client Models [5]. Model
Hinh 3.7. Generic OnOff Model [5]
Cấu trúc một message được gửi từ các node device lên node Gateway gồm 1- byte Opcode dé nhận diện loại dữ liệu cần xử lý và I-byte chứa trạng thái của node
device, sử dụng toán tử OR (“|”):
+ Message cua data từ cảm biên lửa:
MSG_OPCODE_ FIREI | FIRE_DETECT_DATA
+ Message của data cảm biến ánh sáng:
MSG_OPCODE_LIGHT1 | LIGHT_DETECT_DATA + Message cua data cam biên nhiệt độ:
MSG_OPCODE_ TEMPI | TEMP_DATA + Message cho Switch 1:
MSG_OPCODE_SWITCH_ON_1
36
MSG_OPCODE_SWITCH_ON_2 MSG_OPCODE_SWITCH_ON_3 MSG_OPCODE_SWITCH_ON_
MSG_OPCODE_SWITCH_OFF_1 MSG_OPCODE_SWITCH_OFF_2 MSG_OPCODE_SWITCH_OFF_3 MSG_OPCODE_SWITCH_OFF_4 + Message cho Switch 2:
MSG_OPCODE_SWITCH_ON_1 MSG_OPCODE_SWITCH_ON_2 MSG_OPCODE_SWITCH_ON_3 MSG_OPCODE_SWITCH_ON_
MSG_OPCODE_SWITCH_OFF_1 MSG_OPCODE_SWITCH_OFF_2 MSG_OPCODE_SWITCH_OFF_3
MSG_OPCODE_SWITCH_OFF_4
+ Message xóa trạng thái chuông báo của cam biến lửa:
MSG_ OPCODE_CLEAR_ FIRE
Gia sử nhiệt độ của cảm biến do được là 27°C nghĩa là
MSG_OPCODE_ TEMPI | TEMP_DATA = (0x46<<8 | 0x1B), riêng message của
cảm biến lửa 1 là 0x4600, cảm biến ánh sáng là 0x4700.
e Thiết kế:
Dựa vào cơ chế Publish/Subscribe [5], nhóm đã xây dựng sơ đồ khóa luận:
37
fẨ~~~~~~~~~~~~~~~~~~~~T~~~~~~~~~~~~T~~~~T~~T—~—~-~ ơ
1 |
1 Gateway I
1 1
| 1
1 1
1 1
1 0xC09A 0xC00B 0xC00C 0xC00D 1
1 1
1 !
CF J
0xC001 0xC002 OxC003
—>| Light 1 —>|[ Light 2
0xC005 0xC006
() Cac element của Gateway
Node subscribe dén node khac
Node subscribe lan nhau
Hình 3.8. Sơ đồ Publish/Subscribe các node trong mang mesh
Sơ đồ mang mesh bao gồm node Gateway và các node device, cụ thé: 2 node Switch, 2 node cảm biến ánh sang (Light), node cam biến lửa (Fire), node cảm biến nhiệt độ (Temp). Với mỗi node đều có một địa chỉ publish riêng như sau:
+ Gateway có 4 Element, mỗi element là một model được xây dựng trên cơ
chế truyền nhận 2 bytes, lần lượt publish tới địa chỉ lần lượt là 0xC00A,
0xC00B, 0xCO0C, 0xC00D:
o Element 1, Element 2 lần lượt được subscribe bởi Switch 1 va Switch
2, Gateway nhận dữ liệu điều khién từ trên Server và gửi message điều khiển tới các Switch, dữ liệu được phận biệt bởi các địa chỉ Element
38
riêng biệt. Hai element subscribe tới 2 node Light có nhiệm vụ nhận dữ
liệu và cập nhật về Server.
o Element 3 subscribe tới node Temp có nhiệm vụ cập nhật dữ liệu nhiệt
độ về Server.
o Element 4 subscribe tới node Fire có nhiệm vu phát hiện lửa và nhanh
chóng gửi về Server dé thông báo cho người dùng.
+ Switch 1 va Switch 2 có dia chi publish lần lượt là 0xC001 va 0xC002
subscribe tới Element 1, Element 2. Điều này có nghĩa là 2 switch này nhận lệnh điều khiển thông qua 2 element khác nhau trong cùng một node
Gateway.
+ Hai node Light lần lượt có dia chỉ publish là 0xC005, 0xC006 được
subscribe bởi 2 element khác nhau đồng nghĩa với việc phân biệt được message của từng node Light khi gửi dir liệu về Gateway.
+ Node Temperature có địa chỉ publish là 0xC003, được subscribe bởi
Element 3, cập nhật nhiệt độ liên tục về Gateway mỗi phút 1 lần.
+ Node Fire có địa chỉ publish là 0xC004 được subscribe bởi Gateway thực
hiện việc cập nhật tình trạng của cảm biến lửa. Đồng thời cũng subscribe tới Gateway dé truyền message về với mục đính xóa trạng thái của chuông báo khi cần.
Các node trong mạng có cấu hình với khả năng tích hợp các tính năng relay,
proxy, trong đó:
+ Relay: là một tính năng quan trọng trong mạng Bluetooth mesh, nó có kha
năng truyền tải message trong trường hợp node nhận message năm ngoài phạm vi truyền tải của node gửi ban đầu.
+ Proxy: là tính năng cho phép các node sử dung proxy protocol với khả nang
tận dụng GATT Bearer cho phép thiết bị hỗ trợ Advertising Bearer giao tiếp một cách gián tiếp với các node của mạng mesh [5]. Nhờ vào điều này
các node trong mạng mesh sẽ được thực hiện dễ dàng quá trình provisioning băng smartphone.
39
Quá trình provisioning trong mạng được thực hiện trên smartphone thông qua
ứng dụng có tên nRF Mesh do Nordic Semiconductor cung cấp. Smartphone có vai trò là provisioner giúp cau hình các node trong mạng mesh:
+ Cấp cho mỗi thiết bị được provision một địa chỉ duy nhất (Unicast address) + Phân phối các network keys va application keys tương ứng với mỗi thiết
bị.
+ Cấu hình mesh model cho từng thiết bi
Sending provisioning invites.
Provisioning capabilities received...
Sending provisioning start...
Sending provisioning public key...
Provisioning public key receẽved...
Sending provisioning confirmation...
Provisioning confirmation recelved...
Sending provisioning randomse.
Provisionee random received Sending provisioning data...
Provisioning complete received...
Wireless by Nordic
Hình 3.9. Quá trình provisioning node Light 2 vào mang mesh
40
nAF Mesh
Address; 0008.
Company: Nordic Semẽcon,..
Elements; 1 Models: 2
CONFIGURE DETAILS
Temp Node
Address; 000C Company: Nordic Semẽcon,., Elements; 1
Models: 3
CONFIGURE DETAILS
Ov Confguration Complete
Mesh node has been Successfully configured,
Light 2
Address; 00D Company’ Nordic Semiconaes Elements; 1
Models: 2
CONFIGUAE DETAILS
Hình 3.10. Node Light 2 sau khi được prosivion vào mang mesh
Ung dụng nRF Mesh do Nordic cung cấp có vai trò là provisioner giúp cho quá trình provisioning một cách dé dàng, linh hoạt và giúp kiểm soát các bước trong
quá trình này.
3.7. Thiết kế cơ sở dữ liệu với MongoDB
e Phân tích: lý do lựa chon cơ sở dữ liệu (CSDL) MongoDB | Atlas [20]
+ Dễ dàng xây dựng, quản lý và kết nói. Hỗ trợ đầy đủ API dé có thé kết nối
từ phía Server.
+ Không phải xây dựng cấu trúc dữ liệu nhất định, cho phép dé dàng thay
đổi linh hoạt cầu trúc CSDL mà không có ràng buộc.
+ Sử dụng JSON giúp lập trình với ứng dụng Android được dễ dàng
+ Tốc độ kết nối, truy xuất dữ liệu nhanh chóng với độ trễ rat thấp.
e Thiết kế:
Thiết kế các thành phần chính trong CSDL MongoDB trong đề tài:
+ Database: có tên “bluetoothMesh”.
41
+ Collection: có tên “user”.
+ Document: mỗi collection có thê có nhiều document. Cụ thé trong nghiên
cứu này mỗi document đóng vai trò như một hệ thống với thông tin của
từng user và thông tin của Gateway (địa chỉ MAC) cũng như toàn bộ các
thiết bị được kết nối với nhau trong mạng Bluetooth mesh với Gateway đó. Phân cấp trong CSDL của hệ thống từ trên xuống:
+ Trong collection “user” chứa nhiều document có ý nghĩa là tài khoản người
dùng với “name”, “password” tương ứng và “_id” duy nhất dé định danh
các document.
+ Mỗi user có thé có chứa nhiều “home”. Mỗi “home” sẽ do 1 Gateway quản
lý với tên “name”, địa chỉ MAC “macAddr” của Gateway và danh sách các
thiết bi “device” có trong “home” đó.
+ “device”: chứa thông tin các device được provision trong mạng Bluetooth
mesh đã kết nối với Gateway. Có nhiều loại “device” khác nhau như
“temperature”, “light”, “fire” va “switch”.
+ Cuối cùng là “switch”: mỗi “switch” là 1 relay 4 kênh lưu trữ thông tin tên
“name” cua switch và trang thai “status” (bật: “on”, tắt: “of? ”) của các thiết
bị trong mỗi kênh của relay.
Cuối cùng, sau khi tạo thành công CSDL trên MongoDB | Atlas, ta sẽ có được một chuỗi kết nối đến CSDL tùy theo từng mục đích sử dụng với username, password
mà ta đã tạo:
MongoClientURI uri = new MongoClientURI(
"mongodb+srv: //bao:<password>@dbk1tn.y9mge.mongodb.net/<dbname>?retryWrites=true đi] Copy
MongoClient mongoClient = new MongoClient(uri);
MongoDatabase database = mongoClient.getDatabase("test");
1 TL L A aỡ3 m3 0 v af 8 a] D D m
are URL encoded
Hình 3.11. Connection string do MongoDB cung cấp dé kết nối đến CSDL
42
3.8. Thiết kế Server với Java
e Phan tích:
Trong quá trình thực hiện khóa luận, nhóm thực hiện nhận thấy Java là một ngôn ngữ hướng đối tượng, có cơ chế quản lý bộ nhớ (Garbage collector) giúp cho việc xây dựng Server ôn định hơn, không bị rò ri bộ nhớ và có thé dé dàng phát hiện
lỗi phát sinh trong chương trình [21]. Bên cạnh đó, Java đã là một ngôn ngữ có cộng
đồng lập trình viên nhiều kinh nghiệm và được hỗ trợ lập trình cho nhiều nền tảng. Chính vì vậy nhóm quyết định sử dụng Java làm ngôn ngữ chính để lập trình cho
Server.
Mục đích của Server chính là cầu nối cho quá trình truyền nhận dit liệu giữa ứng dụng người dùng (User App) và Gateway (thông qua giao thức WebSocket) dé quản lý tín hiệu từ các node cảm biến trong mạng mesh cũng như gửi tín hiệu điều khiến từ User App cho các thiết bị trong mang. Server phải được kết nối với cơ sở dữ liệu để có thể đồng bộ dit liệu với User App và có thé giao tiếp với User App thông qua giao thức. Cuối cùng Server phải luôn online dé có thé được kết nối từ xa thông qua một dia chỉ IP và Port cố định.
e Thiết kế:
Server được thiết kế với nền tảng chính là giao thức WebSocket và CSDL MongoDB. Đầu tiên ta sẽ tạo class “Server” được thêm thư viện WebSocket của Java
và chạy Server trên một port cố định (8080) dé lang nghe kết nối từ phía Client. Phía Server sẽ có những phương thức đề xử lý sự kiện như sau:
+ onStart(...): được gọi khi Server được chạy thành công.
+ onClose(WebSocket conn,...): được gọi khi kết nối giữa Client và Server
bị hủy.
+ onOpen(WebSocket conn,...): được gọi khi có Client kết nối thành công
đến Server với Socket là biến “conn”.
+ onMessage(WebSocket conn, String message): dùng dé giao tiếp truyền
nhận dữ liệu giữa Server với Client. Được gọi khi có Server nhận được
43