【已更新】ArduinoJson6结合blinker分析获取weather数据
本帖最后由 zjssun 于 2020-1-18 16:26 编辑在Blinker最新版本的库中我们看到它用了ArduinoJson6,图中的两个类是ArduinoJson6的类
首先我们看看ArduinoJson5到ArduinoJson6到底改变了什么类(部分)
我们熟悉的DynamicJsonBuffer ;和 StaticJsonBuffer ;分别变为DynamicJsonDocument;和StaticJsonDocument;
JasonBuffer被JasonDocument取代,JasonDocument可看作是JasonBuffer和JasonVariant的结合。
补充内用:
ArduinoJson基本知识点:
①JsonDocument包含一个固定大小的内存池,带有单调分配器,可以将JSON文档存储在内存中
JsonDocument它有两种形式分别是:储存在堆栈中的StaticJsonDocument和储存在堆中的DynamicJsonDocument.
设置代码分别如下 用时根据自己需要输入一个函数即可。
StaticJsonDocument <200> doc;
DynamicJsonDocument doc (200);
其中<>和()内的数字是指定内存池的容量,容量指的是分析的Json数据,数据可以的到
ArduinoJson助手里计算数据大小https://arduinojson.org/v6/assistant/
②deserializeJson()该函数用来解析JSON输入并将结果放入JsonDocument.
deserializeJson()有两个参数
具体代码如下,假如有个Json数据data
deserializeJson(doc, data);
③DeserializationError用来告诉我们为什么dserializeJson()或desericalizeMsgPack()会失败 它是一个枚举型
具体代码如下:
DeserializationError err = deserializeJson(doc, data);
if (err) {
Serial.print(F("deserializeJson() failed: "))
Serial.println(err.c_str())
}下面是一个基本的ArduinoJson6分析Json数据的代码
#include <ArduinoJson.h>
void setup() {
Serial.begin(9600);
const char* input = "{\"sensor\":\"gps\",\"time\":13518,\"data\":}";
StaticJsonDocument<256> doc;
DeserializationError abc = deseralizeJson(doc, input);
if(abc){
Serial.print("ERROR:");
Serial.print(abc.c_str());
return;
}
const char* sensor = doc["sensor"];
long time = doc["time"];
float lat = doc["data"];
float lot = doc["data"];
Serial.println(sensor);
Serial.println(time);
Serial.println(lat, 6);
Serial.println(lot, 6);
}
void loop(){
}
下面是ArduinoJson5到ArduinoJson6的代码变化
//ArduinoJson5
StaticJsonBuffer<200> jsonBuffer;//ArduinoJson6
StaticJsonDocument<200> doc;
//ArduinoJson 5
DynamicJsonBuffer jb;
//ArduinoJson 6
DynamicJsonDocument doc(1024);
在ArduinoJson6中用函数deserializeJson()来调用解析器,DeserializatopnError用来告诉解析失败的原因。
[//ArduinoJson5
JsonObject& root = jsonBuffer.parseObject(json);
if(!root.success()){
Serial.println("parseObject() failed");
return;
}
//ArduinoJason6
DeserializationError error =deserializeJson(doc,json);
if(error)
{
Serial.print("..");
Serial.println(error.c_str());//显示错误代码
return;
}
root改为doc
//ArduinoJson5
const char* cloud = root["cloud"]; // "0"
const char* cond_code = root["cond_code"]; // "101"
const char* cond_txt = root["cond_txt"]; // "多云"
const char* fl = root["fl"]; // "31"
const char* hum = root["hum"]; // "81
//ArduinoJson6
const char* cloud = doc["cloud"]; // "0"
const char* cond_code = doc["cond_code"]; // "101"
const char* cond_txt = doc["cond_txt"]; // "多云"
const char* fl = doc["fl"]; // "31"
const char* hum = doc["hum"]; // "81
ArduinoJson5到ArduinoJson6 改变的东西我分享到这里,大家可以到这里了解更多信息☛☛☛ https://arduinojson.org/v6/doc/upgrade/
下面是ArduinoJson6结合Blinker获取天气的数据分析(arduino D1开发板测试)
#define BLINKER_WIFI
#include <ArduinoJson.h>
#include <Blinker.h>
char auth[] = "blinker密钥";
char ssid[] = "wifi账号";
char pswd[] = "wifi密码";
void weatherData(const String & data)
{
BLINKER_LOG("weather: ", data);
StaticJsonDocument<400> doc;
DeserializationError error = deserializeJson(doc, data);
if(error)
{
Serial.print("ERROR IS:");
Serial.println(error.c_str());
return;
}
const char* cloud = doc["cloud"]; // "0"
const char* cond_code = doc["cond_code"]; // "101"
const char* cond_txt = doc["cond_txt"]; // ""
const char* fl = doc["fl"]; // "31"
const char* hum = doc["hum"]; // "81"
const char* pcpn = doc["pcpn"]; // "0.0"
const char* pres = doc["pres"]; // "997"
const char* tmp = doc["tmp"]; // "28"
const char* vis = doc["vis"]; // "16"
const char* wind_deg = doc["wind_deg"]; // "159"
const char* wind_dir = doc["wind_dir"]; //
const char* wind_sc = doc["wind_sc"]; // "2"
const char* wind_spd = doc["wind_spd"]; // "9"
Serial.print("风向:");
Serial.println(wind_dir);
Serial.print("天气:");
Serial.println(cond_txt);
}
void setup()
{
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Blinker.begin(auth, ssid, pswd);
Blinker.attachWeather(weatherData);
}
void loop()
{
Blinker.run();
Blinker.weather("yunfu");
Blinker.delay(500);
}
效果图:
最后附上ArduinoJson6的库:
呃呃呃。。。看不懂 呃呃呃。。。看不懂x2 呃呃呃。。。看不懂x3 呃呃呃。。。看不懂x4 呃呃呃。。。看不懂x5 呃呃呃。。。看不懂x6 学习下,正愁如何解析天气 谢谢大佬支持 大佬牛逼!过来顶个贴,学习学习