#ifndef __JSON2SD_H
#define __JSON2SD_H
#include <ArduinoJson.h>
#include <SD.h>
const uint8_t sensorNum=5, shtNum=2, sampleNumMax=100; // sensorData数量, shtData数量, 最大采样数
void Json2SD(char * fileName, char * userAffiliate, char * userID, uint16_t sensor[][sampleNumMax], float sht[][sampleNumMax], uint8_t sampleNum_Actual, long SDTimes) {
char deviceInfo[80];
char deviceName[] = "deviceName001", deviceSN[] = "SN00001";
sprintf(deviceInfo, "{\"DeviceInfo\":{\"DeviceName\":\"%s\",\"DeviceSN\":\"%s\"},", deviceName, deviceSN);
char userInfo[80];
sprintf(userInfo,"\"UserInfo\":{\"UserAffiliate\":\"%s\",\"UserID\":\"%s\"},", userAffiliate, userID);
char SampleInfo[15];
sprintf(SampleInfo, "\"SampleInfo\":[");
File dataFile = SD.open(fileName, FILE_WRITE);
if(dataFile) {
dataFile.print(deviceInfo); // 1>> 设备信息
dataFile.print(userInfo); // 2>> 用户信息
dataFile.print(SampleInfo); // 3>> 采样信息
// 循环写入, 传感器数据
StaticJsonDocument<1024> SJD_sampleData;
for (uint8_t col=0; col<sampleNum_Actual; col++) { // 创建一个JSON对象,用于存储当前采样数据
SJD_sampleData["SampleNum"] = col; // SampleNum: 1 << 采样次数 << 编辑输入
SJD_sampleData["SampleTime"] = "2023-01-01"; // SampleTime: 1 << 考虑后期加入
JsonArray JA_sensorData = SJD_sampleData.createNestedArray("sensorData");
for (uint8_t j=0; j<sensorNum; j++) { // JsonArray: sensorData, A口传感器数据
JA_sensorData.add(sensor[j][col]);
}
JsonArray JA_shtData = SJD_sampleData.createNestedArray("shtData");
for (uint8_t k=0; k<shtNum; k++) { // JsonArray: shtData, SHT4x温湿度传感器数据
JA_shtData.add(sht[k][col]);
}
serializeJson(SJD_sampleData, dataFile); // 将1次采样的数据存入SD卡
SJD_sampleData.clear();
if(col<sampleNum_Actual-1)
dataFile.print(","); // 不同采样次数的分隔符
}
dataFile.print("]}"); // JSON数据的结尾
dataFile.close();
Serial.print(F("Json2SD OK!"));
Serial.print(F(" Times: "));
Serial.println(SDTimes);
} else {
Serial.println(F("Json2SD Error!"));
}
}
#endif
ArduinoJson: 将传感器数据以JSON格式存入SD卡中
34 浏览量
2023-12-07
17:31:25
上传
评论
收藏 2KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
云水僧
- 粉丝: 22
- 资源: 5
最新资源
- 前端学习笔记,做一个简单的网站-星星,学习代码
- React框架面试题.pdf
- Arduino168种传感器模块系列实验之三:RCWL-0516微波雷达感应开关传感器模块(收录16项实验)
- 前端学习笔记,做一个简单的网站-贪吃蛇,学习代码
- 前端学习笔记,做一个简单的网站-获取内部文案,学习代码
- 前端学习笔记,做一个简单的网站-使用箭头函数改写下列代码,学习代码
- 前端学习笔记,做一个简单的网站-html,学习代码,很值得学习
- 前端学习笔记,做一个简单的网站- 检测昵称是否是有汉字字母数字下划线组成,6-8位,学习代码
- 前端学习笔记,做一个简单的网站- 检测是否是数字,包括整数,小数,学习代码
- 前端学习笔记,做一个简单的网站- 检测是否是2到4位汉字,学习代码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)