醬是創客的ESP32教學主題第九篇,以Ai-Thinker安信可NodeMCU-32S(使用Arduino語言)來實作教學,本篇教學將著重使用ArduinoJson套件讓字串與JSON文字檔互相轉換,ArduinoJson的JSON轉換效率高,可以做到Serialize和Deserialize,一般我們不建議JSON檔案裡面塞太多東西,通常都會塞User ID、指令、傳送訊息等簡單的資料,通常我們會把它控制在100bytes,畢竟Arduino開發板的RAM沒有很大,JSON傳太多Azure和GCP的費用也很高。

以下是我們今天的目標

  • 安裝使用ArduinoJson.h
  • Serialize JSON是將字串轉JSON格式
  • Deserialize JSON是將JSON轉字串格式
  • StaticJsonDocument<200> 的200是200bytes放memory區,所以不能宣告太大,不然會overflow,也因為有StaticJsonDocument所以大量讀取JSON也不會很慢
  • DeserializationError json_error的json_error是來判斷反解的JSON是否正常,正常後才能解出資料

設備:
安信可NodeMCU-32S #露天拍賣 #蝦皮購物

如何安裝ArduinoJson套件? 至”工具”>>”管理程式庫”,搜尋ArduinoJson,作者為Benoit Blanchon,並安裝它。

Arduino 範例程式碼如下

//醬是創客 開發實作的好夥伴
#include "WiFi.h"
#include <ArduinoJson.h>
StaticJsonDocument<200> json_doc;
char json_output[100];
DeserializationError json_error;
const char* payload_room;
const char* payload_msg;
 
void setup() {
  Serial.begin(115200);
  //字串轉JSON
  json_doc["room"] = "chosemaker";
  json_doc["msg"] = "www.chosemaker.com";
  serializeJson(json_doc, json_output);
  Serial.println( "string to json:" ); 
  Serial.println( json_output ); 

  //JSON轉字串
  json_error = deserializeJson(json_doc, json_output);
  if (!json_error) {
    payload_room = json_doc["room"];
    payload_msg = json_doc["msg"];
    Serial.println( "json to string:" ); 
    Serial.println( "payload_room:" ); 
    Serial.println(payload_room);
    Serial.println( "payload_msg:" ); 
    Serial.println(payload_msg);
  }
}
 
void loop() {
   
}
 

Arduino 序列埠監控視窗 輸出如下

string to json:
{"room":"chosemaker","msg":"www.chosemaker.com"}
json to string:
payload_room:
chosemaker
payload_msg:
www.chosemaker.com