查看: 443|回复: 9

[分享] 用Blinker获取天气信息并用ArduinoJson6分析数据(arduino D1)

[复制链接]
  • TA的每日心情
    奋斗
    2019-8-23 00:00
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2019-7-28 11:56 | 显示全部楼层 |阅读模式
    本帖最后由 zjssun 于 2019-7-28 18:15 编辑

    在Blinker最新版本的库中我们看到它用了ArduinoJson6,图中的两个类是ArduinoJson6的类 Inked捕获1_LI.jpg 首先我们看看ArduinoJson5到ArduinoJson6到底改变了什么类(部分)

    我们熟悉的DynamicJsonBuffer jb;StaticJsonBuffer<200> jsonBuffer;分别变为DynamicJsonDocument doc(1024);和StaticJsonDocument<200> doc;


    JasonBuffer被JasonDocument取代,JasonDocument可看作是JasonBuffer和JasonVariant的结合。

    kittenblock中小学创客名师推荐的图形化编程软件

    //ArduinoJson5
    StaticJsonBuffer<200> jsonBuffer;

    kittenblock中小学创客名师推荐的图形化编程软件

    //ArduinoJson6
    StaticJsonDocument<200> doc;



    kittenblock中小学创客名师推荐的图形化编程软件

    //ArduinoJson 6
    DynamicJsonDocument doc(1024);



    在ArduinoJson6中用函数deserializeJson()来调用解析器,DeserializatopnError用来告诉解析失败的原因。
    [

    kittenblock中小学创客名师推荐的图形化编程软件

    //ArduinoJson5
    JsonObject& root = jsonBuffer.parseObject(json);
    if(!root.success()){
            Serial.println("parseObject() failed");
              return;
    }    

    kittenblock中小学创客名师推荐的图形化编程软件

    //ArduinoJason6
    DeserializationError error =  deserializeJson(doc,json);
    if(error)
    {
            Serial.print("..");
            Serial.println(error.c_str());//显示错误代码
            return;
    }


    root改为doc

    kittenblock中小学创客名师推荐的图形化编程软件

    //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


    kittenblock中小学创客名师推荐的图形化编程软件

    //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/        



    下面我分享一下用Blinker获取天气信息并用ArduinoJson6分析数据的代码 (arduino D1开发板测试)

    kittenblock中小学创客名师推荐的图形化编程软件

    #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);
      const size_t capacity = JSON_OBJECT_SIZE(13) + 140;
       DynamicJsonDocument doc(400);
        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 dataRead(const String & data)
    {
        BLINKER_LOG("Blinker readString: ", data);
        uint32_t BlinkerTime = millis();
        Blinker.vibrate(500);        
        Blinker.print("millis", BlinkerTime);
        digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
        Blinker.weather("beijing");
        Blinker.delay(600);
    }
    
             
    
    void setup()
    {
        Serial.begin(115200);
        BLINKER_DEBUG.stream(Serial);
        pinMode(LED_BUILTIN, OUTPUT);
        digitalWrite(LED_BUILTIN, LOW);
        Blinker.begin(auth, ssid, pswd);
        Blinker.attachData(dataRead);
        Blinker.attachWeather(weatherData);
    }
    
    void loop()
    {
        Blinker.run();
        Blinker.weather("yunfu");
        Blinker.delay(500);
    }


    效果图:
    捕获2.PNG

    最后附上ArduinoJson6的库: ArduinoJson-6.x.zip (340.68 KB, 下载次数: 5)
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:03 | 显示全部楼层

    回帖奖励 +3 金币

    呃呃呃。。。看不懂
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:04 | 显示全部楼层
    呃呃呃。。。看不懂x2
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:04 | 显示全部楼层
    呃呃呃。。。看不懂x3
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:05 | 显示全部楼层
    呃呃呃。。。看不懂x4
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:06 | 显示全部楼层
    呃呃呃。。。看不懂x5
  • TA的每日心情
    开心
    2019-8-19 00:27
  • 签到天数: 67 天

    [LV.6]常住居民II

    发表于 2019-7-28 17:07 | 显示全部楼层
    呃呃呃。。。看不懂x6
  • TA的每日心情
    无聊
    2019-8-18 10:23
  • 签到天数: 101 天

    [LV.6]常住居民II

    发表于 2019-8-2 15:44 | 显示全部楼层
    学习下,正愁如何解析天气
    你今天的打赏,是我明天学习Arduino的动力!
  • TA的每日心情
    奋斗
    2019-8-23 00:00
  • 签到天数: 26 天

    [LV.4]偶尔看看III

     楼主| 发表于 2019-8-4 22:40 | 显示全部楼层
    谢谢大佬支持
  • TA的每日心情
    奋斗
    2019-8-21 00:33
  • 签到天数: 85 天

    [LV.6]常住居民II

    发表于 2019-8-4 23:48 | 显示全部楼层
    大佬牛逼!过来顶个贴,学习学习
    觉得好就打赏一下吧!!让我有动力继续写教程
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    一直显示'Serial' was not declared in this scope,求前辈解答谢谢
    一直显示'Serial'
    做了一个温控装置的蓝牙模块时遇到的问题,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(97)---0.96寸OLED液晶屏
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    教你让OLED动起来!多重字符串版!
    教你让OLED动起来!多重字
    大家都知道:arduino单片机是单线程的 而上次教程中的多段字符串的运行速度必须一致
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表