文章目录
前言
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在单片机之间、上下位机之间的通信中被广泛应用。
一、JSON特点
语法简单
语法简洁:JSON 的语法基于 JavaScript 的对象和数组字面量表示法,非常直观和简洁。它使用键值对来表示数据,易于阅读和编写。
数据格式灵活
数据格式灵活:支持多种数据类型,包括字符串、数字、布尔值、数组、对象等,可以方便地表示复杂的数据结构。
轻量化
轻量级:相比其他一些数据交换格式(如 XML),JSON 的数据量较小,在网络传输和存储方面具有优势,能够有效减少通信带宽和存储空间的占用。
跨语言使用
跨语言支持:几乎所有的编程语言都提供了对 JSON 的解析和生成支持,这使得它在不同类型的单片机和上位机(如 PC、手机等)之间进行数据交换时非常方便,无需考虑语言差异。
二、JSON数据结构
对象
对象:由花括号 {} 包围,包含一系列键值对。键是字符串,值可以是任意数据类型。例如:{“name”: “John”, “age”: 30, “isStudent”: false}。
数组
数组:由方括号 [] 包围,包含一系列元素,元素可以是任意数据类型。例如:[1, 2, 3, “four”, true]。
三、JSON在单片机之间通信的应用
数据封装与传输
数据封装与传输:单片机通常资源有限,JSON 的轻量级特性使其成为一种理想的数据格式。当多个单片机之间需要进行数据交互时,例如传感器节点与控制节点之间的通信,传感器节点可以将采集到的数据(如温度、湿度、光照强度等)封装成 JSON 格式的字符串,然后通过串口、SPI 等通信接口发送给控制节点。控制节点接收到数据后,再解析 JSON 字符串,获取其中的具体数据值,进行相应的处理。
四、JSON示例代码
以 C 语言为例,在单片机中使用 cJSON 库来处理 JSON 数据。假设要发送一个包含温度和湿度数据的 JSON 消息,代码如下:
#include "cJSON.h"
// 模拟采集到的温度和湿度数据
float temperature = 25.5;
float humidity = 60.0;
int main() {
// 创建一个JSON对象
cJSON *root = cJSON_CreateObject();
// 向JSON对象中添加温度和湿度数据
cJSON_AddNumberToObject(root, "temperature", temperature);
cJSON_AddNumberToObject(root, "humidity", humidity);
// 将JSON对象转换为字符串
char *json_string = cJSON_Print(root);
// 这里可以通过串口等方式将json_string发送出去
// 释放内存
cJSON_Delete(root);
free(json_string);
return 0;
}
五、JSON在上位机与单片机之间通信的应用
数据交互
数据交互:上位机(如 PC 端的应用程序或手机 APP)与单片机之间经常需要进行数据交互。例如,上位机向单片机发送控制指令,或者从单片机获取传感器数据、设备状态等信息。JSON 格式可以方便地对这些数据进行封装和传输。上位机将指令或请求数据封装成 JSON 格式发送给单片机,单片机解析 JSON 数据并执行相应操作,然后将结果以 JSON 格式返回给上位机。上位机再解析返回的 JSON 数据,进行显示或进一步处理。
六、JSON示例代码
示例代码:在 Python 中使用 json 模块处理 JSON 数据,与单片机进行通信(假设通过串口与单片机通