C++(아두이노)에서 JSON 만드는법

낭만개발자·2020년 4월 23일
0

아두이노에서 센서로부터 데이터를 받아 JSON으로 만들어 처리해야 하는 코드!!

ArduinoJson 설치

아두이노에서 json을 사용하려면

스케치> 라이브러리 포함하기 > 라이브러리 관리
에서 ArduinoJson을 등록해준다.
(여기서 6.15.1 최신버전으로 등록하는게 좋다. 5vs6 버전의 차이가 좀 있다.)

ArduinoJson 인스톨 방법 : https://arduinojson.org/v6/doc/installation/
ArduinoJson ver 5와 6 차이점(보통 인터넷에 ver5 레퍼런스가 많다) : https://arduinojson.org/v6/doc/upgrade/

나는 편의상 repl.it 에서 c++ 코드 사용해서 프로토타입 만들었다. repl.it에서 사용하려면 위에 인스톨 방법 링크 가서 ArduionJson.h 파일 다운받는다.
그리고 repl.it에서 아래 사진처럼 ArduionJson.h 다운받은 파일 추가하고 main.cpp에
#include "ArduionJson.h" 추가해서 연결해준다.

아래 소스

...
string jsondata = "";

StaticJsonDocument <1500> doc;
// DynamicJsonDocument doc(1024); 동적json 생성
JsonObject root = doc.to<JsonObject>();

JsonArray leftPressure = root.createNestedArray("leftPressure");
JsonArray rightPressure =root.createNestedArray("rightPressure");
JsonArray leftCop =root.createNestedArray("leftCop");
JsonArray rightCop =root.createNestedArray("rightCop");
JsonArray leftTemper =root.createNestedArray("leftTemper");
JsonArray rightTemper =root.createNestedArray("rightTemper");

serializeJsonPretty(doc, jsondata);

cout <<jsondata; **//프린트하기**
...

StaticJsonDocument<1500> doc
동적 할당이 아닌 정적으로 메모리 할당할 때 사용하며, <> 안에 바이트 수를 넣는다.
1500바이트 한 Document 사용하겠다는 말임!
StaticJsonDocument vs DynamicJsonDocument
선자는 stack에 후자는 heap에 저장. 1kb 이하면 선자 추천, 이상이면 후자 추천이라함.

doc.to<JsonObject>();
자료형을 JsonObject로 전환 하겠다는 말임.
JsonObject root를 인스턴트로 만들어 놓고

JsonArray나 JsonObject을 추가하면된다.
root.createNestedArray("키 이름")
난 Array를 root밑에 추가 하고 싶어서 위처럼 입력하면 json 객체 내 array가 추가된다.

다 원하는 키를 생성해주고 마지막에
serializeJsonPretty(만들었던 jsonDocument, json넣을String 변수)
추가하면 string 변수에 jsonObject가 직렬화 되어 할당된다.

결과 :

API 문서: https://arduinojson.org/v6/api/

실력자라면
https://arduinojson.org/v6/assistant/
뒤늦게 알았는데 원하는 json 넣으면 자동 코드 넣어준다 위에 코드할 필요없이 위 사이트가면 자동생성. 늦게 알았음 ㅠ

pS. 프로젝트 하기 전에 API이 문서는 읽기
JsonDocument: https://arduinojson.org/v6/api/jsondocument/

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

2개의 댓글

comment-user-thumbnail
2021년 6월 15일

감사합니다 큰 도움이 되었습니다

1개의 답글