2467|2

2549

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

【ART-Pi测评】五:联网获取天气数据 [复制链接]

  本帖最后由 数码小叶 于 2021-8-1 22:48 编辑

在上一篇中,已经实现了art-pi的网络自动连接,并且可以获取网络时间,还差一个天气情况。 RT-Thread提供了丰富的组件,webclient 是 RT-Thread 上实现的一个 HTTP 客户端,用来提供高效且功能丰富的 HTTP 客户端编程工具包,利用这个工具可以完成与 HTTP 服务器的通信。

 

打开webclient,并且使能开启 webclient 的 GET/POST 示例

 

 

再打开包里http客户端示例

 

 

打开的示例,中文显示是乱码,不方便理解,需要修改文档的编码格式,修改后就可以正常显示了

 

 

在http示例里,其获取天气的服务器是http://mobile.weather.com.cn/data/sk/%s.html,实际测试已经打不开

 

后来在文档中看到了这个的说明“此程序仅为 http client 的示例程序,其中获取天气的 API 已经被弃用,实际使用时更换为其他的 API 才可获取最新的天气。”因此,想要获取天气数据,只能更改API了,于是参考了 RT-thread入门课程中的心知天气获取,更改为心知的API。

 

 

虽然第一次使用,但是发现利用官网页面还是很容易上手的。心知天气按收费分为好几个版本,越贵的参数越多,不过,免费的感觉已经够用了。注册一个账户先。

 

 

其接口API,有详细的说明,每个参数的函数,以及每个参数是否要给出都有介绍,使用起来很容易操作

 

实际来获取指定城市,查询时的天气实况

{
    "results":[
     {
        "location":
        {
            "id":"WTS4JZ3WMZMC",
            "name":"芜湖",
            "country":"CN",
            "path":"芜湖,芜湖,安徽,中国",
            "timezone":"Asia/Shanghai",
            "timezone_offset":"+08:00"
        },
        "now":
        {
            "text":"阴",
            "code":"9",
            "temperature":"25"
        },
        "last_update":"2021-07-28T21:43:20+08:00"
     }
    ]
}

 

再比如获取指定城市三天的天气情况

{
    "results":[
     {
        "location":
        {
            "id":"WTS4JZ3WMZMC",
            "name":"芜湖",
            "country":"CN",
            "path":"芜湖,芜湖,安徽,中国",
            "timezone":"Asia/Shanghai",
            "timezone_offset":"+08:00"
        },
        "daily":[
         {
            "date":"2021-07-28",
            "text_day":"阴",
            "code_day":"9",
            "text_night":"阴",
            "code_night":"9",
            "high":"28",
            "low":"24",
            "rainfall":"5.67",
            "precip":"0.99",
            "wind_direction":"西南",
            "wind_direction_degree":"229",
            "wind_speed":"21.92",
            "wind_scale":"4",
            "humidity":"94"
         },
         {
             "date":"2021-07-29",
             "text_day":"阴",
             "code_day":"9",
             "text_night":"晴",
             "code_night":"1",
             "high":"30",
             "low":"22",
             "rainfall":"1.2",
             "precip":"0.43",
             "wind_direction":"西",
             "wind_direction_degree":"274",
             "wind_speed":"19.91",
             "wind_scale":"4",
             "humidity":"89"
         },
         {
              "date":"2021-07-30",
              "text_day":"晴",
              "code_day":"0",
              "text_night":"阴",
              "code_night":"9",
              "high":"32",
              "low":"25",
              "rainfall":"1.2",
              "precip":"0.41",
              "wind_direction":"西南",
              "wind_direction_degree":"237",
              "wind_speed":"6.59",
              "wind_scale":"2",
              "humidity":"81"
         }
         ],
         "last_update":"2021-07-28T20:00:00+08:00"
     }
    ]
}

 

因为获取到的数据是json格式的,因此可以利用rt-thread的cJSON 软件包来解析天气

 

 

保存配置后,打开cjson.c文件,可以看到很多解析接口,利用这些接口去解析刚才获取的天气数据

 if((subobject = cJSON_GetObjectItem(object,"location")) != NULL)
 {
    if((item = cJSON_GetObjectItem(subobject,"id")) != NULL)
    if((item = cJSON_GetObjectItem(subobject,"name")) != NULL) 
    if((item = cJSON_GetObjectItem(subobject,"country")) != NULL)
    if((item = cJSON_GetObjectItem(subobject,"path")) != NULL)
    if((item = cJSON_GetObjectItem(subobject,"timezone")) != NULL)
    if((item = cJSON_GetObjectItem(subobject,"timezone_offset")) != NULL)                   
 }

 

解析完成后打印输出

中文和英文实际差距很小,一个是&language=en,一个是&language=zh-Hans,或者直接不带这个参数。也可以自己直接在printf里修改,在心知的API里,提供了详细的天气现象代码说明

根据代码对照表就很容易修改printf里的字符串了

 

最新回复

组件多了确实方便。   详情 回复 发表于 2021-8-2 16:41
点赞 关注
 

回复
举报

6802

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

楼主这个RT-Thread联网获取天气数据整的很好,收藏

 
 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

组件多了确实方便。

 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表