ESP32 ArduinoJson v6:序列化 JSON

ESP32 ArduinoJson v6:序列化 JSON

介绍

在本教程中,我们将检查如何使用ArduinoJson 库在 ESP32 上序列化 JSON 。

可以使用 Arduino IDE 库管理器安装此库。打开该工具后,只需搜索“ArduinoJson”,如图1所示。

 

图 1 – 从 Arduino IDE 库管理器安装 ArduinoJson。

您还可以使用库管​​理器更新到最新版本,即版本 6。

请注意,在之前的教程中,我们已经介绍了 ArduinoJson 库的一些功能,但适用于旧版本。如前所述,在这里我们将介绍最新版本。

此版本引入了对以前 API 的一些更改。您可以在此处阅读有关从版本 5 迁移到版本 6 的一些信息。

此处显示的测试是使用 DFRobot 的ESP32 板执行的 。

编码

我们要做的第一件事是包含ArduinoJson库,这样我们就可以访问序列化 JSON 所需的函数。

1
#include <ArduinoJson.h>

然后我们将继续使用 Arduino 设置功能,我们将在其中编写其余代码。我们将首先打开一个串行连接,以输出我们程序的结果。

1
Serial.begin(115200);

然后我们将声明一个StaticJsonDocument类的对象。它将保存我们对象 [1] 的内存表示。

请注意,StaticJsonDocument是JsonDocument的派生类,其特殊性在于内存是在堆栈上分配的 [2]。另一种方法是DynamicJsonDocument,其中内存在堆上分配 [2]。对于本教程,我们将仅使用StaticJsonDocument类。

使用StaticJsonDocument的优点之一是速度稍快,因为它不依赖于动态内存分配 [3]。

尽管如此,对于较大的文档,不建议使用StaticJsonDocument,以避免堆栈溢出问题 [3]。在库文档中,建议我们对小于 1 KB 的文档使用StaticJsonDocument ,对大于 1 KB 的文档使用DynamicJsonDocument [4]。

在我们的代码中,我们需要在模板参数上指定StaticJsonDocument的容量。该值在字节 [2] 中指定。

当然,我们分配的容量取决于 JSON 文档的复杂性。您可以使用助手来帮助您确定您的用例所需的大小。还有一些宏可以帮助计算所需的大小,例如
JSON_OBJECT_SIZE

尽管如此,对于我们的简单教程,我们将使用 100 字节的容量,这对于我们要表示的对象来说已经绰绰有余了。

1
StaticJsonDocument<100> testDocument;

然后,要向我们的文档添加一个新成员,我们只需要使用下标运算符 []即可。您可以检查以下语法以添加我们的 JSON 的两个成员。

1
2
testDocument["sensorType"] = "Temperature";
testDocument["value"] = 10;

请注意,我们正在模拟具有以下结构的 JSON 对象,表示假设的传感器测量:

1
2
3
4
{
    "sensorType": "temperature",
    "value": 10
}

回到我们的 Arduino 代码,要将文档序列化为 JSON 字符串,我们需要一个 char 缓冲区来存储它。

1
char buffer[100];

然后,要获取 JSON 字符串,我们只需要调用serializeJson函数即可。作为第一个输入,我们需要传递我们的StaticJsonDocument对象,第二个输入是我们之前声明的字符缓冲区。

请注意,此函数调用将输出一个缩小的字符串,这意味着它不会有空格或换行符 [5]。当然,这占用的空间更少,但对于人类来说阅读起来要困难得多。如果你想获得一个修饰过的字符串(足够人类阅读),你应该使用serializeJsonPretty函数。

1
serializeJson(testDocument, buffer);

最后,我们将打印在我们的 char 缓冲区中获得的内容。它应该显示一个包含我们的 JSON 文档的字符串。

1
Serial.println(buffer);

最终代码如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <ArduinoJson.h>
 
void setup() {
 
  Serial.begin(115200);
   
  StaticJsonDocument<100> testDocument;
   
  testDocument["sensorType"] = "Temperature";
  testDocument["value"] = 10;
 
  char buffer[100];
 
  serializeJson(testDocument, buffer);
 
  Serial.println(buffer);
}
 
void loop() {
 
}

测试代码

要测试代码,只需编译它并使用 Arduino IDE 将其上传到您的设备。程序完成后,打开 Arduino IDE 串行监视器。您应该得到类似于图 2 的输出,其中显示了正在打印的 JSON 字符串。

图 2 – 程序的输出,显示 JSON 字符串。

相关内容

建议的 ESP32 读数

参考

[1] Serialization tutorial | ArduinoJson 6

[2] Deserialization tutorial | ArduinoJson 6

[3] StaticJsonDocument | ArduinoJson 6

[4] JsonDocument | ArduinoJson 6

[5] serializeJson() | ArduinoJson 6

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值