플밍

아두이노에서 Json 사용하기 본문

프로그래밍/아두이노

아두이노에서 Json 사용하기

너구리안주 2015. 9. 17. 18:53

ArduinoJson 은 Arduino 에서 Json 을 사용할 수 있는 라이브러리입니다.

#ads_1


해당 페이지에 예제가 있지만 Json 동적생성에 대한 자료가 조금 부족해 보여 테스트를 해보았습니다.


[

  [
    {"aaa":"AAA","aab":"AAB"},
    {"aba":"ABA","abb":"ABB"}
  ],
 
  [
    {"baa":"BAA","bab":"BAB"},
    {"bba":"BBA","bbb":"BBB"}
  ]
]

위와 같은 2차원 배열로 구성된 json을 만들어서 loop에서 출력하는 예제입니다

#ads_2

#include <ArduinoJson.h>

//Json버퍼를 만든다
StaticJsonBuffer<200> jsonBuffer;  //200은 버퍼크기

//다른곳에서도 사용하기 위해 포인터로 선언했다
JsonArray* group = &jsonBuffer.createArray();
JsonArray* olist = &group->createNestedArray();
JsonObject* option;



void setup() {
  Serial.begin(9600);

  group = &jsonBuffer.createArray();  // group 배열을 만든다 (1차원)

  olist = &group->createNestedArray();  // group 배열안에 olist 배열을 만든다 (2차원)

  option = &olist->createNestedObject();  // olist 배열에 object를 만든다
  option->set("aaa", "AAA");  // (*option)["aaa"] = "AAA";
  option->set("aab", "AAB");

  option = &olist->createNestedObject();
  option->set("aba", "ABA");
  option->set("abb", "ABB");


  olist = &group->createNestedArray();

  option = &olist->createNestedObject();
  option->set("baa", "BAA");
  option->set("bab", "BAB");

  option = &olist->createNestedObject();
  option->set("bba", "BBA");
  option->set("bbb", "BBB");
}


void loop() {
  
  //임시변수라서 무조건 참조로 받아야 된다
  JsonArray& ol = group->get(0);
  JsonObject& o = ol[0];
 
  String s = o["aaa"];  // 변수의 형태에 따라 자동 변환된다
  Serial.println(s);  // "AAA" 를 출력한다
  Serial.println(group->size()); // group 배열의 크기를 출력한다

  //Serial.println(o["aaa"].asString());  //바로 사용하려면 as<타입> 형태로 캐스팅해준다
  //o.printTo(Serial);  // json 객체를 그대로 출력하기 위한 방법
  //Serial.println("");

}


주의할 점은 group->get(0) 에서 포인터로 받으면 안됩니다.

get 함수내에서 임시 생성한 변수라서 리턴한뒤 사라지기 때문에 포인터로 받으면 에러가 납니다.

gcc만 그런건지 잘 모르겠지만 자바처럼 참조 개수가 0이 되면 메모리에서 사라지는 모양입니다

제가 c++실력이 허접해서 이부분에서 한참 고생했네요 ㅠㅠ

#ads_3

Comments