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:獲取天氣情況

總結:網上的資料雖很多,並不是隨便搬過來就能用,迅速找到靠譜並且轉換吸收的能力很重要。


分享到:


相關文章: