前幾篇我們已經做了第一,從OpenData抓取天氣預報顯示在手機app上;第二,將手機的訊息傳送到ePy-Lite,今天我就將兩者結合在一起,我要把天氣的資訊,文字,傳送到ePy-Lite。
那就開始吧!
首先,我們先設計UI介面,如下圖。同時要加入藍芽與網路兩個非可是模組,在最上面加入藍芽練線與斷開藍芽的按鈕,並且我設計只有在藍芽確定連線之後才可以點選確認搜尋天氣資訊。底下放了天氣描述、均溫、最低溫度與最高溫度。
開始編輯程式碼,我先將變數和藍芽連線的部分做好。
千萬不要複製錯誤位置,不然就會像我一開始就錯了,在那邊找半天哪裡寫錯
接著我把防呆做好,主要就是確認藍芽連線後才能點選確認搜尋天氣資訊,如果斷線,那就馬上關閉確認紐並開啟藍芽連線的按鈕。
接下來進入重頭戲!首先我把藍芽的部分完成9成。最後的value就是我們要傳送的資料,這個我先空著,因為我還不知道要傳甚麼內容。
放著藍芽需要傳送甚麼內容後,我們把天氣資訊抓出來。不同上次的文章內容,我新增了一個weather_main的變數,這個是專門存取天氣描述的文字,例如cloud、clear sky、rain等等
為什麼要這樣呢?
因為我要把傳送給ePy-Lite的內容越簡單越好,當然你不一定要加入這個變數,等等就知道為什麼了。
然後把其他的資訊做完。
取得天氣資訊之後,我們回到上一段程式碼,把藍芽傳送的部分完成。
重點是在後面要加入\n,因為ePy-Lite藍芽5.0的協定需求,我們必須在傳送文字的後面加入\n。
所以如果不用一個變數去處理,那也可以像下圖所示,只是說這樣很多此一舉
來到ePy的部分,基本上就用之前寫過的程式碼就好了。
就間單的print出回傳的文字就好。
將程式碼燒錄之後,開啟app,先點選藍芽連線,再輸入欄位輸入Taipei,先不要輸入自己的城市,然後點選確認,這時候你的app就會秀出天氣的狀態與溫度,然後觀看PyCode的序列埠視窗是否有將天氣描述回傳,如下圖。
這樣我就可以加入判斷式顯示出不同的圖案!
這邊我就有兩個問題,首先的問題是OpenWeatherMap有多少個天氣描述?再來,我們有多少個城市可以選擇?
依據OpenWeatherMap的Icon list,共有9個主要的(main)天氣描述,每種描述裡還有其他描述,我們就不需要了。
至於台灣的城市.....真的很多,如下,大家可以自己找一下有沒有你家的位置囉!
"Taipei","Yunlin","Douliu","Yuren","Yujing","Zhigaozhuang","Chishan","Tongpanqian","Touchongbu",
"Dingjiaotan","Taoyuan","Taiwan","Taitung","Taipei City","Taipei","Taibao","Tainan","Xinying","Tainan",
"Fengyuan","Taichung","Daxi","Wucheng","Songwu","Siji","Shuiyuandi","Shibazhang","Dongshan","Banqiao","Puli","Pojiao","Pingtung","Pingtung","Penghu County","Nantou","Nantou","Miaoli","Huiyaozi",
"Magong","Longshanli","Lugu","Lugang","Lindefu","Laodian","Guting","Guomin","Fengshan","Kaohsiung","Yilan","Yilan","Hualien","Hualien City","Hsinchu County","Hsinchu","Xiguoshan","Xianeibu",
"Houzhuangzi","Hengchun","Guoxizi","Fuxingcun","Erqiao","Zhuzilin","Zhubei","Zhongdacuo","Zhongliao","Chonglan","Jincheng","Keelung","Chikanlou","Jiali","Jiayi Shi","Chang-hua",