MicroPython 玩转硬件系列6:获取天气情况

前面几篇文章介绍了MicroPython的一些基础功能,今天实现一个稍微有趣且实用的功能:获取天气情况。本以为很容易实现,结果还是遇到了一些坑。把实现的整个过程分享给大家。

一种简单的实现方式是通过天气预报网站提供的API,直接获取结构化的数据,从而得到天气信息。

第一步,我们先在电脑上用Python实现该功能。

在网上查到有很多网站可以提供API服务,但很多都需要收费或者注册使用。在xxx.zhuanlan.zhihu.com/p/26369491 这个链接里看到作者说xxx.weather.com.cn/这个网站不用注册,可以直接使用。我试了下,通过以下步骤确实可以得到数据。

1) 先安装requests:

<code>pip install requests/<code>

2) 在xxx.weather.com.cn/ 网站,输入北京或者其他城市,点击搜索

MicroPython 玩转硬件系列6:获取天气情况

获取北京的代码101010100:

MicroPython 玩转硬件系列6:获取天气情况

下面几行代码就可以显示出风向和温度了:

<code>import requests

r = requests.get('http://www.weather.com.cn/data/sk/101010100.html')

r.encoding = 'utf-8'

print r.json()['weatherinfo']['city'], r.json()['weatherinfo']['WD'], r.json()['weatherinfo']['temp']/<code>

显示结果如下:

MicroPython 玩转硬件系列6:获取天气情况

本以为这功能就实现了,我还特意和网上搜索出来的天气对比了下,感觉也差不多。

MicroPython 玩转硬件系列6:获取天气情况

没想到后来发现这个方法并不靠谱,原因是首先这个值压根就不变,其次我换了一个其他的城市,比如合肥

MicroPython 玩转硬件系列6:获取天气情况

和实际的天气差别巨大:

MicroPython 玩转硬件系列6:获取天气情况

于是放弃了这个不靠谱的网站,转而寻找其他的网站。

经过一番寻找,找到了心知天气这个网站,

这是API说明

docs.seniverse.com/api/weather/now.html

这个是Github代码例子:

github.com/seniverse/seniverse-api-demos/tree/master/python

用了一下挺不错的。

下面是示例代码:

<code>import requests

Url = 'https://api.seniverse.com/v3/weather/now.json'
AppKey = '4r9bergjetiv1tsd'
Value = {'key':AppKey, 'location':'beijing','language':'zh-Hans','unit':'c'}

r = requests.get(Url,params=Value)

#print r.content
#print r.status_code
#print r.text
#print r.json()
print r.json()['results'][0]['location']['name'],r.json()['results'][0]['now']['temperature'],r.json()['results'][0]['now']['text']/<code>

显示结果如下:

MicroPython 玩转硬件系列6:获取天气情况

换成合肥的再试试

MicroPython 玩转硬件系列6:获取天气情况

这个还是比较靠谱的。

第二步,我们在ESP32上使用MicroPython来实现该功能。

1) 首先按照上一篇文章的方法,先让ESP32连接上WIFI热点可以先上网

2) 之后就可以通过下面几行代码实现功能

<code>import urequests

Url = 'https://api.seniverse.com/v3/weather/now.json?key=SK6E_7MBhPJr0_Cs3&location=beijing&language=zh-Hans&unit=c'

r = urequests.get(Url)

r.json()

print r.json()['results'][0]['location']['name'],r.json()['results'][0]['now']['temperature'],r.json()['results'][0]['now']['text']/<code> 

备注:MicroPython里用的是urequests,不是Python里的requests,另外语法格式上也有所不同。

结果如下:

MicroPython 玩转硬件系列6:获取天气情况

显示乱码是因为PuTTY设置问题,改为下面这样就可以了:

MicroPython 玩转硬件系列6:获取天气情况

MicroPython 玩转硬件系列6:获取天气情况

总结:网上的资料虽很多,并不是随便搬过来就能用,迅速找到靠谱并且转换吸收的能力很重要。


分享到:


相關文章: