STM32 JSON 라이브러리 사용 - cJSON

토이 프로젝트로 STM32 보드의 LED를 외부 네트워크에서 제어하는 것을 만들고 있는데, STM32보드와 PC 앱간의 데이터 통신 형식으로 json을 사용하기 위해 임베디드 환경에 적합한 경량 라이브러리인 cjson을 GitHub에서 받아 STM32에서 빌드해서 사용하였다.

 

DaveGamble/cJSON

Ultralightweight JSON parser in ANSI C. Contribute to DaveGamble/cJSON development by creating an account on GitHub.

github.com

GitHub에서 소스를 내려받으면 여러 파일이 존재하지만, STM32에서 사용할 파일은 cJSON.c / cJSON.h 파일만 가져오면 된다. 그리고 어떤 수정도 없이 바로 빌드하여 사용이 가능하다.

json 디렉토리에 cJSON.c / cJSON.h 파일을 추가하고 빌드하여 사용이 가능하며, 아래의 사이트에서 cJSON API 문서를 제공하고 있어, 이것을 참고하여 json 생성 및 파싱을 할 수 있다.

 

Getting Started - CJSON - DocsForge

HomeGetting Started cJSON Ultralightweight JSON parser in ANSI C. Table of contents License MIT License Copyright (c) 2009-2017 Dave Gamble and cJSON contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software

cjson.docsforge.com

여기서 주의할 사항은 cJSON에서 사용하는 Number 타입은 모두 double로 선언되어 있어 json 파일을 디버깅할 때 Number 타입은 기본 빌드 옵션으로는 printf 함수로 출력되지 않는다는 것을 명심해야 한다. printf에서 float 또는 double 타입을 출력하기 위해서는 아래 이미지와 같이 'Use float with printf ...' 옵션을 추가하도록 한다.

STM32에서 float 타입을 출력하는 것은 많은 리소스를 사용한다고 하며, 디버깅 용도가 아니라면 이 옵션을 사용하는 것 은 지양하는 것이 좋다고 한다. 하지만 네트워크 환경에서 데이터를 송수신하기 위해 json 형식을 다시 string 형식으로 변환하여 사용하기 때문에 json을 사용한다면 이 옵션은 반드시 사용해야 한다.

 

STM32에서 json 형식을 사용하면서 위 옵션을 사용하지 않으려면 Number을 사용하지 않거나, cJSON 파일의 Number 타입에서 사용되는 double을 int로 변환해서 사용해야 한다.