如何将JSON数组存储在Arduino程序中
How to store JSON Array in arduino program?
我正在研究IoT项目,我需要在Nodemcu中进行JSON解析。我在Arduinojson库的帮助下看到了Arduino的该示例代码,该示例代码效果很好,我能够成功地从URL(例如URL_1)中获取数据。现在,我想将此数据存储在数组中,以便从另一个UR2(例如URL_2)获取数据时,我可以将它们相互比较,并触发事件对结果的触发。url_1和url_2中的数据是形式的,
[" 1"," 1"," 1"," 1"," 0"," 0"," 0"," 0"]
并假设URL_1具有与指定相同的值。
我所做的是声明了一个数组数据[],其中我存储了解析的JSON值,以便以后可以在代码中的其他语句中使用它们。如您所见,我在URL中检索的数据只有1个和0,所以我想做的是"如果得到1做","否则执行此操作",您可以在代码中看到。但是问题是,一旦我结束了与URL的连接,数据[]数组仅给出垃圾值,我通过在串行监视器上打印它们,如代码所示。
我认为" const char* data [20]";存储JSON数据的位置,当我结束连接时,这些位置的数据也丢失了,这就是为什么我要获得垃圾值的原因。现在,我可能是错的,因为我是这些东西的新手。这就是为什么我想知道如何解决这个问题的原因,即如果我说正确的话,那么我该如何将解析的JSON数据存储在数组中,以免丢失,即使与URL的连接结束了。
(我是这个平台的新手,所以如果我做错了什么,希望你们可以为我的未来引导我,我也为我的英语破损道歉)。
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
const char* Data[20];
const char* ssid = "SSID";
const char* password = "Password";
//Connecting to WiFi
void setup() {
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);// Hides the viewing of ESP as wifi Hotspot
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected to WiFi Successfully");
}
void loop()
{
if(WiFi.status()== WL_CONNECTED)
{
HTTPClient http;
//Starting connection to url_1
http.begin("url_1");
int httpCode = http.GET();
if(httpCode > 0)
{
String data = http.getString();
const size_t bufferSize = JSON_ARRAY_SIZE(8) + 20;
DynamicJsonBuffer jsonBuffer(bufferSize);
JsonArray& root = jsonBuffer.parseArray(data);
for(int i=0;i<8;i++){
Data[i] = root[i];
Serial.println("Printing whole Data");
Serial.println(Data[i]);
}
}
http.end();//ending the connetion
for(int i=0;i<8;i++)
{
if(strcmp(Data[i],"1")==0){
Serial.print("if satement, Data = ");
Serial.println(Data[i]);
}
else
{
Serial.print("else satement, Data = ");
Serial.println(Data[i]);
}
}
}
}
Data[]
包含用于动态分配字符串的指针。当您使用JSON解析器离开代码块时,将调用其驱动器,因此分配的内存可以并且已被其他事物覆盖。
我建议使用
bool Data[...];
...
// true for "1", false for "0"
Data[i] = strcmp(root[i], "1") == 0;
...
编辑如果您需要存储更多"复杂"数据,例如实际字符串,您需要制作root[i]
指向的字符串的副本。
- 从给定的随机数组值生成随机数 Arduino程序C++
- 如何在Arduino程序中解决"invalid operands of types"?
- 如何调试无法编译的Arduino程序?
- 按下Arduino按钮后,如何在C#应用程序上执行操作
- 来自嵌入式应用程序Arduino或Intel Edison的安慰信息?
- 如何在 Arduino 中使用 C++ 成员函数作为中断处理程序?
- 如何将JSON数组存储在Arduino程序中
- C++ Arduino Uno 的调度程序
- 我的arduino传感器程序出了什么问题
- Arduino倒计时计时器阻止程序的其余部分运行
- Arduino:程序与 else 不起作用
- 在BTooth模块连接时上传Arduino程序 avrdude: stk500_getsync(): 不同步: resp
- Arduino上的意外程序停止
- Arduino UNO在执行更复杂的程序时意外循环Serial
- C++Arduino,在带有char指针参数的方法中使用sprintf,破坏了程序
- Arduino和PC之间通过Usb串行端口(C++控制台应用程序)进行通信
- 等待Arduino上的程序结束
- Arduino程序停止工作后1秒
- Arduino程序读取回混乱的数据
- 制作了一个简单的Arduino程序,想知道如何使其更清洁/更小