签到天数: 867 天 [LV.10]以坛为家III
|
上贴写了,如何使用ESP8266获取免费的网络天气资讯:http://www.yfrobot.com.cn/thread-11877-1-1.html本帖将使用OLED来显示这些天气资讯!
首先登陆心知天气:http://www.thinkpage.cn/免费注册(邮箱激活即可使用)!
心知天气更改新IP - api.seniverse.com,原api - api.thinkpage.cn也可用(最好用新的),使用本文中的程序时,请保证你的ID是付费版、付费版、付费版(第一次注册会有免费试用)!
完成注册后,登陆自己的账户,按照下图操作,可免费使用15天!你如果懒得注册,可以使用我已经注册好的 APIKEYshqnpz15ahhefsrz,有效期:2016/9/5~2016/9/20!
电路连接:
OLED显示未来3天天气预报+当前天气资讯,演示视频【优酷网站观看】:
解惑:
1、黄色区域(两个界面相同)
* 左边的云朵的图标表示获取数据状态 -- 正在获取(云中向下箭头)、成功获取(云中√)
* 中间的日期为当天日期(从获取的JSON数据中提取)
* 右边的wifi信号,这个不用解释了吧(当前wifi信号强度)
2、蓝色区域<br> 界面一(3个天气图标):
* 未来3天的天气预报情况,界面空间限制,很多数据没有解析显示。
* 底部时间,为最后一次更新数据时间
界面二:
* 左上侧为当前天气图标及气温。
* 左下侧为最后一次更新数据时间
* 右侧:H-湿度 V-能见度 WD-风向 WS-风力等级(http://baike.baidu.com/view/465076.htm) P-大气压力
风向代码解释(其他参数应该比较好理解):
代码获取(github地址):
代码获取(百度网盘地址)):
常见问题:
★1 图片显示错位问题,库文件有变,将drawBitmap 函数改 drawXBitmap ;如果编译提示无此函数,请自行下载最新库文件。
★2 编译出现如下错误:“DynamicJsonBuffer is a class from ArduinoJson 5. Please see arduinojson.org/upgrade to learn how to upgrade your program to ArduinoJson version 6 ” 请注意 ArduinoJson 库文件版本,降至5.xx 版本即可正常编译程序。
★3 程序正常编译,但是总是重启,串口返回一堆数据,一般情况下,都是解析部分出现错误。
正常工作程序中可以看到,获取json数据是没问题的,显示“Read Over!”,下一步就是解析数据,就是解析错误导致程序重启。
串口读取的json数据:
Get the data from Internet!
{"results":[{"location":{"id":"WTUXK27DXN0R","name":"Huaian","country":"CN","path":"Huaian,Huaian,Jiangsu,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"Cloudy","code":"4","temperature":"29"},"last_update":"2020-04-30T17:19:00+08:00"}]}
Read Over!
两者进行对比,看下是否是某些数据没有了:对比发现
now下的数据只有 :text、code、temperature
我们解析了(这些应该是会员账号有的数据):
strcpy(userData->weather, root["results"][0]["now"]["text"]);
userData->weatherCode = root["results"][0]["now"]["code"];
strcpy(userData->temp, root["results"][0]["now"]["temperature"]);
strcpy(userData->feel, root["results"][0]["now"]["feels_like"]);
strcpy(userData->pressure, root["results"][0]["now"]["pressure"]);
strcpy(userData->hum, root["results"][0]["now"]["humidity"]);
strcpy(userData->visi, root["results"][0]["now"]["visibility"]);
strcpy(userData->wind, root["results"][0]["now"]["wind_direction"]);
userData->windScale = root["results"][0]["now"]["wind_scale"];
strcpy(userData->udate_now, root["results"][0]["last_update"]);
将没有数据的解析程序注释,应该就可以正常工作了。
|
|