本實作使用WeMos D1 Mini ESP8266的無線WiWi模組連上網路,利用HTTP的GET方法進行資料請求,自氣象網站取回天氣資料,故須先取得氣象網站的程式開發API Key,請參考這裡。
本實作使用 WeMos D1 Mini 開發板,以 WiFi 進行基地台連線並取得網站資料。直接將 WeMos D1 Mini 開發板以 USB 線連接到開發電腦進行程式編譯上傳即可。溫度的LED燈號接腳本例使用D1(GPIO5)、D2(GPIO4)、D3(GPIO0)作為點亮紅、黃、綠LED的正極腳位,腳位對應如下圖(來源: www.mischianti.org)。
OpenWeatherMap 提供當前天氣的地圖,一周預報,降水,風,雲,來自氣象站的其他數據。免費用戶就可以使用絕大部分功能。提供 JSON 、 XML ,、以及 HTML 等多種格式數據。本實作將利用取回的溫度資料進行顯示天氣資訊狀態識別,氣溫低於攝氏25度點亮綠色LED,氣溫介於攝氏25至34度點亮黃色LED,氣溫高於攝氏34度點亮紅色LED。
http://api.openweathermap.org/data/2.5/weather?q=天氣地區&units=metric&lang=zh_tw&appid=開發金鑰完整程式內容如下:
from machine import Pin import network import urequests, ujson #設定燈號輸出接腳 ledR = Pin(5, Pin.OUT) ledY = Pin(4, Pin.OUT) ledG = Pin(0, Pin.OUT) #網路天氣URI參數設定與組合 #API_key = "<API金鑰>" 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 #設定網路連線帳號密碼 SSID = "<WiFi名稱>" # WiFi名稱 PASSWORD = "<WiFi密碼>" # 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 if not data: print("沒有查詢到天氣資料") else: print("__________________________") weather = data["weather"][0] print("現在天氣: ", weather["description"]) print("--------------------------") main = data["main"] temp = main["temp"] print("最高溫度: ", main["temp_max"]) print("最低溫度: ", main["temp_min"]) print("當前溫度: ", temp) print("當前壓力: ", main["pressure"]) print("當前溼度: ", main["humidity"]) print("__________________________") #依據溫度設定LED燈號 if temp <= 25.0: print("綠燈") ledR.value(0) ledY.value(0) ledG.value(1) elif temp <= 34.0: print("黃燈") ledR.value(0) ledY.value(1) ledG.value(0) else: print("紅燈") ledR.value(1) ledY.value(0) ledG.value(0)提示:本例自OpenWeatherMap取回的JSON格式資料會利用ujson模組的loads()方法轉換為Python字典物件後再加以存取使用。