2020年5月9日 星期六

利用MicroPython透過OpenWeather取得百香果故鄉的氣象資料

俗語說看天吃飯,這是農夫生活的寫照,隨著科技進步,天氣預測已經不在是一件困難的事。
取得天氣的網站:
國際組織OpenWeather:https://openweathermap.org/

1.註冊成為會員,網址:https://home.openweathermap.org/users/sign_up



2.收到確認信,請確認。

3.收到API-KEY的信,下圖塗掉即為敏哥上網申請的KEY。

4.測試,打開網頁,輸入下列網址,記得要換上您的KEY
http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID={your key}

5.選擇網站上Maps放大查詢百香果故鄉-埔里的氣象資料


6.改用URL查詢
https://api.openweathermap.org/data/2.5/weather?q=Buli,TW&units=metric&lang=zh_tw&appid={your key}

7.把上述資料,填入https://jsoneditoronline.org/就可以觀察JSON格式

8. 使用IDLE撰寫讀取百香果故鄉氣象資料的程式,記得KEY要換成您申請的。

1
2
3
4
5
6
7
8
9
import requests

r = requests.get(
'https://api.openweathermap.org/data/2.5/weather?\
q=Buli,TW&units=metric&lang=zh_tw&\
appid={your key}'
)

print(r.text)

9.執行結果

10.轉換成json格式進行資料操作,記得KEY要換成您申請的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import requests
import json

r = requests.get(
'https://api.openweathermap.org/data/2.5/weather?\
q=Buli,TW&units=metric&lang=zh_tw&\
appid={your key}'
)

j = json.loads(r.text)
weatherID = j["weather"][0]["id"]       # 天氣狀況代碼
weatherDesc = j["weather"][0]["description"] # 天氣狀況

print(weatherID)
print(weatherDesc)

print(r.text)

11.執行結果

12.使用upycraft工具來編輯ESP8266的程式
boot.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Complete project details at https://RandomNerdTutorials.com

try:
  import usocket as socket
except:
  import socket

from machine import Pin
import network

import esp
esp.osdebug(None)

import gc
gc.collect()

ssid = {your ssid}
password = {your password}

station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print('Connection successful')
print(station.ifconfig())

led = Pin(2, Pin.OUT)

weather.py (本程式有參考旗標出版)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
import network, urequests, ujson, machine
res = urequests.get(               # API 網址
    "https://api.openweathermap.org/data/2.5/weather?" +
    "q=" + "Buli" + ",TW" +      # 指定城市與國別
    "&units=metric&lang=zh_tw&" +  # 使用攝氏單位
    "appid=" +  # 以下填入註冊後取得的 API key
    {your key})

j = ujson.loads(res.text);         # 從 JSON 轉成字典
gLED = machine.Pin(12, machine.Pin.OUT) # 控制綠燈
rLED = machine.Pin(15, machine.Pin.OUT) # 控制紅燈
weatherID = j["weather"][0]["id"]       # 天氣狀況代碼
weatherDesc = j["weather"][0]["description"] # 天氣狀況
if weatherID < 800:                # 雨天
    rLED.value(1)                  # 亮紅燈
    gLED.value(0)
else:                              # 沒下雨
    rLED.value(0)                  # 亮綠燈
    gLED.value(1)
print("目前天氣:", str(weatherID))
print("代碼意義:", weatherDesc )

13.記得存檔並下載到ESP8266,執行結果


上圖就是使用ESP8266,用MicroPython 透過OpenWeather取得百香果故鄉的氣象資料,未來加上Line Bot就能用數百元成本設計一個可以自動傳送天氣資料給農夫。

延伸文章:https://passionfruittaiwan.blogspot.com/2020/05/python.html

沒有留言:

張貼留言