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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!