아두이노에서 센서로부터 데이터를 받아 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/
감사합니다 큰 도움이 되었습니다