ĐẠI ĐẠI HỌ HỌC QUỐ QUỐC GIA TP. HỒ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆ N – ĐIỆ – ĐIỆ N TỬ BỘ MÔN VIỄ VIỄN THÔNG ---------------o0o---------------
LUẬN LUẬN VĂN TỐT TỐT NGHIỆP NGHIỆP ĐẠI ĐẠI HỌ HỌC
THU THẬP VÀ QUẢN LÍ DỮ LI LIỆU THÔNG QUA MẠNG LORA
GVHD: TS. Võ Quế Quế Sơn SVTH: Lê Đình Vương MSSV: 41204661
TP. HỒ HỒ CHÍ MINH, THÁNG 6 NĂM 2017
ĐẠI ĐẠI HỌ HỌC QUỐ QUỐC GIA TP. HỒ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆ N – ĐIỆ – ĐIỆ N TỬ BỘ MÔN VIỄ VIỄN THÔNG ---------------o0o---------------
LUẬN LUẬN VĂN TỐT TỐT NGHIỆP NGHIỆP ĐẠI ĐẠI HỌ HỌC
THU THẬP VÀ QUẢN LÍ DỮ LI LIỆU THÔNG QUA MẠNG LORA
GVHD: TS. Võ Quế Quế Sơn SVTH: Lê Đình Vương MSSV: 41204661
TP. HỒ HỒ CHÍ MINH, THÁNG 6 NĂM 2017
ĐẠI ĐẠI HỌ HỌC QUỐ QUỐC GIA TP. HỒ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆ N – ĐIỆ – ĐIỆ N TỬ BỘ MÔN VIỄ VIỄN THÔNG ---------------o0o---------------
LUẬN LUẬN VĂN TỐT TỐT NGHIỆP NGHIỆP ĐẠI ĐẠI HỌ HỌC
THU THẬP VÀ QUẢN LÍ DỮ LI LIỆU THÔNG QUA MẠNG LORA
GVHD: TS. Võ Quế Quế Sơn SVTH: Lê Đình Vương MSSV: 41204661
TP. HỒ HỒ CHÍ MINH, THÁNG 6 NĂM 2017
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
CỘ NG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
-----✩-----
Tự do – H Hạnh phúc. Độc lậ p – T
-----✩-----
Số: ______ /BKĐT
Điện – Điệ – Điện n tử tử Khoa: Điện Viễn Thông Bộ Môn: Viễ NHIỆ NHIỆM VỤ VỤ LUẬN LUẬN VĂN TỐT TỐT NGHIỆ NGHIỆP HỌ VÀ TÊN:
LÊ ĐÌNH VƯƠNG
MSSV: 41204661
NGÀNH:
ĐIỆN ĐIỆN TỬ TỬ - VIỄ VIỄN THÔNG
LỚP: DD12DV7
LIỆU THÔNG QUA M Ạ NG LORA Đề tài: THU THẬP VÀ QUẢ N LÍ DỮ LI Nhiệm vụ (Yêu cầu về nội dung và số liệu ban đầu): .......................................................................... .......................................................................................................... ....................................................................... .......................................................... ................... .......................................................................... ........................................................................................................... .................................................................... ......................................................... ...................... .......................................................................... .......................................................................................................... .......................................................................... ............................................ Ngày giao nhiệm vụ luận văn: ............................... Ngày hoàn thành nhiệm vụ: ................................... Họ và tên người hướ ng ng dẫn: ........................................................................ .............................................................................................................. .......................................... Nội dung và yêu cầu LVTN đã đượ c thông qua Bộ Môn.
Tp.HCM, ngày…... tháng….. năm 20 CHỦ NHIỆ CHỦ NHIỆM BỘ BỘ MÔN
PHẦ PHẦN DÀNH CHO KHOA, BỘ BỘ MÔN: Ngườ i duyệt (chấm sơ bộ):....................... Đơn vị:...................................................... Ngày bảo vệ : ........................................... ........................................... ......................................... Điểm tổng k ết: .........................................
Nơi lưu trữ luận văn: ............................... ...............................
NGƯỜI HƯỚ NG NG DẪ DẪN CHÍNH
LỜ I CẢM ƠN Xin chân thành gửi lờ i cảm ơn tớ i TS. Võ Quế Sơn đã tận tình giúp đỡ em trong suốt học k ỳ vừa qua. Những lờ i nhận xét, góp ý, hướ ng dẫn của thầy đã giúp em thấy đượ c khuyết điểm của mình để ngày càng khắc phục tốt hơn. Xin chân thành gửi lờ i cảm ơn tớ i toàn thể quý thầy cô trường Đạ i học Bách Khoa Thành phố Hồ Chí Minh đã giảng dạy, hướ ng dẫn và tạo mọi điều kiện, môi trườ ng học tậ p tốt cho em trong những ngày tháng học tậ p tại trườ ng. Xin kính chúc sức khỏe và chân thành cảm ơn.
Tp. H ồ Chí Minh , ngày 1 tháng 6 năm 2017
Sinh viên Lê Đình Vương
TÓM TẮT LUẬN VĂN Luận văn xây dự ng hệ thống IoT mà cốt lõi là công nghệ LoRa. Sử dụng chip SX1278 của hãng Semtech (hoạt động ở tần số 137Mhz đến 525MHz).
Đề tài này thực hiện thiết k ế một hệ thống gồm 3 thành phần chính: Node, Gateway và Server Backup. Node (Arduino) thu thậ p các thông số là số điện của công tơ điện (giả lậ p), nhiệt độ (cảm biến DS18B20), nồng độ khí CO (c ảm biến MQ7) về Gateway thông qua công nghệ LoRa. Gateway (Raspberry Pi) xử lí 3 tác vụ:
① Thứ nhất là lưu xuống Database ② Thứ hai là đưa dữ liệu lên nền tảng ThingSpeak bằng giao thức MQTT, tại ThingSpeak dữ liệu sẽ đượ c thể hiện bằng biểu đồ trên nền tảng Matlab. Dữ liệu tại đây đượ c xem xét với ngưỡ ng, nếu vượt ngưỡ ng sẽ có một thông báo trên tài khoản Twitter cá nhân của tôi. Đườ ng dẫn lên kênh riêng trên n ền tảng ThingSpeak: https://thingspeak.com/channels/262732. Đườ ng dẫn lên tài khoảng cá nhân Twitter của tôi: https://twitter.com/vuongvevan.
③ Thứ ba là truyền dữ liệu về Server Backup bằng công nghệ LoRa. Server Backup (Laptop) nhận dữ liệu từ Gateway. Tại đây ta có thể làm mọi điều vớ i dữ liệu nhận đượ c.
MỤC LỤC CHƯƠNG 1. TỔ NG QUAN ...........................................................................................1 1.1. Đặt vấn đề .............................................................................................................1 1.2. Tình hình nghiên cứu trong và ngoài nướ c ...........................................................2 1.3. Mục tiêu và nhiệm vụ của đề tài ........................................................................... 3 1.3.1. Mục tiêu của đề tài ..........................................................................................3 1.3.2. Nhiệm vụ của đề tài ........................................................................................4 CHƯƠNG 2. LÝ THUYẾT ............................................................................................5 2.1. Công Nghệ LoRa...................................................................................................5 2.1.1. Tổng quan về LoRa ........................................................................................ 5 2.1.2. Giao thức LoRaWAN ...................................................................................19 2.2. Nguyên lý truyền và nhận dữ liệu trong mạng LoRa .......................................... 21 2.2.1. Truyền dữ liệu ...............................................................................................21 2.2.2. Nhận dữ liệu trong mạng LoRa .................................................................... 22 CHƯƠNG 3. MÔ HÌNH THIẾT K Ế ............................................................................24 3.1. Kiến Trúc Đề Tài ................................................................................................24 3.2. K ết nối giữa Node và Gateway ...........................................................................25 3.2.1. Cấu trúc gửi dữ liệu từ Node tớ i Gateway....................................................25 3.2.2. Cấu trúc gửi ACK từ Gateway về Node ....................................................... 25 3.3. K ết nối giữa Gateway và Server .........................................................................26 3.4. Giao thức MQTT.................................................................................................27 3.5. Web Server: ThingSpeak TM ................................................................................29 3.6. Twitter .................................................................................................................29 3.7. Giớ i thiệu các Module, IC sử dụng trong Luận Văn...........................................30 3.7.1. Module LoRa SX1278 ..................................................................................30 3.7.2. Raspberry Pi..................................................................................................33 3.7.3. Cảm biến nhiệt độ DS18B20 IC ...................................................................35 3.7.4. Cảm biến khí CO (MQ7) ..............................................................................39 CHƯƠNG 4. THIẾT K Ế VÀ THI CÔNG PH Ầ N CỨ NG............................................43 4.1. Mô hình thiết k ế ..................................................................................................43 4.2. Tr ạm con (Node) ................................................................................................. 44
4.2.1. Mô hình phần cứng .......................................................................................45 4.2.2. Khối nguồn ...................................................................................................45 4.2.3. Khối cảm biến ...............................................................................................46 4.2.4. Khối vi điều khiển ........................................................................................46 4.2.5. Khối thu phát LoRa ......................................................................................47 4.2.6. Sơ đồ hoàn chỉnh ..........................................................................................47 4.3. Tr ạm thu phát dữ liệu (Gateway) ........................................................................49 4.3.1. Mô hình phần cứng .......................................................................................49 4.3.2. Sơ đồ hoàn chỉnh ..........................................................................................51 CHƯƠNG 5. GIẢI THUẬT VÀ LẬP TRÌNH .............................................................53 5.1. Giải thuật và chương trình trạm Node ................................................................53 5.1.1. Giải thuật.......................................................................................................53 5.1.2. Nguyên lí hoạt động......................................................................................53 5.1.3. Lắng nghe trướ c khi gửi ...............................................................................54 5.2. Giải thuật và chương trình Gateway ...................................................................54 5.2.1. Giải thuật.......................................................................................................54 5.2.2. Nguyên lí hoạt động......................................................................................54 5.2.3. Giải quyết đụng độ, chồng lấn ......................................................................55 5.2.4. Xử lí dữ liệu ..................................................................................................55 5.3. Giải thuật và chương trình Server Backup ..........................................................56 5.3.1. Giải thuật.......................................................................................................56 5.3.2. Nguyên lí hoạt động......................................................................................56 CHƯƠNG 6. KẾT QUẢ THỰ C NGHIỆM ..................................................................57 6.1. K ết quả thi công phần cứng ................................................................................57 6.1.1. Khối Node .....................................................................................................57 6.1.2. Khối Gateway ...............................................................................................57 6.1.3. Khối Server Backup ...................................................................................... 58 6.1.4. Đánh giá kế t quả thi công phần cứng ...........................................................58 6.2. K ết quả thi công phần mềm ................................................................................59 6.2.1. Hiển thị trên ThingSpeak ..............................................................................59 6.2.2. Cảnh báo .......................................................................................................59 6.3. Thí nghiệm đo khoảng cách truyền nhận của Module LoRa ..............................60
6.3.1. Thí nghiệm tại Q.10, thành phố Hồ Chí Minh..............................................60 6.3.2. Thí nghiệm Light of Sight (LOS) .................................................................61 6.3.3. Thí nghiệm đo độ tr ễ truyền nhận.................................................................63 6.4. Đánh giá kết quả hoạt động.................................................................................63 CHƯƠNG 7. KẾT LUẬN VÀ HƯỚ NG PHÁT TRIỂ N ..............................................64 7.1. K ết luận ...............................................................................................................64 7.2. Hướ ng phát triển .................................................................................................64 TÀI LIỆU THAM KHẢO .............................................................................................65 PHỤ LỤC ......................................................................................................................67
MỤC LỤC CÁC HÌNH ẢNH Hình 1.1. So sánh nhữ ng k ết nố i không dây có thể sử d ụng cho IoT
2
Hình 2.1. Biểu đồ so sánh giữ a LoRa và các chu ẩ n giao tiế p thông d ụng
6
Hình 2.2. Mô hình mạng LoRa
7
vật lí LoRa Hình 2.3. Quang phổ của l ớ p
10
trúc frame của LoRa Hình 2.4. C ấu
13
Hình 2.5. FIFO và Shift Register
18
Hình 2.6. Tiêu biể u cho mạng hình sao
20
Hình 2.7. Mô t ả nguyên lý truyề n d ữ liệu trong LoRa
21
Hình 2.8. Mô t ả nguyên lý nhận d ữ liệu trong LoRa
22
Hình 3.1. Kiến trúc đề tài luận văn
24
Hình 3.2. Giao thứ c MQTT
27
Hình 3.3. Module LoRa SX1278 của hãng XIAMEN
30
Hình 3.4. S ơ đồ khố i chip LoRa SX1278 của Semtech
30
Hình 3.5. S ơ đồ chân chip SX1278 của Semtech
31
Hình 3.6. S ơ đồ chân Module LoRa SX1278
32
Hình 3.7. Raspberry Pi 3 Model B
33
Hình 3.8. C ảm biế n nhiệt độ DS18B20
35
Hình 3.9. S ơ đồ bộ nhớ của DS18B20
38
Hình 3.10. C ảm biến đo nồng độ khí CO MQ-7
40
Hình 3.11. S ơ đồ khố i và nố i dây cảm biế n MQ-7
40
Hình 3.12. Độ nhạ y của cảm biế n MQ-7
41
Hình 3.13. Ảnh hưở ng của nhiệt độ và độ ẩm đố i vớ i cảm biế n MQ-7
41
Hình 4.1. Mô hình thiế t k ế đầy đủ của Luận Văn
43
Hình 4.2. Mô hình 3D của tr ạm Node thiế t k ế bằ ng Altium 13
44
Hình 4.3. Mô hình 3D tr ạm Gateway thiế t k ế bằ ng Altium 13
49
Hình 6.1. Tr ạm Node thi công thự c t ế
57
Hình 6.2. Tr ạm Gateway thi công thự c t ế
57
Hình 6.3. Tr ạm Server Backup thi công thự c t ế
58
Hình 6.4. K ế t quả hiể n thị trên ThingSpeak
59
Hình 6.5. K ế t quả cảnh báo trên Twitter
59
Hình 6.6. K ế t quả thí nghiệm t ại Q.10, tp.HCM
61
Hình 6.7. K ế t quả thí nghiệm LOS t ại xã Hòa Hiệ p, Xuyên M ộc, BRVT
62
MỤC LỤC CÁC BẢNG BIỂU Bảng 1. M ột số đặc điể m của công nghệ LoRa
5
Bảng 2. Độ nhạ y máy thu của LoRa (theo dBm) khi băng thông và hệ số tr ải phổ khác nhau 11 Bảng 3. Thông số kĩ thuật chip LoRa SX1272
31
Bảng 4. Thông số chân ra và chức năng
32
Bảng 5. Thông số kĩ thuật cảm biế n nhiệt độ DS18B20
35
Bảng 6. Tính toán độ phân giải theo R1 và R0
39
Bảng 7. M ối liên hệ giữ a nhiệt độ và t ỉ l ệ Rs/Ro
42
Bảng 8. Bảng k ết nố i các chân module vớ i Raspberry Pi
52
Bảng 9. K ế t quả thí nghiệm t ại Q.10, tp.HCM
60
Bảng 10. K ết quả thí nghiệm LOS t ại xã Hòa Hiệ p, Xuyên M ộc, BRVT
62
Bảng 11. K ết quả thí nghiệm đo độ tr ễ truyề n nhận
63
DANH SÁCH CÁC TỪ TỪ VIẾ VIẾT TẮ TẮT STT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
Từ T ừ viế viết tắ tắt ACK BW CAD CSS CR CRC DSSS FEC FECs FHSS FIFO FSK GFSK GMSK IoT LBT LoRa LPWANs LWT MOSI MISO MQTT MSK MSB OOK QoS RFID SCK SF SPI SR SS TCP
Ý nghĩa Acknowledgement Bandwidth Channel Activity Detection Chirp Spread Spectrum Coding Rate Cyclic Redundancy Check Direct Sequence Spread Spectrum Forward Error Correction Forward Error-corrections Codes Frequency Hopping Spread Spectrum First In First Out Frequency Shift Keying Gaussian Frequency Shift Keying Gaussian Minimum Shift Keying Internet of Things Listen Before Talk Long Range Low Power Wide Area Networks Last Will and Testament Master Output Slave Input Master Input Slave Output Message Queing Telemetry Transport Minimum Shift Keying Most Significant Bit On-Off Keying Quality of Service Radio Frequency Identification Serial Clock Spreading Factor Serial Peripheral Interface Shift Register Slave Select Transmission Control Protocol
Lê Đình Vương – Bách Bách Khoa University
CHƯƠNG 1. TỔNG QUAN 1.1. Đặt Đặt vấn vấn đề IoT (Internet of Things) là sự k ết n ối tất c ả các thiết b ị vớ i nhau, có khả năng trao đổ i thông tin, cung cấ p d ữ li ệu với con ngườ i mà không cần phải tương tác trự c ti ế p. Con
ngườ i có thể k ết nối vớ i tất cả các thiết bị tớ i mạng Internet thông qua mạng nội bộ. Trong những năm gần đây, IoT đang phát triển nhanh đế n chóng mặt. Theo sự tính toán
thông kê có đế n 50 triệu thiết b ị đượ c k ết n ối cho tới năm 2020. Con người đang biến tất cả các thiết bị trong đờ i sống hằng ngày như otô, thiế t bị sản xuất, dụng cụ trong nhà,
đồ m ặc,… đều có thể điều khiển, kiểm soát, thu thậ p d ữ li ệu ch ỉ bằng laptop hay điện thoại. Công nghệ IoT giúp cho con ngườ i sống tốt hơn, và đối phó vớ i vấn đề lớ n nhất
đang gặ p phải của thế giới đó là biến đổ i khí hậu, kiểm soát ô nhiễm, cảnh báo các vấn đề tự nhiên. Tuy nhiên, đòi hỏ i về công suất thấ p cho các thiết bị IoT không hề đơn giản, các thiết bị hiện nay dùng RFID, Bluetooth hay Wifi đề u là những công nghệ vớ i công suất thấp nhưng khoảng cách ngắn. Để đáp ứng đượ c công suất thấ p và khoảng cách xa, LoRa là một giải pháp tốt nhất tại thời điểm hiện nay. LoRa là công nghệ mạng không dây đượ c phát triển để tạo ra đượ c công suất thấ p (low power), mạng lướ i r ộng (LPWANs- Low Power Wide Area Networks) dùng cho các
ứng dụng Internet of Things. Công nghệ này hấ p dẫn vớ i khoảng cách xa, công suất tiêu thụ thấ p và việc truyền dữ liệu an toàn. Ưu điể m của mạng lưới đượ c xây dựng vớ i LoRa so vớ i mạng lướ i hi ện tại là việc phủ sóng lớ n. n. Vớ i khoảng cách xa và công su ất th ấ p, LoRa tự tin sẽ là ứng cử viên cho công nghệ thông minh trong hạ tầng dân dụng (chẳng
trường ,..) cũng như trong hạn như giám sát sứ c khỏe, đo lường thông minh, giám sát môi trường,..) các ứng dụng công nghiệ p. Công nghệ LoraWAN hướ ng ng tớ i mục tiêu là hoạt động các cảm biến dựa vào pin mà có thể ho ạt động v ớ i th ờ i gian lâu. Vớ i LoRaWAN, toàn bộ thành phố ho ặc m ột vùng sẽ
đượ c phủ bở i một vài tr ạm mà có thể k ết nối đến hàng ngàn các thi ết bị khác nhau.
1
Lê Đình Vương – Bách Bách Khoa University
Nhận thấy ưu điểm của LoRa so vớ i các công nghệ khác. Mục tiêu của đề tài tạo ra mạng k ết n ối vớ i các thiết b ị, thu thậ p d ữ li ệu, v ẽ đồ th t hị tr ạng thái dựa trên dữ li l iệu thu thậ p qua mạng LoRa.
ết nố i không dây có thể s Hình 1.1. So sánh nhữ ng ng k ế sử d d ụng cho IoT [5] 1.2. Tình hình nghiên cứ c ứ u trong và ngoài nướ c 1.2.1 Nghiên cứu cứu trong nướ c Qua tìm hiểu về tình hình nghiên cứu trong việc ứng dụng mạng LoRa khá thấ p, cho thấy đượ c việc ứng dụng vào công nghệ này chưa đượ c quan tâm nhiều. Tuy nhiên, hiện nay, việc ứng dụng mạng LoRa đang được xem xét, đầu tư vào các ứ ng dụng như c, quản lý bãi xe,... Đây là dấu hiệu khả quan trong việc nghiên đọc chỉ số đồng hồ nướ c, cứu mạng LoRa.
1.2.2. Nghiên cứu cứu ngoài nướ c Hiện nay có nhiều cá nhân, công ty nghiên cứu phát hành sản phẩm LoRa một hay nhiều kênh truyền dựa trên chipset của Semtech. Các công trình nghiên c ứu:
Đề tài “A DIY low -cost LoRa gateway” [4] của Giáo sư Phạm Công Đức, trường đại học Paul, Pháp sử dụng chip SX1276 của Semtech vớ i Gateway một kênh truyền.
2
Lê Đình Vương – Bách Khoa University
Module LoRaWan IXM-LPWA-800-16-K9 của Cisco[5] cho các ứng dụng cần công suất thấ p, diện tích phủ r ộng lớn như tracking vật thể, đo nướ c hay khí, các tòa nhà thông minh, đèn đường, giám sát môi trườ ng và nông nghiệ p thông minh. Các công trình thử nghiệm LoRaWAN tại Zaragoza và Paris, v ớ i Module LoRa SX1272 k ết hợ p vớ i Expansion Board của hãng Waspmote[6], [7]
1.3. Mục tiêu và nhiệm vụ của đề tài 1.3.1. Mục tiêu của đề tài Luận văn xây dựng hệ thống IoT mà cốt lõi là công nghệ LoRa. Sử dụng chip SX1278 của hãng Semtech (hoạt động ở tần số 137Mhz đến 525MHz).
Đề tài này thực hiện thiết k ế một hệ thống gồm 3 thành phần chính: Node, Gateway và Server Backup. Node (Arduino) thu thậ p các thông số là số điện của công tơ điện (giả lậ p), nhiệt độ (cảm biến DS18B20), nồng độ khí CO (cảm biến MQ7) về Gateway thông qua công nghệ LoRa. Gateway (Raspberry Pi) xử lí 3 tác vụ:
① Thứ nhất là lưu xuống Database ② Thứ hai là đưa dữ liệu lên nền tảng ThingSpeak bằng giao thức MQTT, tại ThingSpeak dữ liệu sẽ đượ c thể hiện bằng biểu đồ trên nền tảng Matlab. Dữ liệu tại đây đượ c xem xét với ngưỡ ng, nếu vượt ngưỡ ng sẽ có một thông báo trên tài khoản Twitter cá nhân của tôi. Đườ ng dẫn lên kênh riêng trên nền tảng ThingSpeak: https://thingspeak.com/channels/262732. Đườ ng dẫn lên tài khoảng cá nhân Twitter của tôi: https://twitter.com/vuongvevan.
③ Thứ ba là truyền dữ liệu về Server Backup bằng công nghệ LoRa. Server Backup (Laptop) nhận dữ liệu từ Gateway. Tại đây ta có thể làm mọi điều vớ i dữ liệu nhận đượ c.
3
Lê Đình Vương – Bách Khoa University
1.3.2. Nhiệm vụ của đề tài Vớ i các mục tiêu đề ra, luận văn đượ c chia thành 4 n ội dung: Nội dung 1: Tìm hiểu công nghệ LoRa và các mo dule, IC đượ c sử dụng trong luận văn. Nội dung 2: Giải thuật và phần cứng của Node, Gateway và Server Backup. Nội dung 3: K ết quả đạt đượ c. Nội dung 4: Hướ ng phát triển và tài liệu tham khảo.
4
Lê Đình Vương – Bách Khoa University
CHƯƠNG 2. LÝ THUYẾT 2.1. Công Nghệ LoRa 2.1.1. Tổng quan về LoRa a) Đặc điểm công nghệ LoRa được định nghĩa là Long Range (khoả ng cách xa), là một hệ thống giao tiế p không dây khoảng cách xa, tiêu th ụ năng lượ ng thấp đượ c phát triển bở i LoRa Alliance™. Công nghệ điều chế LoRa là sự k ế thừa của điều chế Chirp Tr ải Phổ (CSS – Chirp Spread Spectrum). Lớ p vật lý LoRa đượ c phát triển bở i Semtech cho khoảng cách xa, công suất thấ p và giao tiếp băng thông thấ p. Hoạt động trên băng tần ISM 433-, 868- hoặc 915-MHz, phụ thuộc vào từng khu vực triển khai. Khối lượ ng (gọi là payload) của mỗi đợ t truyền tải có thể đạt từ 2-255 byte, tốc độ data có thể đạt tớ i 50 Kbps. Công nghệ điều chế là một công nghệ độc quyền từ Semtech. Bảng 1. M ột số đặc điể m của công nghệ LoRa
Đặc điểm k ỹ thuật
Định nghĩa
Khoảng cách
Khoảng 2 km (nội thành) và > 10 km (LOS)
Băng tần
ISM 433MHz, 868MHz và 915 MHz
Chuẩn giao tiếp
IEEE 802.15.4g
Điều chế
LoRa Modulation: Điều chế tr ải phổ sử dụng xung dải băng tần FM. Tần số tăng hoặc giảm trên thờ i gian nhất định đượ c sử dụng để mã hóa dữ liệu khi
đượ c gửi. Topology
P2P
5
Lê Đình Vương – Bách Khoa University
Đặc điểm k ỹ thuật
Định nghĩa
Điện năng tiêu thụ mode
< 20 mA
Tx Điện năng tiêu thụ mode
< 0.005 mA
Standby Một mạng LoRa quản lí hàng ngàn node
Công suất
Data Rate
WIFI GSM CDMA Bluetooth Low Energy Zigbee, ZWave LoRa
NFC Đối diện (vài centimet)
Trong nhà (Vài chục mét)
Trong thành phố (Vài kilomet)
Range
Hình 2.1. Biểu đồ so sánh giữ a LoRa và các chuẩ n giao tiế p thông d ụng
6
Lê Đình Vương – Bách Khoa University
b) Kiến trúc mạng LoRa có cấu trúc mạng sao, bao gồm ba thiết bị khác nhau:
Hình 2.2 Mô hình mạng LoRa
c) Lớ p vật lý Điều chế LoRa là một công nghệ độc quyền của Semtech. Điều chế LoRa của Semtech giải quyết tất cả vấn đề liên quan đến các hệ thống DSSS để cho năng lượ ng tiêu thụ thấ p, thay thế mạnh mẽ cho các kĩ thuật truyền thông tr ải phổ truyền thống. Trong điều chế LoRa sự tr ải phổ đạt đượ c bằng cách tạo ra một tín hiệu Chirp mà liên t ục thay đổi tuyến tính về tần số. Một ưu điểm của phương pháp này là độ lệch thờ i gian và tần số là
tương đương nhau, giảm thiểu đ áng k ể độ ph ức t ạ p c ủa th ế k ế máy thu. Băng t ần c ủa Chirp tương đương với băng thông quang phổ của tín hiệu. Tín hiệu dữ liệu mong muốn
được băm nhỏ ở t ốc độ dữ liệu cao hơn và được đ iều chế lên tín hiệu Chirp - k ĩ thuật này đượ c gọi là điều chế CSS. Công nghệ điều chế LoRa là sự k ế thừa của điều chế CSS. Kĩ thuật điều chế LoRa sử dụng sóng mang không điều chế trong một FM Chirp, có sự tương đồng vớ i M-ary FSK. Vì v ậy, nó tr ải năng lượ ng trên một dải r ộng hơn. Trong kĩ thuật số truyền thông, CSS là một kĩ thuật phát tán sử dụng các xung Chirp điều biến tần số băng rộng để để mã hóa thông tin. Chirp là một tín hiệu hình sin có tần
7
Lê Đình Vương – Bách Khoa University
số tăng hoặc giảm theo thờ i gian. Giống như các phương pháp trả i phổ khác, CSS s ử dụng toàn bộ băng thông đượ c cấp phát để phát tín hiệu. Hơn nữa, bở i vì Chirp sử dụng một dải r ộng băng tần, CSS cũng kháng multi -path fading ngay cả khi hoạt động vớ i
năng lượ ng r ất thấ p. Tuy nhiên nó không giống như FHSS và DSSS vì nó không thêm bất kì mã giả ng ẫu nhiên nào vào tín hiệu để giúp phân biệt nhiễu trên kênh. Thay vào
đó nó d ựa vào tính chất tuyến tính của xung Chirp. Ngoài ra, CSS còn kháng hi ệu ứng Doppler (bở i vì tính tuyến tính giữa tần số và thờ i gian truyền), điển hình trong các ứng dụng radio di động.
CSS lý tưở ng cho các ứng dụng yêu cầu sử d ụng điện năng thấ p và cần t ốc độ dữ li ệu tương đối thấ p (1Mbits/s hoặc nhỏ hơn). LoRa vớ i cốt lõi là kĩ thuật CSS, vớ i sự biến đổi tuyến tính của tần số theo thời gian để mã hóa thông tin. Bở i vì sự tuyến tính của xung tr ải phổ, độ lêch tần số giữa các thiết bị thu và phát tương ứng với độ lệch thờ i gian, dễ dàng bị loại bỏ trong giải mã. Điề u này giúp cho giảm ảnh hưở ng của hiệu ứng Doppler. Độ lệch tần số giữa thu và phát có thể
đạt đến 20% băng thông mà không ảnh hưở ng hiệu suất mã hóa. Máy thu LoRa có thể cung cấp độ nhạy lên tớ i -148 dBm. Một số tính năng chính: Khả năng chống lại nhiễu cố ý và không cố ý - đặc điểm quan tr ọng đối vớ i
thông tin trong các vùng đông đúc như thành phố . Có khả năng loại bỏ hoặc giảm nhẹ ảnh hưở ng của truyền lan đa đườ ng (multi-path fading). Có khả năng chống lại hiệu ứng Doppler (độ lệch tần số giữa thu và phát có thể đạt tới 20% băng thông). Có thể chia sẻ cùng băng tần với các ngườ i dùng khác, nhờ tính chất tín hiệu giống như tạ p âm của nó. Cho mức độ riêng tư nh ất định nhờ tính chất c ủa điều chế tr ải ph ổ, ngườ i ngoài khó có thể đánh cắp đượ c dữ liệu vì không nắm đượ c sự thay đổi về tần số của tín hiệu.
8
Lê Đình Vương – Bách Khoa University
Thờ i gian sống c ủa kí tự LoRa dài hơn so vớ i công nghệ tr ải ph ổ nh ảy tần Frequency Hopping Spread Spectrum (FHSS), các l ỗi tạo bở i nhiễu có thể dễ dàng đượ c sửa thông qua việc sửa lỗi tiế p chuyển (Forward Error-correction Codes - FECs). Nhanh hơn điều chế truyền thông thườ ng (như FSK ) làm cho LoRa thích hợ p vớ i ứng dụng cần công suất thấ p và truyền tin vớ i khoảng cách dài. Một vài thông số cho việc tùy biến trong điều chế LoRa:
Băng thông (BW) Hệ số tr ải phổ (SF) Tỉ lệ mã hóa (CR)
Băng thông là thông số quan tr ọng nhất trong việc điều chế LoRa. Một symbol LoRa tạo ra 2SF Chirps, bao phủ toàn bộ băng thông tần s ố. Nó bắt đầu v ớ i một chuỗi chirp
tăng lên. Có 2SF trong một ký tự, một ký tự có thể mã hóa SF (bits). Spreading Factor (Hệ số trải phổ): SF có giá tr ị trong khoảng từ 6 đế n 12. SF = 6 là mode cho tốc độ truyền bit cao nhất. Trong khi đó hệ số tr ải phổ càng tăng dẫn đến độ nhạy máy thu càng tăng.
Coding Rate (Tốc độ mã hóa): Modem LoRa sử dụng Cyclic Error Coding để phát hiện và sửa lỗi. Error Coding thực hiện khi truyền tải trong không khí.
FEC – Forward Error Correction : Cải thiện độ tin cậy của kênh truyền khi có nhiễu r ất hiệu qu ả. Do đó, tốc độ mã hóa có thể thay đổi để đáp ứng v ới các điều ki ện khác nhau.
9
Lê Đình Vương – Bách Khoa University
Signal Bandwidth (Băng thông tín hiệu): Tăng băng thông dẫn tới tăng tốc độ dữ liệu, dẫn tớ i giảm thờ i gian truyền dẫn, giảm độ nhạy.
vật lí LoRa[16] Hình 2.3. Quang phổ của l ớ p Liên hệ giữa thờ i gian sống của một symbol (Ts) với băng thông và hệ số tr ải phổ:
2 = LoRa chứa mã hóa sửa lỗi. Code rate (CR) b ằng 4/(4+n), với n € {1,2,3,4}.
=
2
Ví d ụ: BW = 125 kHz, SF = 7, CR = 4/5 cho t ốc độ bit Rb = 5.5 kbps
Các thông số cũng ảnh hưở ng tới độ nhạy giải mã: Tăng băng thông làm cho độ nh ạy máy thu thấp hơn, trong khi đó tăng hệ s ố tr ải ph ổ sẽ tăng độ nh ạy máy thu. Giảm tốc
độ mã hóa giúp giảm tỉ lệ lỗi gói tin khi có sự ảnh hưở ng của nhiễu.
10
Lê Đình Vương – Bách Khoa University
Bảng 2. Độ nhạ y máy thu của LoRa ( dBm) khi băng thông và hệ số tr ải phổ khác nhau
SF
7
8
9
10
11
12
125 kHz
-123
-126
-129
-132
-133
-136
250 kHz
-120
-123
-125
-128
-130
-133
500 kHz
-116
-119
-122
-125
-128
-130
BW
Định Dạng Frame Vật Lý: Định dạng frame được xác đị nh và tiến hành theo thu và phát của Semtech. Băng thông và hệ số tr ải phổ là hằng số cho một frame. M ột frame đượ c bắt đầu vớ i một Preamble. Preamble bắt đầu vớ i một chuỗi hằng số bắt đầu gọi là upchirps đượ c tr ải trên toàn băng thông tần số. Hai kí tự cuối cùng đượ c giải mã ký tự đồng bộ (gọi là Sync Word). Sync Word có giá tr ị t ối đa 8 bytes, thường để phân biệt mạng LoRa khi sử d ụng cùng một
băng thông tần số. Một thiết bị đượ c cấu hình vớ i một Sync Word dừng việc lắng nghe việc vận chuyển nếu Sync Word không phù hợ p vớ i c ấu hình. Sync Word được đưa ra vớ i 2.25 downchirps, có độ dài 2.25 symbols. Sau Preamble, có một Header tùy chọn. Khi bật Header, Header này đượ c gửi đi vớ i tốc
độ mã hóa là 4/8. Điề u này chỉ ra r ằng khối lượ ng của Payload (theo bytes), t ỉ lệ mã hóa đượ c sử dụng cho cuối việc vận chuyển và liệu r ằng có hay không 16 bits CRC cho Payload có đượ c hiện diện cuối frame hay không. Kích thướ c của Payload được lưu tr ữ một byte, giớ i hạn kích thướ c của Payload tớ i 255 ký tự. Header đượ c tùy chọn để cho
phép đượ c tắt trong tình huống liệu r ằng có cần thiết hay không, ví dụ khi độ dài Payload, tỉ lệ mã hóa và CRC đã đượ c cấu hình đồng bộ ở cả máy phát và máy thu. LoRa có 2 định dạng gói tin: Expicit và I mplicit. E xplicit bao gồm 1 short Header ch ứa thông tin về s ố byte, Coding Rate và có thể có
CRC giành cho Header. I mplicit là chế độ gửi gói tin đi mà không có H eader.
11
Lê Đình Vương – Bách Khoa University
Preamble đượ c sử dụng để đồng bộ máy thu vớ i luồng dữ liệu đến. Preamble length có thể thay đổi tùy theo yêu cầu ứng d ụng. Độ dài của Preamble có th ể thay đổi từ 6 đế n 65535 bytes. Chiều dài Preamble phải đượ c c ấu hình giống nhau ở c ả máy thu và máy phát, máy thu sẽ thực hiện tiến trình nhận biết Preamble, với trườ ng hợ p không biết Preamble Length, máy thu c ần đượ c cấu hình Maximum Preamble Length. Chu ỗi giá tr ị của Preamble: 1010…
Explicit Header Mode: Là mode mặc định. Tại mode này Header cung c ấ p thông tin của Payload:
Độ dài của Payload. Bộ mã hóa sửa lỗi trướ c. Có hay không 16 bits CRC cho Payload. Sự hiện diện của CRC tại cuối Payload đượ c chọn tại máy thu thông qua bit RxPayloadCrcOn tại thanh ghi RegModemConfig1. Tại máy thu, bit RxPayloadCrcOn tại thanh ghi RegModemConfig1 không đượ c sử dụng và khi mà Payload đượ c nhận, máy thu kiểm tra bit CrcOnPayload trên thanh ghi RegHopChannel. Nếu bit
CrcOnPayload là ‘1’, máy thu sẽ kiểm tra IRQ Flag PayloadCrcError để kiểm tra CRC hợ p lệ. Nếu bit CrcOnPayload là ‘0’, nghĩa là không có CRC tạ i Payload.
Implicit Header Mode: Trong trườ ng hợ p Payload length, Coding Rate và CRC đượ c định sẵn hoặc biết trước, ngườ i ta có thể giảm thờ i gian truyền bằng cách gọi mode Implicit Header. Trong mode này Header s ẽ đượ c gỡ bỏ khói gói tin.
Payload: Có 3 định dạng cho Payload khác nhau, tùy thuộc vào từng ứng dụng mà sử dụng hợ p lí. Mỗi chế độ đều có ưu và nhược điểm riêng:
Fixed Length Packet Format: Kích thướ c Payload đượ c giớ i hạn t ớ i 2047 bytes. Có 2 bytes kiểm tra lỗi CRC. Varia ble Length Packet Format: Kích thướ c Payload tối đa là 255 bytes. Có 2 bytes kiểm tra lỗi CRC và nhiều ưu điểm khác. Đây là mode đượ c khuyến khích sử dụng vớ i những ứng dụng IoT.
12
Lê Đình Vương – Bách Khoa University
Unlimited Length Packet Format: Không giớ i hạn kích thướ c Payload. Không có kiểm tra lỗi CRC.
Gói tin LoRa bao gồm 3 phần tử : Preamble + Sync Word Header (+CRC) Payload (+Payload CRC)
Preamble
Sync
Header
Payload
CRC
(6 to
Word
(Explicit
(Up to
(2 bytes)
65535
(2.25
or
255
symbols)
symbols)
Implicit)
bytes)
CR = 4/8
CR = 4/(4+n)
trúc frame của LoRa Hình 2.4. C ấu Sự liên hệ giữa Spreading Factor (SF), Coding R ate (CR) và băng thông tín hiệ u (BW), thờ i gian gửi dữ liệu trong không gian của packet LoRa có thể được tính toán như dướ i
đây: T s
1
Rs
Thờ i hạn của packet LoRa là b ằng tổng của chuỗi Preamble và packet đượ c gửi đi. Độ dài của Preamble được tính toán như sau: T preamble
(n preamble 4.25)T sym
Trong đó n preamble là độ dài Preamble c ủa chương trình, đượ c lấy từ thanh ghi RegPreambleMsb
và RegPreambleLsb. Thờ i gian của Payload phụ thuộc vào chế độ
Header đượ c bật. Công thức dưới đây đưa ra số ký tự Payload:
(8 PL 4SF 28 16CRC 20IH ) ( C R 4), 0 4(SF 2D E )
n payload 8 max ceil
13
Lê Đình Vương – Bách Khoa University
Trong đó:
PL là số bytes của Payload (1 tớ i 255)
SF là Spreading Factor (6 t ớ i 12)
IH =0 khi header đượ c bật, IH =1 khi không có header hi ện diện
DE =1 khi LowDataRateOptimize=1
CR là coding rate (1 tương ứ ng vớ i 4/5, 4 là 4/8)
Thờ i gian của Payload: T payload
n payload T s
Thờ i gian trong không khí bằng tổng thờ i gian của Preamble và Payload T packet
Tpreamble T payload
d) Một số đặc điểm kĩ thuật của chip SX1276/77/78/79 Data Transmission Sequence (Trình tự truyền dữ liệu) Cấu hình thanh ghi tĩnh chỉ có thể đượ c thực hi ện tại Sleep mode, Standby mode ho ặc FSTX mode. LoRa FIFO chỉ đượ c ghi trong mode Standby. Truyền dữ liệu đượ c bắt đầu khi sending TX mode request. Sau khi truyền thành công, ngắt TxDone và module tr ở lại tr ạng thái Standby. Sau khi truyền có thể đặt vào Sleep mode hoặc ghi dữ liệu mới vào FIFO để truyền tiế p.
LoRa Transmit Data FIFO Filling (Ghi dữ liệu vào FIFO trong chế độ truyền) Để ghi dữ liệu vào FIFO, user c ần thực hiện: Set FifoPtrAddr or FifoTxPtrBase. Set Payloadlength bytes to the FIFO (RegFifo).
14
Lê Đình Vương – Bách Khoa University
Data Reception Sequence (Trình tự tiếp nhận dữ liệu) Bao gồm hai chế độ tiế p nhận đơn và liên tụ c. Hai chế độ này tương ứng với các trườ ng hợ p sử dụng khác nhau, quan tr ọng là hiểu đượ c sự khác biệt tinh tế giữa chúng.
Single Reception Operating mode (Chế độ hoạt động đơn) Trong chế độ này, modem tìm ki ếm preamble trong một thờ i gian nhất định. Nếu
preamble đượ c tìm thấy trong thờ i gian này, chip sẽ tạo RxTimeout interrupt và tr ở lại chế độ Standby. Độ dài của cửa sổ tiế p nhận (in symbols) được định nghĩa bở i thanh ghi RegSymbTimeout và nên trong khoảng từ 4 (thờ i gian tối thiểu để nhận đượ c preamble)
đến 1023 symbols. Cuối payload, RxDone interrupt đượ c tạo cùng vớ i interrupt PayloadCrcError nếu payload CRC không h ợ p lệ. Tuy nhiên, k ể cả khi CRC không hợ p lệ, dữ liệu vẫn đượ c
ghi vào FIFO data buffer để xử lí sau. Sau khi RxDone ngắt thì module quay tr ở lại chế độ Standby. Module cũng tự động tr ở lại chế độ Standby sau khi ngắt RxDone đượ c tạo ra. Vì thế, chế độ này nên chỉ đượ c dùng khi cửa sổ thời gian đến của gói đượ c biết. Trong trườ ng hợp khác, RX continous mode nên đượ c dùng. Trong chế độ RX single, low- power đạt đượ c b ằng cách tắt các khối PLL và RF ngay sau khi nhận được paket. Dòng lưu lượng như sau: Set FifoAddrPtr to FifoRxBaseAddr Thiết lậ p cấu hình thanh ghi tĩnh có thể thực hiện trong Sleep mode, Standby mode hoặc FSRX mode Single packet received operation đượ c tạo bằng cách chọn chế độ hoạt động RXSINGLE Máy thu chờ đợ i preamble hợ p l ệ. Ki ểm tra header h ợ p l ệ. Qúa trình tiế p nh ận gói bắt đầu. Khi quá trình tiế p nhận hoàn thành thì RxDone interrupt đượ c thiết lậ p. Module tr ở lại chế độ Standby để giảm điện năng tiêu thụ Thanh ghi tr ạng thái máy thu PayloadCrcError đượ c kiểm tra để xét tính toàn vẹn của gọi tin
15
Lê Đình Vương – Bách Bách Khoa University
Nếu packet payload hợ p lệ, tiến hành đọc FIFO (Payload Data Extraction). N ếu chế độ nhận cần đượ c kích hoạt, RXSINGLE operating mode cần đượ c chọn lại. Chú ý reser SPI pointer (FifoAddrPtr) ở vị trí cơ sở trong bộ nhớ (FifoRxBaseAddr)
Continuous Reception Operating Mode (Chế (Ch ế độ nh độ nhậận liên tụ tục) Trong mode tiế p nh ận liên tục, module quét kênh liên tục để tìm kiếm preamble. M ỗi
khi preamble đượ c phát hiện, module theo dõi nó cho đế n khi nhận đượ c preamble tiế p theo. Nếu chiều dài Preamble vượ t quá giá tr ị được đặt ra tại thanh ghi RegPreambleMsb và RegPreambleLsb thì preamble s ẽ bị bỏ đi và tìm kiế m preamble mớ i.i. Trong chế độ continuos RX, ngắt timeout không bao giờ x xảy ra và thiết bị không bao giờ trong trong chế độ Standby tự động Trong mode Sleep hoặc Standby, chọn RXCONT mode.
Đến khi header CRC h ợ p lệ thì RxDone interrupt đượ c set, module v ẫn còn trong RX LoRa Packet tế p theo. RXCONT mode để chờ RX Cờ PayloadCrcError ờ PayloadCrcError đượ c kiểm tra. Nếu packet đượ c tiế p nhận, đọc dữ liệu trong FIFO data buffer.
Bướ c 2 tới 4 đượ c lặ p lại. Payload Data Extraction from FIFO (Lấ (Lấy dữ dữ liệ liệu từ từ thanh thanh ghi FIFO) Để lấy dữ liệu nhận đượ c từ FIFO, user phải đảm bảo r ằng ValidHeader, PayloadCrcError, RxDone và RxTimeout interrupts trong tr ạng thái thanh ghi
ReglrqFlags không đượ c xác nhận để đảm bảo việc tiế p nhận gói tin thành công. Trong trườ ng ng hợ p có lỗi xảy ra, gói tin bị loại bỏ: RegRxNbBytes chỉ ra số bytes đượ c nhận cho đến nay. RegFifoAddrPtr là con tr ỏ động cho biết chính xác nơi mà module LoRa nhậ n dữ liệu được ghi đến đâu. Set RegFifoAddrPtr to RegFifoRxCurrentAddr. Sets FIFO pointer tại nơi nhận packet cuối cùng trên FIFO. Payload s ẽ được đọc ra bằng thanh ghi RegFifo, RegRxNbBytes. 16
Lê Đình Vương – Bách Bách Khoa University
Ngoài ra, còn có thể tr ỏ đến vị trí gói cuối cùng nhận đượ c, c, từ lúc bắt đầu gói tin hiện tại. Bằng cách thiết lậ p RegFifoAddrPtr đến RegFifoRxByteAddr tr ừ RegRxNbBytes. Các byte payload có th ể được đọc t ừ FIFO bằng cách đọc đị a chỉ RegFifo vớ i RegRxNbBytes lần.
Receive Timeout Operation (Điều (Điều hành thờ thờ i gian nhậ nhận) Trong chế độ LoRa Rx Single, ch ức năng timeout củ a máy thu có thể đượ c thực hiện để bên nhận có thể nghe trong khoảng thời gian xác định trướ c khi tạo ra một tín hiệu gián
đoạn để cho biết r ằng không nhận đượ c gói tin hợ p lệ. Thiết bị sẽ lậ p tức tr ở ở l lại chế độ ở llại chế độ Sleep hay xóa ngắt Standby ngay khi có ngắt. Sau đó, ngườ i dùng cần phải tr ở trướ c khi tr ở ở l lại chế độ Rx Single: T i meout = L oR aR xTi xT i meout x Tx. T x. Channel Activity Detection (Kiể (Ki ểm tra hoạt hoạt động động kênh truyề truy ền) Là mode kiểm tra xem đườ ng ng truyền có bận? Nếu bận thì delay 1 khoảng thờ i gian
random trướ c khi gửi gói tin trong mode Tx. Frequency Error Indicator (FEI) FEI đo lườ ng ng lỗi tần số giữa tần số trung tâm RF đượ c lậ p trình và tần số sóng mang của tín hiệu input được điề u chế tới bên thu. Khi FEI đượ c thực hiện, lỗi tần số được đo và k ết quả lưu vào FeiValue trong RegFei.
Automatic Restart when Packet Collision is Detected (Tự (T ự độ động ng khởi khởi động động lạ lại khi phát hiệ hiện nghẽ nghẽn) Trong chế độ nhận, SX1276/77/78/79 có thể phát hiện nghẽn và khởi động lại máy thu. Hiện tượ ng ng nghẽn đượ c phát hiện bở i sự gia tăng đột ngột cường độ tín hiệu nhận đượ c. c. Chức năng này rấ t hữu ích trong cấu hình mạng sao, nhiều node không đồng bộ cố gắng liên lạc định kì vớ i gateway. Chế độ dò nghẽn mạng đượ c kích hoạt bằng cách thiết lậ p bit RestartRxOnCollision thành 1. Quyết định khởi động lại máy thu dựa trên việc phát hiện sự thay đổi RSSI. Độ nhạy c ủa hệ thống có thể được điều chỉnh theo từng 1 dB bằng cách sử dụng thanh ghi RssiCollisionThreshold trong RegRxConfig.
17
Lê Đình Vương – Bách Bách Khoa University
FIFO
Hình 2.5. FIFO và Shift Register [1]
Trong các chế độ hoạt động, cả hai dữ liệu truyền và nhận đều được lưu trữ trong FIFO
(First In First Out). Nó đượ c truy cậ p thông qua giao diện SPI và cung c ấ p một số ngắt trong quản lí chuyển giao. Shift Register (SR) đượ c s ử d ụng để giao tiế p cho hai thi ết bị. Trong chế độ truyền nó lấy byte từ FIFO và xuất ra (MSB đầ u tiên) ở t tốc độ bit lậ p trình đến bộ điều chế. Tương tự như vậy, trong chế độ nh ận SR lấy từng bit từ b ộ giải
điều chế và viết chúng theo trình tự từng byte vào FIFO. Kích thướ c của FIFO đượ c cố định là 64 bytes. Khi độ lớn payload vượt quá kích thướ c FIFO (64 bytes), ngoài PacketSent trong Tx và PayloadReady hoặc CrcOk trong Rx, các c ờ ng ngắt FIFO sẽ đượ c sử dụng.
ới chế độ ế độ Tx : FIFO có thể được điền trướ c trong chế độ Sleep/Standby, nhưng phần V ớ còn lại của payload phải được điền tiếp vào FIFO trong khi đang truyề n ở ch chế độ Tx.
① Điền vào FIFO (điền trướ c trong chế độ Sleep/Standby hoặc tr ực tiế p trong chế độ Tx) cho đến khi FifoThreshold hoặc FifoFull đượ c thiết lậ p. ( tức là FIFO ② Trong Tx, đợ i FifoThreshold hoặc FifoEmpty đượ c thiết l ậ p (t gần như trống r ỗng).
③ Viết byte vào FIFO cho đế n khi Fifo Threshold hoặc FifoFull đượ c thiết lậ p.
18
Lê Đình Vương – Bách Khoa University
④ Quay lại bước 2 cho đến khi toàn bộ gói tin đã đượ c ghi vào FIFO (PacketSent sẽ kích hoạt khi bit cuối cùng của gói đượ c gửi đi). V ớ i chế độ Rx: FIFO không đượ c nh ận thêm dữ liệu trong suốt quá trình Rx để ngăn
chặn tràn FIFO.
① Bắt đầu đọc byte từ FIFO khi FifoEmpty đượ c xóa hoặc FifoThreshold đượ c thiết lậ p. ② Tạm dừng việc đọc FIFO nếu FifoEmpty kích hoạt trướ c khi tất cả các byte của gói tin đã được đọ c.
③ Tiế p tục bước 1 cho đế n khi PayloadReady hoặc CrcOk kích hoạt. ④ Đọc tất cả các byte còn l ại từ FIFO trong chế độ Rx hoặc Sleep/Standby. 2.1.2. Giao thứ c LoRaWAN Hệ thống LoRa chia 3 phần chính: Thiết b ị cuối (End-devices): Các cảm bi ến/cơ cấu chấp hành đượ c k ết nối thông ra giao tiế p LoRa tớ i một hoặc nhiều Gateway. Lora Gateway: Bộ tậ p trung dùng làm cầu nối từ các thiết bị cuối tớ i Server, nó là phần tử trung tâm của kiến trúc mạng. Lora NetServer: Server c ủa mạng điều khiển toàn bộ hệ thống (quản lý tài nguyên, kiểm soát truy cậ p, bảo mật,…).
19
Lê Đình Vương – Bách Khoa University
Hình 2.6. Tiêu biể u cho mạng hình sao.
Điểm khác biệt của mạng LoRa là việc hình dung 3 lớ p của thiết bị cuối, lớ p A (cho tất cả), lớ p B (cho Beacon) và lớ p C (cho việc nghe liên tục) Lớp A được định nghĩa là chế độ ban đầu của mạng LoRa và phải đươc hỗ tr ợ bở i các thiết bị LoRa. Trong mạng lớ p A, việc gửi đi luôn luôn đượ c bắt
đầu bở i các thiết bị cuối. Sau mỗi lần dữ liệu đượ c gửi tớ i Gateway, thiết bị cuối sẽ mở 2 cửa sổ tiế p nhận, chờ lệnh bất k ỳ hay gói dữ liệu đượ c tr ả về bở i Server. L ớ p A mục đích chính được hướ ng tớ i cho các ứng dụng giám
sát, nơi các dữ liệu đượ c sản suất bở i các thiết bị cuối, sau đó đượ c tậ p hợ p bở i tr ạm điều khiển. Lớp B đượ c giớ i thiệu dùng để uplink và downlink, được đồng bộ hóa vớ i Server bằng cách gửi gói dữ liệu broadcast bở i Gateway lớ p B, và có thể nhận dữ liệu hoặc gói lệnh trong những thờ i gian riêng biệt. Lớp B đượ c dử dụng cho các thiết bị cu ối cần nhận lệnh từ s ự điều khiển từ xa chẳng hạn
như chấ p hành, bật tắt hay cần cung cấ p dữ liệu cho ngườ i sử dụng. Lớp C được định định nghĩa thiết bị cuối không quá coi tr ọng về tiết kiệm
năng lượ ng, nó có thể duy trì cửa sổ tiế p nhận luôn mở . 20
Lê Đình Vương – Bách Khoa University
2.2. Nguyên lý truyền và nhận dữ liệu trong mạng LoRa Giao tiế p LoRa k ết h ợ p của 3 loại giao tiế p s ố: Thanh ghi tĩnh, thanh ghi trạ ng thái và data buffer FIFO. Tất cả đượ c k ết nối thông qua giao tiế p SPI.
2.2.1. Truyền dữ liệu Vào chế độ Stand-by
Khởi tạo trạng thái Tx
Viết data vào FIFO
Đưa vào mode Tx
Chờ cho cờ IRQ TxDone
Có
Có Tx mới?
Không
Chuyển qua mode mới
Hình 2.7. Mô t ả nguyên lý truyề n d ữ liệu trong LoRa
Các thanh ghi tĩnh có thể đượ c truy cậ p ở chế độ Sleep, Standby hoặc FSTX. 21
Lê Đình Vương – Bách Khoa University
FIFO LoRa có thể được điền trong chế độ Sleep/Standby và Tx. Việc vận chuyển dữ liệu đượ c bắt đầu bằng gửi yêu cầu chế độ TX. Chờ cho cờ ngắt TxDone, sau đó chuyển sang chế độ Standby.
2.2.2. Nhận dữ liệu trong mạng LoRa Vào chế độ Stand-by
Khởi tạo trạng thái Rx
Đưa vào mode Rx
RxTimeout
Chờ cờ ngắt Rx?
RxDone
Có
Cờ IRQ Payload CRC Error?
Không
Đọc data
Chuyển qua mode mới
Hình 2.8. Mô t ả nguyên lý nhận d ữ liệu trong LoRa
22
Lê Đình Vương – Bách Khoa University
Việc nhận dữ liệu trong mạng LoRa cờ CRC đóng vai trò quan trọ ng trong việc xác định dữ li ệu nh ận được có đúng hay không, giúp khắc ph ục tình tr ạng chồng l ấn hay xung
đột dữ liệu giữa hai hay nhiều thiết bị cùng lúc.
23
Lê Đình Vương – Bách Khoa University
CHƯƠNG 3. MÔ HÌNH THIẾT K Ế 3.1. Kiến Trúc Đề Tài
Hình 3.1. Kiến trúc đề tài luận văn
Đề tài này thực hiện thiết k ế một hệ thống gồm 3 thành phần chính: Node, Gateway và Server Backup. Node (Arduino) thu thậ p các thông số là số điện của công tơ điện (giả lậ p), nhiệt độ (cảm biến DS18B20), nồng độ khí CO (c ảm biến MQ7) về Gateway thông qua công nghệ LoRa. Gateway (Raspberry Pi) xử lí 3 tác vụ:
① Thứ nhất là lưu xuống Database ② Thứ hai là đưa dữ liệu lên nền tảng ThingSpeak bằng giao thức MQTT, tại ThingSpeak dữ liệu sẽ đượ c thể hiện bằng biểu đồ trên nền tảng Matlab. Dữ liệu tại đây đượ c xem xét với ngưỡ ng, nếu vượt ngưỡ ng sẽ có một thông báo trên tài khoản Twitter cá nhân của tôi. Đườ ng dẫn lên kênh riêng trên n ền tảng
24
Lê Đình Vương – Bách Khoa University
ThingSpeak : https://thingspeak.com/channels/262732. Đườ ng dẫn lên tài khoảng cá nhân Twitter của tôi: https://twitter.com/vuongvevan.
③ Thứ ba là truyền dữ liệu về Server Backup bằng công nghệ LoRa. Server Backup (Laptop) nhận dữ liệu từ Gateway. Tại đây ta có thể làm mọi điều vớ i dữ liệu nhận đượ c.
3.2. K ết nối giữ a Node và Gateway Xây dựng hai gói packet, một gói dữ li ệu đượ c g ửi từ node tới Server để g ửi data thu thập đượ c từ Node, và một gói đượ c g ửi ACK từ Server về Node để xác nhận đã nh ận
đượ c data. 3.2.1. Cấu trúc gử i dữ liệu từ Node tớ i Gateway Cấu trúc gói packet (10 bytes) đượ c ghi vào FIFO và g ửi tớ i Gateway như sau:
Địa chỉ
Địa chỉ node
Số điện
Khí CO
Nhiệt độ
Gateway
(1 byte)
(2 bytes)
(2 bytes)
(2 bytes)
(3 bytes)
Địa ch ỉ Gateway (3 bytes): tạo ra tớ i 224 địa chỉ d ữ li ệu, giúp hạn ch ế sai sót.
Địa chỉ node (1 byte): Do có 1 Node nên chỉ cần 1 byte. Số điện (2 bytes): Biểu thị số điện cần 2 bytes. Nhiệt độ (2 bytes): 1 byte cho nhiệt độ nguyên, 1 byte cho nhiệt độ phần thậ p phân. Khí CO (chiếm 2 byte dữ liệu): cũng giống như nhiệt độ và độ ẩm, 1 byte cho phần nguyên dương, 1 byte cho phầ n thậ p phân.
3.2.2. Cấu trúc gử i ACK từ Gateway về Node Địa chỉ node
Địa chỉ Gateway
ACK
(1 byte)
(3 bytes)
(1 bytes)
Địa chỉ node (chiếm 1 byte): địa chỉ node gửi tr ả ACK. 25
Lê Đình Vương – Bách Khoa University
Địa chỉ Server (chiếm 3 bytes): Địa chỉ của Server. Ack (chiếm 1 byte): quy định bit ACK tr ả về.
3.3. K ết nối giữ a Gateway và Server Cấu trúc gửi dữ liệu từ Gateway tớ i Server. Cấu trúc gói packet (10 bytes) đượ c ghi vào FIFO và g ửi tới Gateway như sau:
Địa chỉ
Địa chỉ
Số điện
Khí CO
Nhiệt độ
Server
Gateway
(2 bytes)
(2 bytes)
(2 bytes)
(1 byte)
(3 bytes)
Địa ch ỉ Gateway (3 bytes): tạo ra tớ i 224 địa chỉ d ữ li ệu, giúp hạn ch ế sai sót.
Địa chỉ Server (1 byte): Do có 1 Server nên ch ỉ cần 1 byte. Số điện (2 bytes): Biểu thị số điện cần 2 bytes. Nhiệt độ (2 bytes): 1 byte cho nhiệt độ nguyên, 1 byte cho nhiệt độ phần thậ p phân. Khí CO (chiếm 2 byte dữ liệu): cũng giống như nhiệt độ và độ ẩm, 1 byte cho phần nguyên dương, 1 byte cho phần thậ p phân.
26
Lê Đình Vương – Bách Khoa University
3.4. Giao thứ c MQTT
Hình 3.2. Giao thứ c MQTT [9]
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.
MQTT cũng là giao thức đượ c sử dụng trong Facebook Messager. MQTT theo mô hình Client-Server truyền thống, nghĩa là sẽ có 1 MQTT server hay còn gọi là broker làm trung gian gi ữ vai trò quản lí các k ết nối giữa các MQTT client. Giao thức MQTT bao gồm các định nghĩa Subscribe, Publish, QoS, Retain, Last Will and
Testament (lwt). Publish, Subscribe: Trong một h ệ th ống s ử d ụng giao thức MQTT, nhiều Node tr ạm (MQTT Client) k ết n ối t ớ i một MQTT Server (Broker). M ỗi client sẽ đăng kí một vài kênh (topic), ví dụ như “/client1/channel1”, “/client2/channel2”. Quá trình đăng kí này gọi là Subscibe, giống như chúng ta đăng kí nhậ n tin trên một kênh Youtube vậy. Mỗi 27
Lê Đình Vương – Bách Khoa University
Client sẽ nhận đượ c d ữ li ệu khi bất kì tr ạm nào khác gở i d ữ li ệu vào kênh đã đăng kí. Khi một Client gở i dữ liệu tới kênh đó, gọi là Publish.
QoS (Quality of Service): Ở đây có 3 tùy chọn: QoS0: Broker/Client sẽ gở i dữ liệu đúng 1 lần, quá trình gở i chỉ đượ c xác nhận bớ i giao thức TCP/IP.
QoS1: Broker/Client sẽ gở i dữ liệu vớ i ít nhất 1 lần xác nhận từ đầu kia, nghĩa là có thể nhiều hơn 1 lần xác nhận đã nhận đượ c dữ liệu. QoS2: Broker/Client đảm bảo khi gở i dữ liệu thì phía nhận chỉ nhận đượ c đúng 1 lần, quá trình này phải tr ải qua 4 bướ c bắt tay. Một gói tin có thể đượ c gở i ở bất kì QoS nào, và các Client có th ể Subscibe vớ i bất kì yêu cầu QoS nào. Có nghĩa là Client sẽ lựa chọn QoS tối đa mà nó có thể nhận tin.
Retain: Nếu Retain đượ c set bằng 1, khi gói tin đượ c publish từ Client, Broker phải lưu tr ữ gosin tin đó vớ i QoS, và nó sẽ đượ c gửi đến bất kì Client nào subscribe kênh trong
tương lai. Khi một Client k ết nối tớ i Broker và subscribe, nó s ẽ nhận đượ c gói tin cuối cùng có Retain bằng 1 trước đó. Và phải lưu gói tin này lại, nhưng hoàn toàn có thể hủy bất c ứ lúc nào. Khi publish một gói dữ li ệu đến Client, Broker phải set Retain = 1 nếu
gói đượ c gửi như là kết quả của việc subscribe mớ i của Client (Giống như tin nhắn ACK báo subscribe thành công). Retain phải bằng 0 nếu không quan tâm tớ i k ết quả của subscribe.
LWT: Gói tin LWT (last will and testament) không th ực sự biết đượ c Client có tr ực tuyến hay không, cái này do gói tin KeepAlive đả m nhận. Tuy nhiên gói tin LWT như
là thông tin điều gì sẽ xảy đến sau khi thiết bị ngoại tuyến.
28
Lê Đình Vương – Bách Khoa University
3.5. Web Server: ThingSpeak TM
ThingSpeak TM là nền tảng Internet of Thing cho phép ngườ i dùng thu thập và lưu trữ dữ liệu cảm biến trong đám mây, phát triể n các ứng dụng IoT. Nền tảng ThingSpeak TM IoT cung cấ p các ứng dụng cho phép phân tích, mô tả và xử lí dữ liệu s ử d ụng MATLAB. Dữ liệu cảm biến có thể gửi đến ThingSpeak TM từ Arrduino, Raspberry Pi, BeagleBone Black, và các phần cứng khác.
3.6. Twitter
Twitter là một dịch vụ mạng xã hội tr ực tuyến cho phép ngườ i sử dụng đọc, nhắn và cậ p nhật các mẫu tin nhỏ gọi là tweets, một dạng tiểu blog. Những mẫu tweet đượ c giớ i hạn tối đa 140 kí tự đượ c lan truyền trong phạm vi nhóm bạn c ủa ngườ i nhắn ho ặc có thể
được trưng rộng rãi cho mọi ngườ i. Thành lậ p t ừ năm 2006, Twitter đã trở thành một hiện tượ ng phổ bi ến toàn cầu. Những tweet có thể ch ỉ là dòng tin vặt cá nhân cho đế n những c ậ p nh ật th ờ i s ự t ại ch ỗ k ị p th ời và nhanh chóng hơn cả thông tin truyền thông chính thống. Twitter Inc. được đặ t ở San Francisco và có hơn 35 công ty trên khắ p thế giớ i. Trong phạm vi Luận Văn, tài khoản Twitter của tôi sẽ đượ c liên k ết v ớ i nền tảng ThingSpeak TM sử dụng như là một trung tâm thông báo khi các chỉ số vượt ngưỡ ng cho phép (Nhiệt độ, n ồng độ khí CO). Khi đó, một tweet ngắn sẽ được đăng lên ngay lậ p tức.
29
Lê Đình Vương – Bách Khoa University
3.7. Giớ i thiệu các Module, IC sử dụng trong Luận Văn 3.7.1. Module LoRa SX1278 Module LoRa của hãng XIAMEN sử dụng chip SX1278 vớ i công nghệ điều chế LoRa, module LoRa có thể đạt độ nhạy tớ i -148dBm.
Hình 3.3. Module LoRa SX1278 của hãng XIAMEN [12]
a) Sơ đồ khối
Hình 3.4. Sơ đồ khố i chip LoRa SX1278 của Semtech[1]
30
Lê Đình Vương – Bách Khoa University
Hình 3.5. Sơ đồ chân chip SX1278 của Semtech[1]
b) Thông số kĩ thuật Bảng 3. Thông số kĩ thuật chip LoRa SX1278
Tần số hoạt động
137 – 525 MHz
Cách điều chế
LoRa/FSK/GFSK/OOK/MSK/GMSK
Công suất phát
Có thể lên đến +20dBm
Độ nhạy
-111 đến -148 dBm
Cường độ dòng phát
120mA (+20dBm)
Cường độ dòng ở Standby
0.2uA
Chuẩn giao tiếp
SPI
Khoảng cách trao đổi
~2 km (Nội thành), >10 km (LOS)
Trở kháng anten
50 Ohm 31
Lê Đình Vương – Bách Khoa University
Nhiệt độ hoạt động
-20oC ~ 70oC
Nguồn cung cấp
1.8-3.7V
Độ nhạy tại mode 1
-136 dBm
Tốc độ truyền dữ liệu
0.18 – 37.5 kbps
Độ dài Packet
Tối đa 256 bytes
c) Thông số chân và chức năng
Hình 3.6. Sơ đồ chân Module LoRa SX1278[12] Bảng 4. Thông số chân ra và chức năng
Tên
Kiểu chân
Mô tả chức năng
PIN01
DIO03
Digital In/Out
PIN02
DIO04
Digital In/Out
PIN03
DIO05
Digital In/Out
PIN04
SCK
Xung clock
32
Lê Đình Vương – Bách Khoa University
Tên
Kiểu chân
Mô tả chức năng
PIN05
MISO
Dữ liệu ra SPI
PIN06
MOSI
Dữ liệu vào SPI
PIN07
NSS
Chọn chip SPI
PIN08
GND
Ground
PIN09
VDD
Nguồn cung cấ p
PIN10
RESET
Reset
PIN11
DIO00
Digital In/Out
PIN12
DIO01
Digital In/Out
PIN13
DIO02
Digital In/Out
PIN14
GND
Ground
3.7.2. Raspberry Pi Raspberry Pi là một máy tính đơn khối có kích thướ c nhỏ như chiếc thẻ ATM, đượ c phát triển bở i Qu ỹ Raspberry (nướ c Anh) vớ i mục tiêu khuyến khích học tậ p khoa h ọc
máy tính trong trườ ng học.
Hình 3.7. Raspberry Pi 3 Model B[13]
Raspberry Pi đượ c bắt đầu phát triển từ năm 2006, bản concept sớ m nh ất dựa trên vi điều khiển AVR Atmel ATmega644. Ngày 16 tháng 6 năm 2012, nhữ ng chiếc Raspberry 33
Lê Đình Vương – Bách Khoa University
Pi đầu tiên đượ c gửi đến tay ngườ i nhận. Đến ngày 22/5 hơn 20.000 chiếc đã đượ c bán ra. Ngày 16/7/2012, Quỹ Raspberry Pi thông báo có 4000 sản phẩm đượ c phân phối mỗi ngày và bắt đầu cho phép người dùng mua “máy tính nhỏ” này vớ i số lượ ng lớ n. Trong vòng 3 năm kể từ khi được bán ra, đã có hơn 5 triệ u chiếc Pi đã đượ c bán ra thị trườ ng (theo số liệu thống kê của trang chủ Raspberry Pi). Vậy điều gì làm nên thành công ngoài sức tưởng tượ ng của Raspberry Pi: Raspberry Pi có mức giá quá hấ p dẫn: Chỉ từ 25$ cho một chiếc bo mạch có thể làm hầu như mọi ứng dụng hằng ngày như lướ t web, lậ p trình,
xem phim HD đến những ý tưở ng mà bạn không ngờ đến như điều khiển robot, nhà thông minh. Một điều quan tr ọng là nó tiết kiệm điện và khả
năng chạy liên tục 24/24. Raspberry Pi chạy hệ điều hành Linux: 99% những thứ mà b ạn có thể
làm trên máy tính đề u có thể làm trên Window và quan tr ọng là tất cả đều miễn phí! Raspberry Pi có kích thướ c tí hon: Chỉ tương đương như một chiếc thẻ ATM và nặng chưa đầy 50 gram. Gắn vớ i chiếc tivi, bạn có thể biến nó thành một thiết bị giải trí thông minh trong phòng khách. Gắn vớ i màn hình và bàn phím, chu ột, b ạn có thể bi ến nó thành một chiếc máy tính
đúng nghĩa. Nhỏ gọn và tiện lợ i Cộng đồng Raspberry Pi phát triển r ất nhanh trên thế giớ i: Hầu hết những thắc mắc của bạn đều đượ c giải đáp rất nhanh và còn hơn thế nữa. Bạn có thể tìm thấy hang ngàn dữ án đã thực hiện và vố số ý tưở ng
độc đáo. Vớ i nh ững ưu điểm độc đáo trên, Raspberry đã vượ t khỏi biên giớ i v ủa trườ ng h ọc và tr ở thành thiết bị ưa thích của r ất nhiều người đam mê điện tử và lậ p trình. Sự thành công của nó đã mở đã một bướ c phát triển mớ i cho tin học: Đem máy tính và cả m hứng lập trình đến gần mọi người hơn bao giờ hết.
34
Lê Đình Vương – Bách Khoa University
Raspbery Pi sử d ụng chip Broadcom BCM2835 SoC (System on Chip) có ch ứa b ộ x ử lý ARM1176JZF-S 700 Mhz (có thể ép xung lên 1Ghz), GPU Video Core IV, và b ộ nhớ RAM 256 sau nâng cấ p lên 512MB. Nó không có ổ cứng hay SSD đi kèm mà sử dụng thẻ SD để lưu trữ dữ và khởi động hệ điều hành.
3.7.3. Cảm biến nhiệt độ DS18B20 IC
Hình 3.8. C ảm biế n nhiệt độ DS18B20[14]
DS18B20 là cảm biến (loại digital) đo nhiệt độ của hãng MAXIM với độ phân giải cao (12 bit). IC sử dụng giao tiế p 1 dây r ất gọn gàng, dễ lậ p trình và giao tiế p nhiều DS18B20 trên cùng 1 dây. IC còn có ch ức năng cảnh báo nhiệt độ khi vượt ngưỡ ng.
a) Thông số kĩ thuật Bảng 5. Thông số kĩ thuật cảm biế n nhiệt độ DS18B20
Nguồn
3 – 5.5V
Dải đo nhiệt độ
-55 đến +125 độ C (-67 đến 267 độ F)
Sai số
+-0.5 độ khi đo dải -10 đến 85 độ C
Độ phân giải
Ngườ i dung có thể chọn từ 9 – 12 bits
Chuẩn giao tiế p
1-Wire
Thờ i gian chuyển nhiệt độ tối đa
750ms (Khi chọn độ phân giải 12 bits)
35
Lê Đình Vương – Bách Khoa University
b) Tìm hiểu về các lệnh ROM liên quan đến DS18B20 READ ROM (33h) Cho phép đọc ra 8 byte mã đã khắ c b ằng laser trên ROM, bao gồm: 8 bit mã định tên linh kiện (10h), 48 bit số xu ất xưở ng, 8 bit kiểm tra CRC. L ệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu không sẽ xảy ra xung độ t trên bus do tất cả các thiết bị tớ cùng đáp ứng.
MATCH ROM (55h) Lệnh này đượ c gửi đi cùng vớ i 64 bits ROM tiế p theo, cho phép bộ điều khiển bus chọn ra chỉ m ột c ảm bi ến DS1820 cụ thể khi trên bus có nhiều cảm bi ến DS1820 cùng nối vào. Chỉ có DS1820 nào có 64 bits trên ROM trung khớ p vớ i chuỗi 64 bit vừa đượ c gửi tớ i mới đáp ứng lại các lệnh về bộ nhớ tiế p theo. Còn các cảm biến DS1820 có 64 bits ROM không trùng khớ p sẽ tiế p tục chờ một xung reset. Lệnh này đượ c sử dụng cả trong
trườ ng hợ p có một cảm biến một dây, cả trong trườ ng hợ p có nhiều cảm biến một dây. SKIP ROM (CCh) Lệnh này cho phép thiết bị điều khiển truy nhậ p thẳng đến các lệnh bộ nhớ của DS1820 mà không cần gửi chuỗi mã 64 bits ROM. Như vậy sẽ tiết kiệm đượ c thờ i gian chờ đợ i
nhưng chỉ mang hiệu quả khi chỉ có một cảm biến. SEARCH ROM (F0h) Lệnh này cho phép bộ điều khiển bus có thể dò tìm đượ c s ố lượ ng thành viên tớ đang
được đấu vào bus và các giá tr ị cụ thể trong 64 bits ROM của chúng bằng một chu trình dò tìm.
ALARM SEARCH (ECh) Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cả m biến DS1820 chỉ
đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo đượ c lớn hơn giá trị TH và nhỏ hơn giá trị TL là hai giá tr ị nhiệt độ cao nhất và nhiệt độ thấ p nh ất đã được đặt trên thanh ghi trong bộ nhớ của cảm biến.
36
Lê Đình Vương – Bách Khoa University
Sau khi thiết b ị ch ủ (thườ ng là một vi điều khiển) s ử d ụng các lệnh ROM để định địa chỉ cho các cảm bi ến một dây đang được đấu vào bus, thiết bị ch ủ sẽ đưa ra các lệ nh chức năng DS1820. Bằ ng các lệnh chức năng thiết b ị ch ủ có thể đọc ra và ghi vào b ộ nhớ nháp (scratchpath) của cảm biến DS1820. khở i tạo quá trình chuyển đổi giá tr ị nhiệt
độ đo được và xác đị nh chế độ cung cấp điện áp nguồn. Các lệnh chức năng có thể đượ c mô tả ngắn gọn như sau:
WRITE SCRATCHPAD (4Eh) Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên đượ c ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte thứ hai đượ c ghi vào thanh ghi TL (byte 3 của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhấ t và k ế tiế p là nh ững bit có ý nghĩa giảm d ần. Cả hai byte này phải được ghi trướ c khi thiết bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất hiện.
READ SCRATCHPAD (BEh) Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit
có ý nghĩa nhấy của byte 0 và tiế p tục cho đến byte rhứ 9 (byte 8 - CRC). Thi ết bị chủ có thể xuất ra một xung reset để làm dừng quá trình đọc bất k ỳ lúc nào nếu như chỉ có một phần của dữ liệu trên bộ nhớ nháp cần được đọc.
COPYSCRATCHPAD (48h) Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ EEPROM. Nếu cảm biến đượ c sử dụng trong chế dộ cấ p nguồn l bắt đầu việc đo.
CONVERT T (44h) Lệnh này khởi động một quá trình đo và chuyển đổ i giá tr ị nhiệt độ thành số (nhị phân). Sau khi chuyển đổi giá tr ị k ết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong bộ nhớ nháp Thờ i gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển
đổi nếu thực hiện lệnh đọc thì các giá tr ị đọc ra đều bằng 0.
37
Lê Đình Vương – Bách Khoa University
READ POWER SUPPLY (B4h) Một lệnh đọc tiế p sau lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấ p nguồn như thế nào, giá tr ị đọc đượ c bằng 0 nếu cấ p nguồn bằng chính đườ ng dẫn dữ liệu và bằng 1 nếu cấ p nguồn qua một đườ ng dẫn riêng.
c) Cách cấu hình độ phân giải cho DS18B20
Hình 3.9. S ơ đồ bộ nhớ của DS18B20
Các byte thứ 5 của b ộ nh ớ đệm có chức năng đăng ký cấ u hình (config) cho ds18b20,
và các bít đượ c tổ chức như sau:
Các bit từ 0 đến 4 luôn được đọc giá tr ị là 1, bít s ố 7 luôn được đọc giá tr ị là 0. Cấu hình
độ phân giải cho ds18b20 đượ c quyết định bở i R1 và R0.
38
Lê Đình Vương – Bách Khoa University
Bảng 6. Tính toán độ phân giải theo R1 và R0
R1
R0
Độ phân giải
Thờ i gian chuyển nhiệt tối đa
0
0
9 bits
93.75 ms (tconv /8)
0
1
10 bits
187.5 ms (tconv /4)
1
0
11 bits
375 ms (tconv /2)
1
1
12 bits
750 ms (tconv)
d) Đọc nhiệt độ Khi bắt đầu chuyển đổi nhiệt độ thì chân DQ sẽ đượ c kéo xuống mức thấ p và khi chuyển
đổi xong thì ở m ức cao. Như vậ y ta sẽ căn cứ vào hiện tượng này để xác định khi nào chuyển đổi xong nhiệt độ. Lưu ý luôn phải dùng một điện tr ở tầm 4.7k tr ở lên vào chân DQ treo lên nguồn.
3.7.4. Cảm biến khí CO (MQ7) MQ7 là cảm bi ến bán dẫn, đượ c làm từ SnO2, một v ật liệu cảm bi ến có tính dẫn th ấ p trong không khí sạch. Cảm biến MQ7 nhạy cảm vớ i khi CO. Nó là cảm biến có chi phí thấ p, thích hợ p cho các ứng dụng để phát hiện khí trong nhà, khu công nghiệ p. Cảm biến MQ7 có thể phát hiện khí CO tậ p trung ở những nơi khác nhau từ 10 đến 1000ppm. Cảm ứng này với độ nh ạy cao và thời gian đáp ứng nhanh. Tín hiệu ngõ ra dạng Analog và Digital. Cảm biến có thể hoạt động đượ c ở nhiệt độ từ khoảng -10 đến 50oC và tiêu thụ dòng khoảng 150mA tại 5V. Thông số kĩ thuật:
Điện áp cung cấp: 3 đến 5V DC. Sử dụng chip so sánh LM393 và MQ7. Tín hiệu Analog từ 0 đến 5V. Dải phát hiện từ 10 đến 1000ppm. Công suất tiêu thụ: Khoảng 350mW.
39
Lê Đình Vương – Bách Khoa University
Hình 3.10. C ảm biến đo nồng độ khí CO MQ-7 [15]
Sơ đồ k ết nối vớ i cảm biến: Trong đó Rs là điệ n tr ở của cảm biến MQ7 khi có sự thay đổi môi trườ ng. RL là điện tr ở đượ c thêm vào.
Hình 3.11. Sơ đồ khố i và nố i dây cảm biế n MQ-7 [15]
Ta có: Rs=RL*(5-Vout)/Vout
40
Lê Đình Vương – Bách Khoa University
Hình 3.12. Độ nhạ y của cảm biế n MQ-7 [15]
Dựa vào bảng đặc điểm độ nhạy đượ c cho bở i datasheet MQ-7, Ta có: ppm (CO) = a*(Rs/Ro)^b Sử dụng công cụ Excel, ta tính đượ c hàm: ppm = 86.358(Rs/Ro)-1.465
Hình 3.13. Ảnh hưở ng của nhiệt độ và độ ẩm đố i vớ i cảm biế n MQ-7 [15]
Tỉ số Rs/Ro được điều chỉnh phụ thuộc vào nhiệt độ vào độ ẩm tại môi trường được đưa
ra như hình trên. Để xác định phương trình toán họ c của hai đườ ng cong, sử dụng công cụ Excel để tính đượ c:
41
Lê Đình Vương – Bách Khoa University
Bảng 7. M ối liên hệ giữ a nhiệt độ và t ỉ l ệ Rs/Ro
Ta có:
Rs/Ro@85%RH = -0.111*ln(temp) + 1.1686
Rs/Ro@60.5%RH = -0.123*ln(temp) + 1.2831
Rs/Ro@33%RH = -0.135*ln(temp) + 1.3975
Công thức chung: Rs/Ro = a*ln(temp) + b
(1)
A và b liên hệ tuyến tính theo độ ẩm vớ i nhau: Ta có:
0.33
0.88
A
-0.135
-0.111
B
1.3975
1.1686
A= 0.0436*RH-0.1494
(2)
B = -0.416 *RH+1.535 K ết hợp phương trình (1) và (2), ta được phương trình Rs/Ro theo nhiệt độ và độ ẩm: Rs/Ro = (0.0436*RH-0.1494) * ln(temp) +(-0.416 *RH+1.535) *Tính hiệu chuẩn Ro: Ví dụ tại điều kiện phòng bình thườ ng: RH = 85%, nhiệt độ: 30oC, CO = 30ppm
Điện tr ở Rs tính đượ c là: Rs = 26.15k Ta có công thức: ppm (CO) = 86.358(Rs/Ro)-1.465
Ro = 10.2
42
Lê Đình Vương – Bách Khoa University
CHƯƠNG 4. THIẾT K Ế VÀ THI CÔNG PHẦN CỨ NG 4.1. Mô hình thiết k ế
Hình 4.1. Mô hình thiế t k ế đầy đủ của Luận Văn
43
Lê Đình Vương – Bách Khoa University
Mô hình của luận văn gồm: Một tr ạm thu dữ liệu thu thậ p dữ liệu (Gateway) từ các tr ạm con (Node). Sau khi nhận dữ liệu từ các node, Gateway s ẽ lưu dữ liệu vào Database (file .csv). D ữ liệu từ Database sẽ đượ c cậ p nhật lên kênh riêng của tôi trên nền tảng ThingSpeak TM thông qua giao thức MQTT. ThingSpeak TM sử dụng MATLAB xử lí dữ liệu và vẽ biểu đồ. Nếu dữ liệu thu thập được vượt ngưỡ ng cho phép, một tweet sẽ đượ c cậ p nhật lên Twitter nhằm mục đích cảnh báo.
Node dùng để thu thậ p dữ liệu thông số điện k ế (giả lậ p), các c ảm biến nhiệt độ và khí CO. Mã hóa sau đó đóng gói dữ liệu và truyền về Gateway thông qua mạng LoRa. Server dùng để backup dữ li ệu t ừ Gateway. Vớ i giả sử trườ ng h ợ p t ại Gateway không có k ết nối Internet/3G, thì vẫn còn cách g ửi dữ liệu về Server (Laptop) thông qua mạng LoRa.
4.2. Trạm con (Node)
Hình 4.2. Mô hình 3D của tr ạm Node thiế t k ế bằ ng Altium 13
44
Lê Đình Vương – Bách Khoa University
4.2.1. Mô hình phần cứ ng
4.2.2. Khối nguồn
Nguồn vào 5V DC (Cổng micro USA) cấ p nguồn cho vi xử lí và các c ảm biến. Ngõ vào là nguồn pin dự phòng, tụ lọc nguồn C1=10uF. Khối giảm áp xuống 3.3V DC để cấ p nguồn cho Module LoRa. Ngõ ra vớ i tụ lọc C2=10uF, C3=100nF giúp cải thiện thời gian đáp ứng ngõ ra.
45
Lê Đình Vương – Bách Khoa University
4.2.3. Khối cảm biến
Cả hai cảm biến MQ7 và DS18B20 đều đượ c cấ p nguồn 5V DC. Cảm biến nồng độ khí CO (MQ7) vớ i ngõ ra Analog nối vào chân A0 của vi điều khiển. Cảm biến nhiệt DS18B20 vớ i ngõ ra Digital nối vào chân Digital 2 của vi điều khiển.
4.2.4. Khối vi điều khiển
46
Lê Đình Vương – Bách Khoa University
Cấ p nguồn 5V DC vớ i tụ lọc nguồn C4 = 100nF cho vi điều khiển ATMeGa328. Sử dụng thạch anh 16MHz tạo tần số dao động cho vi điều khiển.
4.2.5. Khối thu phát LoRa
4.2.6. Sơ đồ hoàn chỉnh Sơ đồ Schematic hoàn chỉnh:
47
Lê Đình Vương – Bách Khoa University
Mạch PCB 2 lớ p hoàn chỉnh: Lớ p Top:
Lớ p Bottom:
48
Lê Đình Vương – Bách Khoa University
4.3. Trạm thu phát dữ liệu (Gateway)
Hình 4.3. Mô hình 3D tr ạm Gateway thiế t k ế bằ ng Altium 13
4.3.1. Mô hình phần cứ ng
Chức năng của từng khối của tr ạm thu dữ liệu: Khối điều khiển trung tâm: Dùng Raspberry Pi làm bộ điều khiển và xử lý dữ liệu. Khối này có nhiệm v ụ nhận các thông tin từ tr ạm con, xử lý các
49
Lê Đình Vương – Bách Khoa University
thông tin thu nhận được, qua đó lưu dữ liệu vào database, hiển thị lên web và thực hiện các cảnh báo nếu quá ngưỡng đượ c cài đặt trướ c. Khối nguồn 5VDC: Đượ c cung cấ p từ adapter chuyển đổi điện áp 220VAC sang 5VDC. Khối nguồn 3.3VDC: Đượ c gi ảm áp từ khối nguồn 5V xuống 3.3V dùng IC giảm th ế c ố định LM1117-3.3V. Dùng để cung cấ p cho khối thu phát tín hiệu LoRa. Khối thu phát tín hiệu LoRa: Dùng để thu phát tín hiệu qua mạng LoRa, tần số 433Mhz. Khối này dùng module SX1278, sử dụng giao tiế p SPI. Khối bàn phím: Dùng điều điều khiển kh ối điều khiển trung tâm, có ch ức
năng tắt nguồn, khởi động lại. Khối hiển thị: dùng Led để hiển thị, hiển thị sự có nguồn và đèn tín hiệ u tr ạng thái của khối trung tâm.
50
Lê Đình Vương – Bách Khoa University
4.3.2. Sơ đồ hoàn chỉnh Sơ đồ Schematic hoàn chỉnh:
Mạch PCB hoàn chỉnh: Lớ p top:
51
Lê Đình Vương – Bách Khoa University
Lớ p Bottom:
Module LoRa theo chuẩn giao tiế p SPI (Serial Peripheral Interface): Các chân SCK, MISO, MOSI c ủa LoRa (tương ứng v ới pin 4, 5, 6) đượ c k ết nối chung tớ i chân SPI c ủa Raspberry Pi.
Chân SS (pin 7) dùng để chọn module giao tiế p nên sẽ k ết n ối vào 2 chân GPIO của Raspberry Pi Ngoài ra Reset (Pin 10) sẽ đượ c k ết nối v ới GPIO dùng để Reset module LoRa Bảng 8. Bảng k ết nố i các chân module vớ i Raspberry Pi
Khối thu phát LoRa
Raspberry Pi
SCK (pin 4)
GPIO11 (pin 23)
MISO (pin 5)
GPIO9 (pin 21)
MOSI (pin 6)
GPIO10 (pin 19)
SS0 (pin 7)
GPIO8 (pin 24)
3.3V (pin 9)
3.3V
GND (pin 8)
GND 52
Lê Đình Vương – Bách Khoa University
CHƯƠNG 5. GIẢI THUẬT VÀ LẬP TRÌNH 5.1. Giải thuật và chương trình trạm Node 5.1.1. Giải thuật
5.1.2. Nguyên lí hoạt động Chương trình khởi động, thực hiện bật và cấu hình các thông số cho Module LoRa. Sau đó đọc dữ liệu từ cảm biến. Module LoRa sẽ ki ểm tra đườ ng truyền có bận hay không nhờ chế độ CAD (Channel Activity Detection), nếu đườ ng truyền không bận, thực hiện gửi dữ liệu về Gateway. Thực hiện lặ p lại đọc cảm biến.
53
Lê Đình Vương – Bách Khoa University
5.1.3. Lắng nghe trướ c khi gử i Để tránh quá trình xung đột hay va chạm vớ i các tín hiệu gửi cùng lúc về Server. Trướ c khi gửi đi, Node sẽ kiểm tra xem hiện giờ đang có kênh truyền nào đang hoạ t động dựa vào chế độ CAD. Kĩ thuật này gọi là lắng nghe trướ c khi gửi. Khi có kênh truyền đang hoạt động, Node sẽ thực hiện delay 1 khoảng thờ i gian, sau
đó tiế p tục kiểm tra. Nếu kênh truyền không bận, gói tin sẽ đượ c gửi đi. 5.2. Giải thuật và chương trình Gateway 5.2.1. Giải thuật
5.2.2. Nguyên lí hoạt động Khối trung tâm sẽ nhận data từ node, đồng thờ i hiển thị nháy led khi có packet đượ c truyền tớ i. 54
Lê Đình Vương – Bách Khoa University
Gateway luôn kiểm tra xem có d ữ liệu nào đượ c gửi tới, khi có packet đượ c gửi tớ i Gateway sẽ ki ểm tra xem có ph ải đượ c g ửi t ừ node tớ i trung tâm hay không? Nếu sai, sẽ ti ế p t ục ki ểm tra dữ li ệu. N ếu đúng, sẽ t ạo ra 2 thread song song, 1 thread dùng để send ACK tớ i node vừa gửi data, 1 thread sẽ gi ả mã sau đó lưu dữ li ệu vừa nhận đượ c vào database. Dữ liệu tiế p tục đượ c gửi tớ i Server Backup. Sau khi hoàn thành, Gateway sẽ tiế p tục rơi vào trang thái chờ dữ liệu tiếp theo đượ c gửi tớ i.
5.2.3. Giải quyết đụng độ, chồng lấn Việc đụng độ giữa hai hay nhiều node cùng một lúc khó xảy ra, do trướ c khi gửi dữ liệu tới Server, node đã thực hiện việc LBT (listen-before-talk) để kiểm tra xem liệu có kênh truyền nào đang hoạt động hay không?
Khi đụng độ hay chồng lần dẫn tớ i sai dữ liệu, việc kiểm tra CRC là vô cùng quan tr ọng ở bên phía Server, nếu Server kiểm tra CRC sai, vi ệc tiế p nhận dữ liệu cũng như gử i ACK về node không đượ c diễn ra. Trong chế độ nhận, SX1276/77/78/79 có thể phát hiện nghẽn và khởi động lại máy thu. Hiện tượ ng nghẽn đượ c phát hiện bở i sự gia tăng đột ngột cường độ tín hiệu nhận đượ c. Chức năng này rấ t hữu ích trong cấu hình mạng sao, nhiều Node không đồng bộ cố gắng liên lạc định kì vớ i Gateway. Chế độ dò nghẽn mạng đượ c kích hoạt bằng cách thiết lậ p bit RestartRxOnCollision thành 1. Quyết định khởi động lại máy thu dựa trên việc phát hiện sự thay đổi RSSI. Độ nhạy c ủa hệ thống có thể được điều chỉnh theo từng 1 dB bằng cách sử dụng thanh ghi RssiCollisionThreshold trong RegRxConfig.
5.2.4. Xử lí dữ liệu Sau khi dữ liệu được lưu vào database, Gateway sẽ cậ p nhật dữ liệu lên nền tảng ThingSpeak TM thông qua giao thức MQTT (Mở port 1883, vớ i chế độ useUnsecuredTCP
đảm b ảo sử dụng tài nguyên hệ thống ít nhất). ThingSpeak TM sẽ hiển thị d ữ liệu nhận được dướ i dạng biểu đồ. Truy cập vào địa chỉ https://thingspeak.com/channels/262732 để theo dõi k ết quả. ThingSpeak TM sẽ đồng thờ i kiểm tra xem d ữ liệu nhận được có vượt ngưỡ ng cho phép hay không. Nếu vượt ngưỡ ng, một cảnh báo ngắn sẽ được đăng lên Twitter của tôi. 55
Lê Đình Vương – Bách Khoa University
5.3. Giải thuật và chương trình Server Backup 5.3.1. Giải thuật
5.3.2. Nguyên lí hoạt động Khối Server sẽ nhận dữ liệu từ Gateway, đồng thờ i hiển thị nháy led khi có packet đượ c truyền tớ i. Server luôn kiểm tra xem có dữ liệu nào đượ c gửi tới, khi có packet đượ c gửi tớ i Server sẽ kiểm tra xem có ph ải đượ c gửi từ Gateway tớ i Server hay không? Nếu sai, sẽ tiế p tục kiểm tra xem có dữ liệu tớ i hay không. Nếu đúng, tổ chức lưu dữ liệu vào file Exel. Sau
đó tiế p tục vào chế độ chờ dữ liệu.
56
Lê Đình Vương – Bách Khoa University
CHƯƠNG 6. KẾT QUẢ THỰ C NGHIỆM 6.1. K ết quả thi công phần cứ ng 6.1.1. Khối Node
Hình 6.1. Tr ạm Node thi công thự c t ế
6.1.2. Khối Gateway
Hình 6.2. Tr ạm Gateway thi công thự c t ế
57
Lê Đình Vương – Bách Khoa University
6.1.3. Khối Server Backup
Hình 6.3. Tr ạm Server Backup thi công thự c t ế
6.1.4. Đánh giá kết quả thi công phần cứ ng Node: Khối nguồn hoạt động tốt, khối giảm áp từ 5V xuống 3.3V ổn định. Nguồn cung cấ p ổn định giúp cho công suất phát của Module LoRa đạt mức khá cao (15dBm). Mạch đọc các cảm biến tốt. Các thiết bị ngoại vi như đèn led báo hiệu, công tắt Reset hoạt động tốt. Gateway: Phần cứng hoạt động tốt, nguồn ra ổn định giúp cung cấ p nguồn cho module LoRa. Bộ phận tản nhiệt hoạt động hiệu quả, bảo đảm Raspberry luôn trong tình tr ạng an toàn. Raspberry Pi có thể k ết n ối Wifi, Ethernet giúp dễ dàng thông tin liên lạc vớ i bên ngoài. Server: Phần cứng hoạt động tốt, nguồn ra ổn định giúp cung cấ p nguồn cho module LoRa. K ết nối vớ i Laptop tốt, giúp tổ chức lưu dữ liệu trên Laptop hiệu quả.
58
Lê Đình Vương – Bách Khoa University
6.2. K ết quả thi công phần mềm 6.2.1. Hiển thị trên ThingSpeak
Hình 6.4. K ết quả hiể n thị trên ThingSpeak
6.2.2. Cảnh báo Khi một thông số quá ngưỡng cài đặt. Twitter sẽ cậ p nhật một tweet cảnh báo.
Hình 6.5. K ế t quả cảnh báo trên Twitter
59
Lê Đình Vương – Bách Khoa University
6.3. Thí nghiệm đo khoảng cách truyền nhận của Module LoRa 6.3.1. Thí nghiệm tại Q.10, thành phố Hồ Chí Minh Điều kiện thí nghiệm: Thí nghiệm tại nội thành thành phố Hồ Chí Minh, khu dân cư dày đặ c vớ i nhiều tòa nhà cao tầng, nhiều hệ thống thu phát sóng vô tuyến. Anten thu phát tần số 433MHz, độ lợ i 5dBi, anten loại Mixed.
Máy thu đặt tại tầng 6. Thí nghiệm truyền nhận 30 gói tin vớ i mỗi khoảng cách (Thờ i gian giãn cách mỗi lần gửi là 10s). Bảng 9. K ế t quả thí nghiệm t ại Q.10, tp.HCM
Range
Tỉ lệ truyền
Công suất phát Công suất thu
Tỉ số tín hiệu
(m)
thành công
trung bình
trên nhiễu
trung bình
(%)
SNR (dB)
300
100
+15 dBm
-87 dBm
-2
500
100
+15 dBm
-95 dBm
-6
700
100
+15 dBm
-101 dBm
-10
800
90
+15 dBm
-122 dBm
-15
850
80
+15 dBm
-127 dBm
-17
60
Lê Đình Vương – Bách Khoa University
Hình 6.6. K ế t quả thí nghiệm t ại Q.10, tp.HCM
6.3.2. Thí nghiệm Light of Sight (LOS) Điều kiện thí nghiệm: Thí nghiệm tại vùng nông thôn, địa điể m là hồ nướ c chiều dài khoảng 1.25 km. Anten thu phát tần số 433MHz, độ lợ i 5dBi, anten loại Mixed.
Máy thu đặt trên mặt đất. Thí nghiệm truyền nhận 30 gói tin vớ i mỗi khoảng cách (Thờ i gian giãn cách mỗi lần gửi là 10s).
61
Lê Đình Vương – Bách Khoa University
Bảng 10. K ết quả thí nghiệm LOS t ại xã Hòa Hiệ p, Xuyên M ộc, BRVT
Range
Tỉ lệ truyền
Công suất phát Công suất thu
Tỉ số tín hiệu
(m)
thành công
trung bình
trên nhiễu
trung bình
(%)
SNR (dB)
500
100
+15 dBm
-75 dBm
+2
700
100
+15 dBm
-78 dBm
-1
1000
100
+15 dBm
-81 dBm
-2
1250
100
+15 dBm
-83 dBm
-3
Hình 6.7. K ết quả thí nghiệm LOS t ại xã Hòa Hiệ p, Xuyên M ộc, BRVT
62
Lê Đình Vương – Bách Khoa University
6.3.3. Thí nghiệm đo độ trễ truyền nhận. Điều kiện thí nghiệm: Thí nghiệm trong nhà, khoảng cách giữa máy thu và máy phát kho ảng 0.5m. Anten thu phát tần số 433MHz, anten loại Mixed, độ lợ i 5dBi. Truyền nhận gói tin liên tục. Bảng 11. K ết quả thí nghiệm đo độ tr ễ truyề n nhận
Chế độ
Tỉ lệ
Công suất
Công suất
Tỉ số tín
Thờ i gian
truyền
phát trung
thu trung
hiệu trên
trễ (s)
bình
nhiễu
thành công bình (%) 100
+15 dBm
+13 dBm
+7
< 0.1
Có ACK 100
+15 dBm
+13 dBm
+7
<2
Không có ACK
6.4. Đánh giá kết quả hoạt động Sau một thờ i gian kiểm tra hoạt động của hệ thống, k ết quả như sau: Nồng độ khí CO đọc từ cảm biến MQ-7 chưa ổn định, sau khi khởi động cần một th ờ i gian hoạt động (khoảng 20p) để đọc chính xác. Nhiệt độ từ cảm biến DS18B20 khá chính xác, nhưng bị ảnh hưở ng bởi độ nóng của cảm biếm MQ-7 đặt bên cạnh. Gateway nhận dữ liệu chính xác, ổn định, không có sai s ố. Giao thức MQTT không ổn định (phụ thu ộc nhiều vào chất lượ ng m ạng hiện t ại), cậ p nhật dữ liệu lên ThingSpeak vẫn có độ tr ễ khá nhiều so vớ i cấu hình. Khoảng cách truyền nhận th ấp hơn so vớ i lí thuyết và so vớ i triển khai của các nhóm khác tại nướ c ngoài. Nguyên nhân có thể là do giải thuật chưa tốt, code cấu hình và năng
lượ ng cung cấp cho Module LoRa chưa tối ưu, nguồn cấ p cho Node không ổn định, anten chất lượng không đảm bảo.
63
Lê Đình Vương – Bách Khoa University
CHƯƠNG 7. KẾT LUẬN VÀ HƯỚ NG PHÁT TRIỂN 7.1. K ết luận Từ những yêu cầu đặt ra ở phần đầu luận văn, sau đây là những ưu điểm và nhược điể m những gì đã làm đượ c.
Ưu điểm: Hoàn thành hệ thống ban đầu đưa ra. Cảm biến đo đượ c khá chính xác. Dữ liệu truyền nhận ở điều kiện thí nghiệm r ất chính xác, hầu nhưng không có sai sót về số liệu.
Nhược điểm: Cảm biến khí CO cần phải hoạt động một thờ i gian (20p) mớ i cho k ết quả chính xác. Mạch Node khá nóng do nhiệt độ của cảm biến CO. Code và phần cứng chưa tối ưu nên không thể cho công suất phát tối đa (20dBm) và khoảng cách thu nhận cũng giảm theo.
Chưa thực hiện giao thức lớ p MAC theo chuẩn của LORAWAN. 7.2. Hướ ng phát triển Tối ưu hóa phần cứng và phần mềm để đạt công suất tối đa, từ đó làm tăng khoảng cách truyền nhận theo thông số mà SemTech đưa ra. Từ Gateway, dùng giám sát và điề u khiển các thiết b ị ngoại vi k ết h ợ p v ới Relay như
máy bơm nướ c, quạt. Sử dụng vi điều khiển công suất thấp hơn, giúp cả i thiện hiệu suất năng lượ ng sử dụng
dài ngày hơn. Xây dựng lớ p mạng theo chuẩn LORAWAN.
64
Lê Đình Vương – Bách Khoa University
TÀI LIỆU THAM KHẢO 1) Tài liệu liên quan đến thông số kĩ thuật của Module LoRa SX1278 http://www.semtech.com/wireless-rf/lora.html 2) LoRaTM Modulation Basics http://www.semtech.com/images/datasheet/an1200.22.pdf 3) SX1272/3/6/7/8/9: LoRa Modem - Low Energy Consumption Design http://www.semtech.com/images/datasheet/LoraLowEnergyDesign_STD. pdf 4) Mô hình mạng LoRa của TS. Phạm Công Đứ c tại Pháp http://cpham.perso.univ-pau.fr/LORA/RPIgateway.html 5) Low Power Wide Area (LPWA) Technologies for IOT https://www.ciscolive.com/online/connect/sessionDetail.ww?SESSION_I D=89330&backBtn=true 6) Waspmote-LoRa-868MHz_915MHz-SX1272 Networking Guide http://www.libelium.com/development/waspmote/documentation/waspmo te-lora-868mhz-915mhz-sx1272-networking-guide/ 7) Waspmote LoRaWAN Networking Guide http://www.libelium.com/downloads/documentation/waspmote-lorawannetworking-guide.pdf 8)
Free Space Range Measurements with Semtech LoRa TM Technology Mohamed Aref, Axel Sikora - Laboratory Embedded Systems and Communication Electronics, Offenburg University of Applied Sciences, D77652 Offenburg, Germany
9) The MQTT Protocol and its Application https://zoetrope.io/tech-blog/brief-practical-introduction-mqtt-protocoland-its-application-iot/
65
Lê Đình Vương – Bách Khoa University
10)Truyền nhận dữ liệu giữa Raspberry và ThingSpeak bằng giao thức MQTT http://community.thingspeak.com/tutorials/update-a-thingspeak-channelusing-mqtt-on-a-raspberry-pi/ 11) Hướ ng dẫn về ThingSpeak https://www.mathworks.com/help/thingspeak/mqtt-api.html 12)XIAMEN GBAN Electronic Technology Co.,Ltd, GB1278-H Datasheet USE SX1278 Chipset 13)Raspberry Pi 3 https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ 14)DS18B20 Sensor http://www.alldatasheet.com/datasheet pdf/pdf/58557/DALLAS/DS18B20.html 15) MQ-7 Sensor
https://www.parallax.com/sites/default/files/downloads/605-00007-MQ-7Datasheet.pdf 16)LoRa Modulation and Simulation in Matlab http://sakshamaghoslya.blogspot.in/p/lora-is-chirp-spread-spectrum.html
66
Lê Đình Vương – Bách Khoa University
PHỤ LỤC 1. Chương trình chính tại Node #include "SX1272.h" #include
#include #include #include #include #include #include #include "mq7.h"
#define KEY 3
//added by Dinh Vuong mq7 MQ7; uint8_t sodien; uint16_t concentration_CO, dv_temp, electronic_encryption, mq7_encryption, temp_encryption; uint16_t data_encryption = 0, elecNumbers = random(0,1000), dem = 0; float ds18b20, analog_CO;
OneWire oneWire(2); DallasTemperature sensors(&oneWire);
void DV_Encrypt( uint16_t original_data) { uint16_t sodu[4]; uint16_t data[4]; uint16_t encrypt_data[4]; for (uint8_t i = 0; i < 4; i++) {
67
Lê Đình Vương – Bách Khoa University
data[i] = ((original_data >> (16 - 4*(i+1)) ) & 0x0F); sodu[i] = ((data[i] + KEY) % 16); #if (SX1272_debug_mode > 1) Serial.print(data[i]); Serial.println(); #endif
switch(sodu[i]) { case 0: encrypt_data[i] = 0x0F; break; case 1: encrypt_data[i] = 0x0E; break; case 2: encrypt_data[i] = 0x0D; break; case 3: encrypt_data[i] = 0x0C; break; case 4: encrypt_data[i] = 0x0B; break; case 5: encrypt_data[i] = 0x0A; break; case 6: encrypt_data[i] = 0x09; break; case 7:
68
Lê Đình Vương – Bách Khoa University
encrypt_data[i] = 0x08; break; case 8: encrypt_data[i] = 0x07; break; case 9: encrypt_data[i] = 0x06; break; case 10: encrypt_data[i] = 0x05; break; case 11: encrypt_data[i] = 0x04; break; case 12: encrypt_data[i] = 0x03; break; case 13: encrypt_data[i] = 0x02; break; case 14: encrypt_data[i] = 0x01; break; case 15: encrypt_data[i] = 0x00; break; } } data_encryption = ( ((encrypt_data[0] << 12) & 0xF000) | ((encrypt_data[1] << 8) & 0x0F00) | ((encrypt_data[2] << 4) & 0x00F0) | ((encrypt_data[3]) & 0x000F) ); }
void LORA_setup()
69
Lê Đình Vương – Bách Khoa University
{ //Config LoRa sx1272.ON(); sx1272.setMode(LORA_MODE); sx1272.setHeaderON(); sx1272.setCRC_ON(); sx1272.setPower( 'X'); sx1272.setMaxCurrent(0x1B);
//set max current supply = 240mA
sx1272.setNodeAddress(NODE_ADDRESS);
//Set this lora address
sx1272.setChannel(CH_00_433);
//Set frequency
delay(200); }
void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); LORA_setup(); sensors.begin(); }
void loop(void) { // data // 1. electronic numbers sodien = random(0,10); elecNumbers = elecNumbers + sodien; Serial.print( "Numbers Elec : "); Serial.println(elecNumbers); Serial.println();
// 2. concentration of CO analog_CO = MQ7.mq7_getppm();
70
Lê Đình Vương – Bách Khoa University
concentration_CO = (int) analog_CO; Serial.print( "Nong do khi CO: "); Serial.println(concentration_CO); Serial.println();
// 3. temperature sensors.requestTemperatures(); ds18b20 = sensors.getTempCByIndex(0); ds18b20 = (ceilf(ds18b20*10))/10; ds18b20 = ds18b20 - 7.5; Serial.print( "Nhiet do: "); Serial.println(ds18b20); Serial.println(); dv_temp = ((((uint16_t) ds18b20) & 0xFF) << 8) | ((uint16_t)((ds18b20 - (uint16_t) ds18b20) * 100) & 0xFF); // encryption // 1. encrypt electronic number DV_Encrypt(elecNumbers); electronic_encryption = data_encryption; Serial.print( "Electronic number's encryption is : " ); Serial.println(electronic_encryption, HEX); Serial.println();
// 2. encrypt mq7 DV_Encrypt(concentration_CO); mq7_encryption = data_encryption; Serial.print( "mq7's encryption is : "); Serial.println(mq7_encryption, HEX); Serial.println();
// 3. encrypt temperature DV_Encrypt(dv_temp); temp_encryption = data_encryption;
71
Lê Đình Vương – Bách Khoa University
Serial.print( "temperature's encryption is : " ); Serial.println(temp_encryption, HEX); Serial.println();
// led digitalWrite(LED_BUILTIN, HIGH);
// turn the LED on (HIGH is the voltage level)
delay(1000);
// wait for a second
digitalWrite(LED_BUILTIN, LOW);
// turn the LED off by making the voltage LOW
delay(1000);
// wait for a second
// using CAD mode for detecting actitivy, check 2 times sx1272.doCAD(2);
// send packet with encryption sx1272.sendPacketTimeout(electronic_encryption, mq7_encryption, temp_encryption); Serial.println( "Da gui packet");
// Change channel to receive ACK sx1272.setChannel(CH_01_433);
// Receive ACK with time out = 24s sx1272.receivePacketTimeout(4000); sx1272.receivePacketTimeout(4000);
// get Power out of Transmitter sx1272.getPower();
dem = dem + 1; Serial.print( "Tong so packet da gui: "); Serial.println(dem);
delay(10000);
72
Lê Đình Vương – Bách Khoa University
// Change channel to send packet sx1272.setChannel(CH_00_433); }
2. Chương trình chính tại Gateway // Gateway #include "SX1272.h" #include #include #include #include #include
//add by Dinh Vuong #define BAND433 #define LORA_MODE 1 #define LORA_CHANNEL CH_00_433 #define GATEWAY_ADDRESS 1 #define KEY 3
int data_decryption = 0; byte header = 0; unsigned long previous; byte value = 0x00; uint8_t state; uint16_t time_delay;
void send_ACK() { unsigned long previous; sx1272_rc.packet_sent.dst = sx1272_rc.packet_received.dst; printf("Send ACK to Node: %d\n",sx1272_rc.packet_received.dst); sx1272_rc.packet_sent.type = PKT_TYPE_ACK; sx1272_rc.packet_sent.src[0] = 0x42;
73
Lê Đình Vương – Bách Khoa University
sx1272_rc.packet_sent.src[1] = 0xff; sx1272_rc.packet_sent.src[2] = 0x2a;
//set packet_length uint8_t Packetlength = 5 ;
// OFFSET_PAYLOADLENGTH =5;
sx1272_rc.clearFlags();
//Initializing flags
//Starting setPacket sx1272_rc.writeRegister(REG_OP_MODE,LORA_STANDBY_MODE); sx1272_rc.writeRegister(REG_PAYLOAD_LENGTH_LORA, Packetlength); // Setting address pointer in FIFO data buffer sx1272_rc.writeRegister(REG_FIFO_ADDR_PTR, 0x80); // Writing the destination in FIFO sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.dst); // Writing BTS address sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[0]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[1]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[2]); // Writing the packet type in FIFO sx1272_rc.writeRegister(REG_FIFO, sx1272_rc.packet_sent.type);
//Send packet delay(300); sx1272_rc.writeRegister(REG_OP_MODE, LORA_TX_MODE); // LORA mode - Tx byte value; value = sx1272_rc.readRegister(REG_IRQ_FLAGS); previous = millis(); while ((bitRead(value, 3) == 0) && (millis() - previous < 8000)) { value = sx1272_rc.readRegister(REG_IRQ_FLAGS); // Condition to avoid an overflow (DO NOT REMOVE) if ( millis() < previous ) { previous = millis();
74
Lê Đình Vương – Bách Khoa University
} } sx1272_rc.clearFlags(); }
void DV_Decrypt( uint16_t original_data) { uint8_t data[4]; uint8_t pre_decrypt_data[4]; uint8_t decrypt_data[4];
for (uint8_t i = 0; i < 4; i++) { data[i] = ((original_data >> (16 - 4*(i+1)) ) & 0x0F);
#if (SX1272_debug_mode > 1) Serial.print(data[i]); Serial.println(); #endif
switch(data[i]) { case 0x00: pre_decrypt_data[i] = 0x0F; break; case 0x01: pre_decrypt_data[i] = 0x0E; break; case 0x02: pre_decrypt_data[i] = 0x0D; break; case 0x03: pre_decrypt_data[i] = 0x0C;
75
Lê Đình Vương – Bách Khoa University
break; case 0x04: pre_decrypt_data[i] = 0x0B; break; case 0x05: pre_decrypt_data[i] = 0x0A; break; case 0x06: pre_decrypt_data[i] = 0x09; break; case 0x07: pre_decrypt_data[i] = 0x08; break; case 0x08: pre_decrypt_data[i] = 0x07; break; case 0x09: pre_decrypt_data[i] = 0x06; break; case 0x0A: pre_decrypt_data[i] = 0x05; break; case 0x0B: pre_decrypt_data[i] = 0x04; break; case 0x0C: pre_decrypt_data[i] = 0x03; break; case 0x0D: pre_decrypt_data[i] = 0x02; break; case 0x0E: pre_decrypt_data[i] = 0x01;
76
Lê Đình Vương – Bách Khoa University
break; case 0x0F: pre_decrypt_data[i] = 0x00; break; } if ( (pre_decrypt_data[i] - KEY) < 0) { decrypt_data[i] = ((((pre_decrypt_data[i] - KEY) % 16) + 16) % 16); } else { decrypt_data[i] = ((pre_decrypt_data[i] - KEY) % 16); } } data_decryption = ( ((decrypt_data[0] << 12) & 0xF000) | ((decrypt_data[1] << 8) & 0x0F00) | ((decrypt_data[2] << 4) & 0x00F0) | ((decrypt_data[3]) & 0x000F) ); }
void* send_to_Server(void *input_node) { int node_dst = *((int *) input_node); unsigned long previous; sx1272_rc.packet_sent.dst = 2; printf("Node send: %d\n",2); sx1272_rc.packet_sent.src[0] = 0x42; sx1272_rc.packet_sent.src[1] = 0xff; sx1272_rc.packet_sent.src[2] = 0x2a;
//set packet_length uint8_t Packetlength = 10 ; sx1272_rc.clearFlags(); //Initializing flags //Starting setPacket sx1272_rc.writeRegister(REG_OP_MODE,LORA_STANDBY_MODE);
77
Lê Đình Vương – Bách Khoa University
sx1272_rc.writeRegister(REG_PAYLOAD_LENGTH_LORA, Packetlength); // Setting address pointer in FIFO data buffer sx1272_rc.writeRegister(REG_FIFO_ADDR_PTR, 0x80); // Writing the destination in FIFO sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.dst); // Writing BTS address sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[0]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[1]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_sent.src[2]); // Writing the packet type in FIFO sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[0]);
sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[1]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[2]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[3]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[4]); sx1272_rc.writeRegister(REG_FIFO,sx1272_rc.packet_received.data[5]); //Send packet delay(300); sx1272_rc.writeRegister(REG_OP_MODE, LORA_TX_MODE); // LORA mode - Tx byte value; value = sx1272_rc.readRegister(REG_IRQ_FLAGS); previous = millis(); while ((bitRead(value, 3) == 0) && (millis() - previous < 8000)) { value = sx1272_rc.readRegister(REG_IRQ_FLAGS); // Condition to avoid an overflow (DO NOT REMOVE) if ( millis() < previous ) { previous = millis(); } } sx1272_rc.clearFlags(); pthread_exit(NULL);
78
Lê Đình Vương – Bách Khoa University
}
int8_t check_data(void) { value = sx1272_rc.readRegister(REG_IRQ_FLAGS); if (bitRead(value,4) == 1) { printf("Co' packet\n"); previous = millis(); while(header == 0 && (millis() - previous < 8000)) { //Waiting to read first payload bytes from packet header = sx1272_rc.readRegister(REG_FIFO_RX_BYTE_ADDR); //Avoid overflow if (millis() < previous) { previous = millis(); } } if (header != 0) { printf("header != 0 \n"); //Read Lora Node by reading first byte of the received packet sx1272_rc._destination = sx1272_rc.readRegister(REG_FIFO); //get Packet form received packet previous = millis(); value = sx1272_rc.readRegister(REG_IRQ_FLAGS); // Wait until the packet is received (RxDone flag) or timeout while(bitRead(value, 6 ) == 0 && (millis() - previous < 8000)) { value = sx1272_rc.readRegister(REG_IRQ_FLAGS); // Condition to avoid an overflow (DO NOT REMOVE) if ( millis() < previous ) { previous = millis();
79
Lê Đình Vương – Bách Khoa University
} }
if ( (bitRead(value, 6) == 1) && (bitRead(value, 5) == 0) ) { //packet received & CRC correct //Receive packet here // set the FIFO addr to 0 to read again all the bytes sx1272_rc.writeRegister(REG_FIFO_ADDR_PTR, 0x00); sx1272_rc.packet_received.src[0] = sx1272_rc.readRegister(REG_FIFO); sx1272_rc.packet_received.src[1] = sx1272_rc.readRegister(REG_FIFO); sx1272_rc.packet_received.src[2] = sx1272_rc.readRegister(REG_FIFO); printf("Address: %X,%X,%X \n", sx1272_rc.packet_received.src[0],sx1272_rc.packet_received.src[1],sx1272_rc.packet _received.src[2]); if ( sx1272_rc.packet_received.src[0] == 0x42 && sx1272_rc.packet_received.src[1] == 0xff && sx1272_rc.packet_received.src[2] == 0x2a) { sx1272_rc.packet_received.dst = sx1272_rc.readRegister(REG_FIFO); printf("Received data from Node %d\n" , sx1272_rc.packet_received.dst); sx1272_rc.packet_received.length = sx1272_rc.readRegister(REG_RX_NB_BYTES); sx1272_rc._payloadlength=sx1272_rc.packet_received.length - 4; uint16_t elecNumbers = 0; for(unsigned int i = 0; i < 6; i++) { sx1272_rc.packet_received.data[i] = sx1272_rc.readRegister(REG_FIFO); printf("Packet[%d]: %d\n",i,sx1272_rc.packet_received.data[i]); } //Received Packet Done sx1272_rc.clearFlags(); //Clear flag sx1272_rc.writeRegister(REG_FIFO_ADDR_PTR, 0x00); return 1; }
80
Lê Đình Vương – Bách Khoa University
else { printf("Packet not for me\n"); }
}
else { if (bitRead(value,5) != 0) { //CRC incorrect printf("CRC incorrect\n"); }
} } sx1272_rc.clearFlags();
//Clear flag
sx1272_rc.writeRegister(REG_FIFO_ADDR_PTR, 0x00);
//Set Register at 0,0
} return 0; } void setup_Lora(void) { printf("Set for BTS state : "); state = sx1272_rc.ON(); //Set CR state = sx1272_rc.setCR(CR_5); //Set SF state = sx1272_rc.setSF(SF_12); //Set BW state = sx1272_rc.setBW(BW_125); //Set Header state = sx1272_rc.setHeaderON();
81
Lê Đình Vương – Bách Khoa University
//Set Frequency state = sx1272_rc.setChannel(LORA_CHANNEL); //Set CRC ON state = sx1272_rc.setCRC_ON(); //Set Power Ouput state = sx1272_rc.setPower( 'X'); //Set this lora address state = sx1272_rc.setNodeAddress(GATEWAY_ADDRESS); state = sx1272_rc.getMaxCurrent(); //Call function set LORA only receive mode state = sx1272_rc.receive(); printf("OK\n"); printf("Config done\r\n"); delay(500); }
void setup_Led(void) { //Led 1, GPIO4 , wiringpi 7 pinMode(7,OUTPUT); digitalWrite(7,LOW); } void* save_data(void *arg) { uint16_t electronic_decryption, CO_decryption, temp_decryption; //decrypt data for save DV_Decrypt((sx1272_rc.packet_received.data[0] << 8) | (sx1272_rc.packet_received.data[1])); electronic_decryption = data_decryption; DV_Decrypt((sx1272_rc.packet_received.data[2] << 8) | (sx1272_rc.packet_received.data[3])); CO_decryption = data_decryption; DV_Decrypt((sx1272_rc.packet_received.data[4] << 8) | (sx1272_rc.packet_received.data[5])); temp_decryption = data_decryption; uint8_t temp_decryption_1 = (temp_decryption >> 8) & 0xFF;
82
Lê Đình Vương – Bách Khoa University
uint8_t temp_decryption_2 = temp_decryption & 0xFF;
FILE *file_electronic, *file_CO, *file_temperature; char buff[20];
//Read time form system and write in buffer time_t now = time(0); strftime(buff,20,"%Y-%m-%d %H:%M:%S",localtime(&now)); printf(buff);
//Set file to open file_electronic = fopen( "/home/pi/BTS_DV/electronic.csv" ,"a"); file_CO = fopen("/home/pi/BTS_DV/CO.csv","a"); file_temperature = fopen( "/home/pi/BTS_DV/temperature.csv" ,"a");
//write file electronic printf("\n%s,%d,%d.%d\n",buff,sx1272_rc.packet_received.dst,(electronic_decryption)); fprintf(file_electronic,"%d\n",electronic_decryption);
//write file CO printf("\n%s,%d,%d.%d\n",buff,sx1272_rc.packet_received.dst,(CO_decryption)); fprintf(file_CO,"%d\n",CO_decryption);
//write file temperature printf("\n%s,%d,%d.%d\n",buff,sx1272_rc.packet_received.dst,temp_decryption_1, temp_decryption_2); fprintf(file_temperature, "%d.%d\n",temp_decryption_1, temp_decryption_2);
//Close file fclose(file_electronic); fclose(file_CO); fclose(file_temperature); pthread_exit(NULL); }
83
Lê Đình Vương – Bách Khoa University
int main(int argc, char *argv[]) { uint16_t dem =0; pthread_t led; pthread_t thread1; pthread_t thread2; wiringPiSetup(); printf("Lora BTS\r\n"); setup_Lora(); setup_Led(); while(true) { state = check_data(); if (state) { digitalWrite(7,HIGH); state = sx1272_rc.getRSSIpacket(); dem = dem + 1; printf("Tong so packet da nhan : " ); printf("%d", dem); printf("\n"); printf("Send Packet to Server\n"); time_delay = 500; pthread_create (&thread1, NULL,send_to_Server,&sx1272_rc.packet_received.dst); pthread_create (&thread2, NULL, save_data, NULL); pthread_join(thread1,NULL); pthread_join(thread2,NULL);
// send ACK with channel 01_433 sx1272_rc.setChannel(CH_01_433); send_ACK();
//set channel to 00_433
84
Lê Đình Vương – Bách Khoa University
sx1272_rc.setChannel(LORA_CHANNEL); state = sx1272_rc.receive(); digitalWrite(7,LOW); } } return 0; }
3. Chương trình chính tại Server Backup #include "SX1272.h" #include #include void LORA_setup() { //Config LoRa sx1272.ON(); sx1272.setMode(LORA_MODE); sx1272.setHeaderON(); sx1272.setCRC_ON(); sx1272.setPower( 'X'); sx1272.setNodeAddress(NODE_ADDRESS);
//Set this lora address
sx1272.setChannel(CH_00_433);
//Set frequency
delay(200); }
void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); LORA_setup(); }
void loop(void)
85
Lê Đình Vương – Bách Khoa University
{ while(true) { sx1272.receivePacketTimeout(4000); } return 0; }
4. Chương trình truyền dữ liệu từ Database lên ThingSpeak TM thông qua giao thứ c MQTT: from __future__ import print_function import paho.mqtt.publish as publish import psutil import sys import string import time channelID = "262732" apiKey = "F701T1H9P0O8TBWN"
useUnsecuredTCP = True useUnsecuredWebsockets = False useSSLWebsockets = False
mqttHost = "mqtt.thingspeak.com"
if useUnsecuredTCP:
86
Lê Đình Vương – Bách Khoa University
tTransport = "tcp" tPort = 1883 tTLS = None
if useUnsecuredWebsockets: tTransport = "websockets" tPort = 80 tTLS = None
if useSSLWebsockets: import ssl tTransport = "websockets" tTLS = {'ca_certs':"/etc/ssl/certs/ca-certificates.crt",'tls_version' :ssl.PROTOCOL_TLSv1} tPort = 443
topic = "channels/" + channelID + "/publish/" + apiKey
while(True): a=open('/home/pi/GW_UP/electronic.csv','rb') lines=a.readlines() if lines: last_1=lines[ -1] print (last_1)
87