CHƯƠNG 3 : MƠ HÌNH VƯỜN THÔNG MINH PHÂN TÁN TRONG ĐỀ TÀI
3.3. Các chuẩn truyền thơng chính được chọn trong đề tài
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à
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.