Arduino网络编程实战-从SD卡加载并解析JSON文件

从SD卡加载并解析JSON文件

JSON(JavaScript Object Notation)是一种开放的标准文件格式和数据交换格式,它使用人类可读的文本来存储和传输由属性-值对和数组(或其他可序列化值)组成的数据对象。 它是一种常见的数据格式,在电子数据交换中具有多种用途,包括带有服务器的 Web 应用程序。

JSON 是一种独立于语言的数据格式。 它源自 JavaScript,但许多现代编程语言都包含生成和解析 JSON 格式数据的代码。 JSON 文件名使用扩展名 .json。当数据从服务器发送到网页时,通常使用 JSON。JSON是“自我描述的”并且易于理解。

ArduinoJson库为嵌入式系统提供了高性能的JSON数据序列化和反序列化支持。

前面的文章对Arduino中JSON数据解析做出详细的介绍,请参考:

SD卡模块对于需要数据记录的项目特别有用。前面的文章对Arduino如何使用SD卡做了详细的介绍,请参考:

本次实例将演示如何从SD卡加载JSON文件并解析、储存。

1、硬件准备

  • Arduino Mega2560 开发板一块
  • SD卡模块一个及SD卡一个
  • 数据线一条
  • 杜邦线若干

硬件连接按SPI方式连接,请参考前面的文章,在这里不再做详细描述。

2、软准备

3、代码实现

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <SPI.h>
#include <Wire.h>
#include <SdFat.h>
#include <ArduinoJson.h>

// SD\_FAT\_TYPE = 0 for SdFat/File as defined in SdFatConfig.h,
// 1 for FAT16/FAT32, 2 for exFAT, 3 for FAT16/FAT32 and exFAT.
// SD卡文件系统格式类型
#define SD\_FAT\_TYPE 0
// SD卡SPI的CS引脚
#define SD\_CS\_PIN 4
// SD卡时钟,如果不正常,请降低时钟频率
#define SPI\_CLOCK SD\_SCK\_MHZ(50)
// SD卡SPI配置
#define SD\_CONFIG SdSpiConfig(SD\_CS\_PIN, DEDICATED\_SPI, SPI\_QUARTER\_SPEED)
// 根据文件系统类型声明不SdFat对象和文件对象
#if SD\_FAT\_TYPE == 0
SdFat sd;
File file;
#elif SD\_FAT\_TYPE == 1
SdFat32 sd;
File32 file;
#elif SD\_FAT\_TYPE == 2
SdExFat sd;
ExFile file;
#elif SD\_FAT\_TYPE == 3
SdFs sd;
FsFile file;
#else // SD\_FAT\_TYPE
#error Invalid SD\_FAT\_TYPE
#endif // SD\_FAT\_TYPE

void setup() {
Serial.begin(9600);
Serial.println("Initializing SD card...");
// 初始化SD卡
if (!sd.begin(SD_CONFIG)) {
sd.initErrorHalt(&Serial);
return;
}
Serial.println("Initialized SD card...");

// 声明静态Json文档对象
StaticJsonDocument<2048> doc;
// 打开文件
if (!file.open("/1@1x.json", O_RDWR)) {
Serial.println("open failed");
while(true);
}
DeserializationError error = deserializeJson(doc, file);
if (error){
Serial.println(F("Failed to read file, using default configuration"));
file.close();
while(true);
}
int width = doc["width"].as<int>();
int height = doc["height"].as<int>();
Serial.print("width=");
Serial.println(width);
Serial.print("height=");
Serial.println(height);
// 清空文档
doc.clear();
// 关闭文件
file.close();
}

void loop() {
// put your main code here, to run repeatedly:

}

在SD卡中创建一个JSON文件1@1x.json,内容如下:

1
2
3
4
5
{
width:32,
height:32
}

文章来源: https://iotsmart.blog.csdn.net/article/details/122953256