如何使用ArdunioJson解析和合成Json数据包

发送Json数据包

注意:这里使用的ArduinoJson的V6版本,关于V6和V5版本的切换,可以按照报错网站查询并修改。

#include <ArduinoJson.h>
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("begin now");
}

void loop() {
  // put your main code here, to run repeatedly:
   DynamicJsonDocument data(256);
   data["temp"]=25;
   data["hum"]=110;
   char json_string[256];
   serializeJson(data,json_string);
   Serial.println(json_string);
}

在这里插入图片描述

解析Json数据包(int,char型)

// 电源属性修改的回调函数
void powerCallback(JsonVariant p)
{
    extern int a;
    int PowerSwitch = p["PowerSwitch"];
    if (PowerSwitch == 2)
    {
       digitalWrite(LED_BUILTIN,HIGH);  // 启动设备
       a=2;
    } 
    if (PowerSwitch == 3)
    {
       digitalWrite(LED_BUILTIN,LOW); // 启动设备
       a=3;
    }
}
//字符回调函数
void Receive_Zi_Fu_Callback(JsonVariant p)
{
      const char* Zi_Fu = p["Receive_Zi_Fu"];/
      String S(Zi_Fu);//const char*转String
      S = S.substring(2,6);	//截取字符串的一部分,可以去掉,比如123456,就是3456
      extern char *c;
      const int len=S.length();
      c = new char[len+1];
      strcpy(c,S.c_str());//Strinf转char* ,是为了OLED_ShowString
      OLED_ShowString(0,0,c,16);
      Serial.println(S);
    }

在这里插入图片描述

补充

不足

回调函数是一个中断函数,在中断函数中定义的全局变量型数组,可以返回到loop中,用Serial.println()进行输出,但是如果这个时候用Oled_Showing(),ESP8266就会死机。

什么是Json数据包

Json有对象数组/集合
对象格式:

{"key1":obj,"key2":obj,"key3":obj...}

数组集合:

{"Status":"true","InstanceId":"iot-public","Params":"","Time":"2021-07-20 08:14:03.156"}

就是用“属性”:“值”

关于char*和char

const char* ptr :这句话的意思是定义了一个指向字符常量的指针。也就是说 ptr是一个指向char*类型的常量,所以不能用ptr来修改所指向的内容就比如ptr[0]=‘s’;这是错的。

char str[] = "hello world"";
const char* ptr=str;
str[0]='g'//这是对的

关于char和String

char表示的是字符,定义用单引号
String表示字符串,定义用双引号
string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。
char *的内存管理由用户自己处理,很容易出现内存不足的问题。

当我们要存一个串,但是不知道其他需要多少内存时, 用string来处理就最好不过了。
当你知道了存储的内存的时候,可以用char *,但是不如用string的好,用指针总会有
隐患。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值