本實作將利用ESP8266建立無線網路連線取得 openweathermap 氣象網站的資料,並將相關的項資料透過 IFTTT 服務平台將天氣資料透過 EMail 寄送給特定對象。
from urlencode import urlencode import network import urequests, ujson #網路天氣URI參數設定與組合 API_key = "" area = "Taipei,TW" url = "https://api.openweathermap.org/data/2.5/weather?" url += "q=" + area # 城市與國別 url += "&units=metric&lang=zh_tw" # 溫度單位、語言 url += "&appid=" + API_key #指定IFTTT服務金鑰 #IFTTT_KEY = " " #設定網路連線帳號密碼 SSID = " " # WiFi名稱 PASSWORD = " " # WiFi密碼 #自訂無線基地台連線函式 def connect_wifi(ssid, passwd): sta = network.WLAN(network.STA_IF) sta.active(True) if not sta.isconnected(): print("連線中... \n") sta.connect(ssid, passwd) while not sta.isconnected(): pass print("連線成功... \n") #進行網路連線 connect_wifi(SSID, PASSWORD) #嘗試取回天氣資料並加以解析 try: response = urequests.get(url) data = ujson.loads(response.text) #轉換JSON格式資料成Python字典物件 except: data = None #串接IFTTT服務的網址資訊 if not data: print("沒有查詢到天氣資料") else: print("天氣資料接收成功") main = data["main"] temp = main["temp"] params = { "value1": "溫度 " + str(temp), "value2": "濕度 " + str(main["humidity"]) } WEBHOOK_URL="https://maker.ifttt.com/trigger/EmailTest/with/key/" + IFTTT_KEY WEBHOOK_URL+="/?" + urlencode(params) #使用urequests.get()方法觸發IFTTT服務送出取得的天氣資訊 WEBHOOK = urequests.get(WEBHOOK_URL) if WEBHOOK is not None and WEBHOOK.status_code == 200: print("天氣資料Email傳送成功!!") else: print("天氣資料Email傳送失敗!!")
當上列程式碼順利執行後,取得的天氣資料就會藉由 IFTTT 服務平台寄出信件,收到類似下圖的天氣資料信件。