3.3.3.3. Các chuẩn Wi-Fi hiện có
Wi-Fi ngày nay rất phổ biến, ta có thể gặp các điểm phát sóng Wi-Fi ở khắp mọi nơi. Đặc điểm của sóng Wi-Fi là thu phát ở tần số 2.4GHz đến 5GHz, cao hơn sóng vơ tuyến và truyền hình, điện thoại và radio nên khá an tồn trong vấn đề bảo mật thông tin khi truyền nhận dữ liệu. Các chuẩn Wi-Fi phổ biến hiện nay là:
− Chuẩn 802.11 b: thu phát ở tần số 2.4GHz, tốc độ truyền nhận 11 Megabit/s và sử dụng mã CCk để xử lý.
− Chuẩn 802.11 g: thu phát ở tần số 2.4GHz, sử dụng mã OFDM có tốc độ truyền nhận 54 Megabit/s.
− Chuẩn 802.11 a: hoạt động ở tần số 5GHz, có tốc độ truyền nhận 54 Megabit/s.
− Chuẩn 802.11 n: hoạt động ở tần số 2.4GHz, tốc độ truyền nhận tối đa 450 Megabit/s.
− Chuẩn 802.11 ac: hoạt động ở mức tần số 5GHz, là một trong số những chuẩn Wi-Fi được tích hợp trong các thiết bị rộng lớn nhất hiện nay. [18]
3.3.3.4. Ưu và nhược điểm của Wi-Fi
Với các đặc tính của Wi-Fi, nó có rất nhiều ưu điểm khi sử dụng:
− Tính tiện dụng, đơn giản và gọn nhẹ.
− Dể sữa đổi và nâng cấp.
− Tính thuận tiện.
Bên cạnh những ưu điểm mà Wi-Fi mang lại, nó cũng đi kèm những nhược điểm chưa được khắc phục như:
− Phạm vi kết nối giới hạn.
− Băng thông giảm khi số lượng truy cập tăng.
3.3.4. Dữ liệu JSON
Ngoài các thiết bị phần cứng cũng như các chuẩn truyền thơng mà nhóm sử dụng ở trên, nhóm cịn sử dụng JSON làm kiểu dữ liệu giao tiếp chính giữa các vi điều khiển cũng như giữa vi điều khiển với Server. Vậy JSON là gì, nó được dùng ở đâu, và nó có cấu trúc như thế nào, chúng ta sẽ cùng tìm hiểu.
3.3.4.1. Khái niệm JSON
JSON là chữ viết tắt của Javascript Object Nation, đây là một dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được. JSON có định dạng đơn giản, dễ dàng sử dụng nên hiện nay nó được sử dụng rất phổ biến. Nó có thể sử dụng để lưu đữ liệu vào một file hay một bản ghi trong Cơ sở dữ liệu rất dễ dàng.
JSON là định dạng giúp lưu trữ thơng tin có cấu trúc, chủ yếu được dùng để truyền tải dữ liệu giữa Server và Client.
• Các tính năng nổi bật của JSON là:
• JSON là một ngơn ngữ hồn tồn độc lập.
• JSON có thể tự mơ tả được và rất dễ hiểu.
Vì trong đồ án này, nhóm sử dụng Cơ sở dữ liệu để lưu trữ và có giao tiếp giữa vi điều khiển với Server. Chính vì điều đó nên nhóm quyết định sử dụng JSON làm kiểu dữ liệu để giao tiếp.
3.3.4.2. Cấu trúc của chuỗi JSON
Cấu trúc của JSON rất đơn giản, mỗi thông tin dữ liệu gồm 2 phần là “key” và “value”. Điều này rất giống với CSDL đó là tên trường (field) và giá trị của nó ở một bản ghi (record) nào đó. Các thành phần của chuỗi JSON bao gồm:
• Chuỗi cặp ngoặc nhọn {} dùng để bao lại chuỗi JSON
• Các key và value bắt buột phải được đặt trong dấu nháy kép như thế này: “key” và “value”
• Giữa cặp key và value phải có dấu hai chấm
• Nếu có nhiều cặp dữ liệu trong chuỗi JSON, ta dùng dấu phẩy để ngăn cách giữa các cặp dữ liệu này.
Một ví dụ để ta có thể hiểu rõ cấu trúc của JSON. Nếu ta có tên và tuổi của một hoặc nhiều người mà ta muốn lưu trữ, thì ta có thể dùng JSON. Nó sẽ có định dạng như sau:
{“Nguyễn Văn A” : “19”, “Lê Văn B” : “22”}
Đây là một ví dụ về JSON, trong chuỗi JSON này chứa tên và tuổi của 2 người. Người thứ nhất có tên là Nguyễn Văn A, 19 tuổi, người thứ hai là Lê Văn B, 22 tuổi. Dữ liệu của 2 người được biểu diễn ở dạng JSON sẽ bao gồm 2 cặp dữ liệu, được ngăn cách nhau bởi dấu phẩy. “Key” ở đây là “Nguyễn Văn A” cùng “Lê Văn B”, còn “value” sẽ là “19” cùng “22”. Key và value ngăn cách nhau bởi dấu phẩy. Ta thấy được dữ liệu định dạng theo kiểu JSON rất dễ hiểu.
3.3.4.3. Cách sử dụng JSON
JSON được sử dụng ở phía bên Server là chính. Cụ thể ở đây, nhóm sử dụng JSON trong các file bên phía Server lưu hoặc truy xuất dữ liệu từ CSDL, đồng thời còn sử dụng tại trạm trung tâm và các trạm khu vực. Bên phía Server, nhóm sử dụng ngơn ngữ PHP để mã hóa cũng như chuyển một mảng hoặc một Object thành dữ liệu JSON bằng các lệnh json_encode (chuyển mảng hoặc object sang json) và json_decode (mã hóa json). Cịn phía Client (trạm khu vực và các trạm trung tâm), các
chuỗi JSON sẽ được xử lý bằng các lệnh trong thư viện ArduinoJson như lệnh deserializeJson.
Ở phía Server, dữ liệu sẽ được mã hóa như ví dụ đơn giản sau: $myObj = new stdClass();
$myObj->DV1 = $dv1; $myObj->DV2 = $dv2; $myObj->DV3 = $dv3; $myObj->DV4 = $dv4; $myObj->DV5 = $dv5; $myObj->DV6 = $dv6; $myObj->DV7 = $dv7; $myObj->DV8 = $dv8; $myJSON = json_encode($myObj); echo $myJSON;
Trong ví dụ trên, ta sẽ sử dụng stdClass() – một class rỗng, để tạo ra một Object đó là $myObj. Ta sẽ lưu giá trị các biến vào $myObj với các tên riêng biệt. Cũng như ví dụ trước, trong ví dụ này, chuỗi JSON sẽ bao gồm 8 cặp dữ liệu, trong đó key sẽ là DV1, DV2, DV3, … và value là $dv1, $dv2, $dv3, … Value ở đây là các biến có chứa giá trị, và cũng có thể khơng chứa giá trị. Ta thực hiện việc chuyển Object $myObj này sang một chuỗi JSON với lệnh json_encode. Khi chúng ta chuyển đối tượng $myObj trên với các biến có giá trị bằng 1, ta sẽ được một chỗi JSON như sau:
{“DV1” : “1” , “DV2” : “1” , “DV3” : “1” , “DV4” : “1” , “DV5” : “1” , “DV6” : “1” , “DV7” : “1” , “DV8” : “1”}
Nếu như các biến này khơng có giá trị, thì value sẽ hiển thị là null. Ví dụ biến $dv3, $dv6 và $dv7 khơng có giá trị thì chuỗi JSON có dạng như sau:
{“DV1” : “1” , “DV2” : “1” , “DV3” : “null” , “DV4” : “1” , “DV5” : “1” , “DV6” : “null” , “DV7” : “null” , “DV8” : “1”}
Việc mã hóa một chuỗi Json thì ngược lại, json_decode sẽ mã hóa một chuỗi json thành một mảng hoặc Object. Ở đây, ta có thể hiểu việc mã hóa nó sẽ ngược lại so với việc ta thực hiện ví dụ trên.
Đối với phía Client, việc phân tích, xử lý dữ liệu sẽ được thực hiện bởi các lệnh sau cơ bản sau:
DynamicJsonDocument JSON(256); deserializeJson(JSON, a);
Lệnh DynamicJsonDocument JSON(256) có nghĩa là ta khai báo một biến tên JSON với bộ nhớ được cấp phát cho nó là 256 byte. Đối với lệnh deserializeJson(JSON, a), vi điều khiển thực hiện việc mã hóa chuỗi JSON là a và lưu vào biến JSON đã tạo. Sau đó ta có thể thao tác với chuỗi JSON đã được mã hóa. Ví dụ, một chương trình về việc mã hóa một chuỗi JSON và xử lý nó như sau:
DynamicJsonDocument doc(256); char a[] = "{\"name\":\"dung\"}"; deserializeJson(doc, a);
String ten = doc["name"];
Khi thực hiện chương trình này, ta sẽ mã hóa một chuỗi JSON là chuỗi a vào biến doc đã được tạo trước đó. Chuỗi JSON sau khi được mã hóa sẽ được xử lý qua lệnh doc[“name”]. Lệnh này có ý nghĩa là lấy giá trị “value” từ “key” của cặp dữ liệu này tức là lệnh này sẽ lấy giá trị “dung” và lưu vào biến “ten” thông qua “key” là “name” với lệnh String ten = doc[“name”].
Thơng qua các ví dụ trên, ta cũng có thể hiểu sơ qua cấu trúc và cách sử dụng cơ bản của dữ liệu JSON tại Server cũng như tại Client trong đồ án của nhóm.
3.4. Quy trình hoạt động của mơ hình vườn thơng minh điều khiển phân tán 3.4.1. Lựa chọn quy trình cơng nghệ
Thơng qua một số thơng tin trên về Lora, ta có thể thấy được các ưu điểm nổi bật của mạng Lora, đặt biệt là trong việc áp dụng nó vào IoT. Đó là khoảng cách truyền nhận dữ liệu siêu xa (13 – 20Km trong điều kiện lý tưởng, tối đa 80Km khi ở chế độ light-of-signt) mà nó đem lại, đồng thời năng lượng tiêu tốn của nó rất thấp (25mW). Chính vì vậy, nên nhóm em đã quyết định sử dụng Lora vào đề tài của mình thay vì sử dụng các chuẩn mạng khơng dây khác.
Ngoài ra, theo như các nhân tố ảnh hưởng đến quang hợp của cây trồng được trình bày trong chương 2, yếu tố ánh sáng và nồng độ CO2 có thể khơng cần giám sát, vì nhóm sử dụng ánh nắng từ mặt trời và khí CO2 tự nhiên. Tuy nhiên yếu tố nhiệt độ, độ ẩm khơng khí và độ ẩm đất rất quan trọng, cần được giám sát thường xuyên để điều
chỉnh các điều kiện duy trì sự sống cho cây trống. Vì vậy trong đồ án này, nhóm em chỉ đo đạt các thơng số nhiệt độ, độ ẩm khơng khí và độ ẩm đất.
Trong đề tài này, chúng em sử dụng vi điều khiển Arduino để làm vi điều khiển chính tại 4 trạm khu vực để có thể giám sát được nhiều dữ liệu hơn, sẽ tính tốn các thông số nhiệt độ, độ ẩm tại vườn chính xác hơn. Bên cạnh đó, nhóm sử dụng ESP8266 là vi điều khiển chính của trạm trung tâm, chúng hoạt động ổn định, có thể kết nối Wi-Fi. Hơn nữa, EPS8266 được sử dụng rất nhiều trong các ứng dụng IoT trong thực tế.
Hơn nữa, nhóm sử dụng Internet để gửi dữ liệu lên Server, giúp cho người dùng có thể giám sát, điều khiển các thiết bị tại vườn ở bất cứ đâu, bất kì thời gian nào chỉ với một thiết bị thơng minh có trình duyệt Web và được kết nối Internet.
3.4.2. Nguyên lý hoạt động
Theo như sơ đồ mơ hình hệ thống (hình 3.1) và sơ đồ khối hệ thống (hình 3.2), ta có thể thấy được tổng quan về quy trình hoạt động của hệ thống vườn thơng minh.
Trong hệ thống này, nhóm em sử dụng Arduino thu thập dữ liệu nhiệt độ, độ ẩm khơng khí cũng như độ ẩm đất tại bốn khu vực trong vườn thông qua các cảm biến như cảm biến nhiệt độ, độ ẩm DHT11, cảm biến độ ẩm đất. Các dữ liệu nhiệt độ, độ ẩm khơng khí và độ ẩm đất đã được đo đạt này sẽ được đóng gói lại. Sau đó khi có yêu cầu từ Vi điều khiển trung tâm (ESP8266), các Arduino sẽ gửi gói dữ liệu này sang ESP8266 thông qua Lora.
Khi Vi điều khiển trung tâm đã nhận được dữ liệu, dữ liệu này sẽ được phân tích, sau đó sẽ được đưa lên Server để lưu vào Cơ sở dữ liệu. Đồng thời, trong quá trình hoạt động, ESP8266 sẽ liên tục lấy tín hiệu điều khiển từ cơ sở dữ liệu về để xử lý, nếu có sự thay đổi trạng thái của tín hiệu điều khiển so với tín hiệu ban đầu, ESP8266 sẽ gửi tín hiệu điều khiển mới này sang Arduino để điều khiển thiết bị đầu cuối tại các khu vực này.
Về phần tương tác với người dùng, người dùng sẽ truy cập vào giao diện điều khiển để giám sát các thông tin nhiệt độ, độ ẩm trong vườn. Đồng thời người dùng có thể điều khiển các thiết bị điều khiển các thiết bị tại khu vực vườn thông qua giao diện điều khiển. Khi người dùng xác nhận các tín hiệu điều khiển, các tín hiệu này sẽ được lưu vào cơ sở dữ liệu. Các tín hiệu này sẽ được ESP8266 đọc về.
CHƯƠNG 4: THIẾT KẾ MẠCH PHẦN CỨNG VÀ PHẦN MỀM CHO CÁC TRẠM THU THẬP DỮ LIỆU KHU VỰC VÀ TRUNG TÂM TRONG ĐỀ TÀI
4.1. Trạm điều khiển trung tâm.
Trạm điều khiển trung tâm sử dụng vi điều khiển ESP8266 làm bộ não chính. ESP8266 kết nối với Module Lora để nhận và gửi dữ liệu với các trạm khu vực. Đồng thời trạm trung tâm cũng nhận và gửi dữ liệu lên cơ sở dữ liệu. Việc thiết kế trạm trung tâm bao gồm phần cứng và phần mềm.
4.1.1. Thiết kế phần cứng.
Sơ đồ mạch nguyên lý của trạm điều khiển trung tâm được mơ tả như hình 4.1 sau: