良许Linux教程网 干货合集 MicroPython 玩转硬件系列6:获取天气情况

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

前面几篇文章详细介绍了MicroPython的一些基本功能。今天我们要实现一个更有趣的功能:获取天气情况。当我想要开始实现时,却发现了一些问题。不过,我将与大家分享我实现这个功能的整个过程。

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

首先,我们需要在电脑上使用Python来实现这个功能。

通过网络搜索,我发现有很多网站提供API服务,但是很多网站要收费或需要注册才能使用。幸运的是,我在这篇文章(https://zhuanlan.zhihu.com/p/26369491)中找到了一个不需要注册就能直接使用的网站:http://www.weather.com.cn/。我试了一下,发现确实可以通过以下步骤获取到数据。

  1. 首先,我们需要安装Python的HTTP库——requests。
pip install requests
  1. 然后,我们在http://www.weather.com.cn/这个网站上输入北京或其他城市的名称,并点击搜索。
image-20231016213631781
image-20231016213631781

获取北京的代码101010100:

image-20231016213643070
image-20231016213643070

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

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’]

显示结果如下:

image-20231016213646605
image-20231016213646605

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

image-20231016213650309
image-20231016213650309

但是后来却发现这个网站并不靠谱,原因是首先这个值压根就不变,其次我换了一个其他的城市,比如合肥

image-20231016213654896
image-20231016213654896

发现和实际的天气情况差别巨大:

image-20231016213659186
image-20231016213659186

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

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

这是API说明

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

这个是Github代码例子:

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

用了一下挺不错的。

下面是示例代码:

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’]

显示结果如下:

image-20231016213704046
image-20231016213704046

换成合肥的再试试

image-20231016213707949
image-20231016213707949

这个还是比较靠谱的。

免费用户只返回天气现象文字、代码和气温 3 项数据。付费用户可获取全部数据,包括气压、能见度、风速等。

上面的代码requests get方法获取的是JSON格式的数据,JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.

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

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

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

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’]

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

结果如下:

image-20231016213712359
image-20231016213712359

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

image-20231016213716816
image-20231016213716816

最后结果如下:

image-20231016213719985
image-20231016213719985

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部