Hi,
i am new to Arduino forum and i was hoping you guys could help me, i am working on a greenhouse monitoring and controlling system using Nodemcu (esp8266-12E , so am trying to parse a large response from the server using Arduinojason Assistant, i am using sim800l call the GET API and therefore using a char a [256] to store the response which is read using AT+HTTPREAD , then use the char a above as the input of the jason deserializer , when the program reaches this step it crashes with the exception 9 stack error
|Data structures 912 Bytes needed to stores the JSON objects and arrays in memory
Strings 247 Bytes needed to stores the strings in memory |
Filter 18 The parser temporarily stores some ignored keys; this is the size of the largest one.
Total (minimum) 1177 Minimum capacity for the JsonDocument.
Total (recommended) 1536 Including some slack in case the strings change, and rounded to a power of two
mySerial.println("AT+HTTPREAD");
while(mySerial.read() != 'K') {
a[i]= mySerial.read();
i++;
}
// Stream& input;
StaticJsonDocument<912> filter;
JsonObject filter_data_0 = filter["data"].createNestedObject();
filter_data_0["title"] = "mesh";
filter_data_0["greenhouse_serial"] = "12345";
JsonArray filter_data_0_modules = filter_data_0.createNestedArray("modules");
JsonObject filter_data_0_modules_0 = filter_data_0_modules.createNestedObject();
filter_data_0_modules_0["title"] = "heater";
filter_data_0_modules_0["slug"] = true;
filter_data_0_modules_0["type"] = "controller";
filter_data_0_modules_0["min"] = true;
filter_data_0_modules_0["max"] = true;
filter_data_0_modules_0["func"] = "on";
JsonObject filter_data_0_modules_1 = filter_data_0_modules.createNestedObject();
filter_data_0_modules_1["title"] = "air-conditioner-(cold)";
filter_data_0_modules_1["slug"] = "air-conditioner-(cold)";
filter_data_0_modules_1["type"] = "controller";
filter_data_0_modules_1["min"] = "30";
filter_data_0_modules_1["max"] = "35";
filter_data_0_modules_1["func"] = "on";
JsonObject filter_data_0_modules_2 = filter_data_0_modules.createNestedObject();
filter_data_0_modules_2["title"] = "temperature-sensor";
filter_data_0_modules_2["slug"] = "temperature-sensor";
filter_data_0_modules_2["type"] = "sensor";
filter_data_0_modules_2["min"] = nullptr;
filter_data_0_modules_2["max"] = nullptr;
filter_data_0_modules_2["func"] = "default";
JsonObject filter_data_0_modules_3 = filter_data_0_modules.createNestedObject();
filter_data_0_modules_3["title"] = "Humidity-sensor";
filter_data_0_modules_3["slug"] = "Humidity-sensor";
filter_data_0_modules_3["type"] = "sensor";
filter_data_0_modules_3["min"] = nullptr;
filter_data_0_modules_3["max"] = nullptr;
filter_data_0_modules_3["func"] = "default";
JsonObject filter_data_0_modules_4 = filter_data_0_modules.createNestedObject();
filter_data_0_modules_4["title"] = "light sensor";
filter_data_0_modules_4["slug"] = "light-sensor";
filter_data_0_modules_4["type"] = "sensor";
filter_data_0_modules_4["min"] = "100";
filter_data_0_modules_4["max"] = "120";
filter_data_0_modules_4["func"] = "off";
JsonArray filter_data_0_item = filter_data_0.createNestedArray("item");
JsonObject filter_data_0_item_0 = filter_data_0_item.createNestedObject();
filter_data_0_item_0["code"] = true;
filter_data_0_item_0["value"] = true;
filter_data_0_item_0["module_name"] = "heater";
JsonObject filter_data_0_item_1 = filter_data_0_item.createNestedObject();
filter_data_0_item_1["code"] = "NRCON";
filter_data_0_item_1["value"] = "0";
filter_data_0_item_1["module_name"] = "air conditioner ";
JsonObject filter_data_0_item_2 = filter_data_0_item.createNestedObject();
filter_data_0_item_2["code"] = "N1STEMP";
filter_data_0_item_2["value"] = "0";
filter_data_0_item_2["module_name"] = "temperature sensor";
JsonObject filter_data_0_item_3 = filter_data_0_item.createNestedObject();
filter_data_0_item_3["code"] = "N2STEMP";
filter_data_0_item_3["value"] = "0";
filter_data_0_item_3["module_name"] = "temperature sensor";
JsonObject filter_data_0_item_4 = filter_data_0_item.createNestedObject();
filter_data_0_item_4["code"] = "N3STEMP";
filter_data_0_item_4["value"] = "0";
filter_data_0_item_4["module_name"] = "temperature sensor";
JsonObject filter_data_0_item_5 = filter_data_0_item.createNestedObject();
filter_data_0_item_5["code"] = "N1SHUM";
filter_data_0_item_5["value"] = "0";
filter_data_0_item_5["module_name"] = "humidity sensor";
JsonObject filter_data_0_item_6 = filter_data_0_item.createNestedObject();
filter_data_0_item_6["code"] = "N2SHUM";
filter_data_0_item_6["value"] = "0";
filter_data_0_item_6["module_name"] = "humidity sensor";
JsonObject filter_data_0_item_7 = filter_data_0_item.createNestedObject();
filter_data_0_item_7["code"] = "N3SHUM";
filter_data_0_item_7["value"] = "0";
filter_data_0_item_7["module_name"] = "humidity sensor";
JsonObject filter_data_0_item_8 = filter_data_0_item.createNestedObject();
filter_data_0_item_8["code"] = "N1SLIGHT";
filter_data_0_item_8["value"] = "0";
filter_data_0_item_8["module_name"] = "light sensor";
JsonObject filter_data_0_item_9 = filter_data_0_item.createNestedObject();
filter_data_0_item_9["code"] = "N2SLIGHT";
filter_data_0_item_9["value"] = "0";
filter_data_0_item_9["module_name"] = "light sensor";
JsonObject filter_data_0_item_10 = filter_data_0_item.createNestedObject();
filter_data_0_item_10["code"] = "N3SLIGHT";
filter_data_0_item_10["value"] = "0";
filter_data_0_item_10["module_name"] = "light sensor";
DynamicJsonDocument doc(1536);
DeserializationError error = deserializeJson(doc, a, DeserializationOption::Filter(filter));
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.f_str());
return;
}
JsonArray data_0_modules = doc["data"][0]["modules"];
JsonObject data_0_modules_0 = data_0_modules[0];
const char* data_0_modules_0_slug = data_0_modules_0["slug"]; // "Heater"
const char* data_0_modules_0_min = data_0_modules_0["min"]; // "15"
const char* data_0_modules_0_max = data_0_modules_0["max"]; // "20"
JsonObject data_0_modules_1 = data_0_modules[1];
const char* data_0_modules_1_slug = data_0_modules_1["slug"]; // "air-conditioner-(cold)"
const char* data_0_modules_1_min = data_0_modules_1["min"]; // "30"
const char* data_0_modules_1_max = data_0_modules_1["max"]; // "35"
const char* data_0_modules_2_slug = data_0_modules[2]["slug"]; // "temperature-sensor"
const char* data_0_modules_3_slug = data_0_modules[3]["slug"]; // "Humidity-sensor"
JsonObject data_0_modules_4 = data_0_modules[4];
const char* data_0_modules_4_slug = data_0_modules_4["slug"]; // "light-sensor"
const char* data_0_modules_4_min = data_0_modules_4["min"]; // "100"
const char* data_0_modules_4_max = data_0_modules_4["max"]; // "120"
for (JsonObject data_0_item_item : doc["data"][0]["item"].as<JsonArray>()) {
const char* data_0_item_item_code = data_0_item_item["code"]; // "NRHEAT", "NRCON", "N1STEMP", ...
const char* data_0_item_item_value = data_0_item_item["value"]; // "0", "0", "0", "0", "0", "0", "0", ...
}
The decoded Exception stack error
**xception 9: LoadStoreAlignmentCause: Load or store to an unaligned address** *Decoding 34 results* 0x40207ea2: **init_object** at /workdir/repo/gcc-gnu/libgcc/**unwind-dw2-fde.c** line **818** : **(inlined by) search_object** at /workdir/repo/gcc-gnu/libgcc/**unwind-dw2-fde.c** line **1001** 0x40203d57: **Stream::readString()** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**Stream.cpp** line **253** 0x402021a4: **ArduinoJson6185_91::ArrayShortcuts >::createNestedObject() const** at C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/**ArrayImpl.hpp** line **19** : **(inlined by) checkrelaycaran()** at G:\smiley farm\proto2/**proto2.ino** line **204** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x401025b8: **pp_post** at ?? line **?** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x401025b8: **pp_post** at ?? line **?** 0x40101f02: **pp_soft_wdt_feed_local** at ?? line **?** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x40103559: **wDev_ProcessFiq** at ?? line **?** 0x401060e9: **ets_timer_disarm** at ?? line **?** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x40100584: **ets_post** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **181** 0x401060e9: **ets_timer_disarm** at ?? line **?** 0x401060e9: **ets_timer_disarm** at ?? line **?** 0x40206bf2: **std::_Function_handler::_M_invoke(std::_Any_data const&)** at time.cpp line **?** 0x402051b1: **uart_peek_consume** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**uart.cpp** line **276** 0x40204694: **print_stack** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_postmortem.cpp** line **246** 0x402046a0: **print_stack** at core_esp8266_postmortem.cpp line **?** 0x40100d4f: **umm_free_core** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266\umm_malloc/**umm_malloc.cpp** line **549** 0x40203bf7: **unsigned int const& std::min(unsigned int const&, unsigned int const&)** at c:\users\admin\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits/**stl_algobase.h** line **237** : **(inlined by) Print::print(__FlashStringHelper const*)** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**Print.cpp** line **103** 0x4020602c: **WVFState::WVFState()** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_waveform_pwm.cpp** line **64** : **(inlined by) __static_initialization_and_destruction_0** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_waveform_pwm.cpp** line **86** : **(inlined by) _GLOBAL__sub_I__setPWMFreq** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_waveform_pwm.cpp** line **666** 0x40100625: **millis** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_wiring.cpp** line **188** 0x40203d14: **Stream::timedRead()** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**Stream.cpp** line **40** 0x402035e9: **SoftwareSerial::~SoftwareSerial()** at ?? line **?** 0x401005a5: **esp_schedule** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**core_esp8266_main.cpp** line **129** 0x402051e8: **uart_read** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**uart.cpp** line **295** : **(inlined by) uart_read** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**uart.cpp** line **287** 0x401011e1: **cont_wrapper** at C:\Users\admin\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/**cont.S** line **81**
and of course the response
{"data":[{"title":"mesh","greenhouse_serial":"12345","modules":[{"title":"\u0647\u06cc\u062a\u0631","slug":"Heater","type":"controller","min":"15","max":"20","func":"on"},{"title":"\u0647\u0648\u0627\u0633\u0627\u0632 \u0633\u0631\u062f","slug":"air-conditioner-(cold)","type":"controller","min":"30","max":"35","func":"on"},{"title":"\u0633\u0646\u0633\u0648\u0631 \u062f\u0645\u0627","slug":"temperature-sensor","type":"sensor","min":null,"max":null,"func":"default"},{"title":"\u0633\u0646\u0633\u0648\u0631 \u0631\u0637\u0648\u0628\u062a","slug":"Humidity-sensor","type":"sensor","min":null,"max":null,"func":"default"},{"title":"\u0633\u0646\u0633\u0648\u0631 \u0646\u0648\u0631","slug":"light-sensor","type":"sensor","min":"100","max":"120","func":"off"}],"item":[{"code":"NRHEAT","value":"0","module_name":"\u0647\u06cc\u062a\u0631"},{"code":"NRCON","value":"0","module_name":"\u0647\u0648\u0627\u0633\u0627\u0632 \u0633\u0631\u062f"},{"code":"N1STEMP","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u062f\u0645\u0627"},{"code":"N2STEMP","value":"7","module_name":"\u0633\u0646\u0633\u0648\u0631 \u062f\u0645\u0627"},{"code":"N3STEMP","value":"11","module_name":"\u0633\u0646\u0633\u0648\u0631 \u062f\u0645\u0627"},{"code":"N1SHUM","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0631\u0637\u0648\u0628\u062a"},{"code":"N2SHUM","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0631\u0637\u0648\u0628\u062a"},{"code":"N3SHUM","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0631\u0637\u0648\u0628\u062a"},{"code":"N1SLIGHT","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0646\u0648\u0631"},{"code":"N2SLIGHT","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0646\u0648\u0631"},{"code":"N3SLIGHT","value":"0","module_name":"\u0633\u0646\u0633\u0648\u0631 \u0646\u0648\u0631"}]}]}
i tried making it smaller by getting red of the unnecessary data but it didn't work, thanks in advance.