劉孝趙 王成
摘 要:在現實生活中,天氣預報對人們的生活非常重要,很多人一天的計劃和行動都會根據天氣預報進行決定。文章的設計基于將STM32 F103微控制器與天氣數據API互連的設備,經過單片機處理把天氣信息應用在各種顯示設備,既節省了傳感器硬件資源,又能實時播報各個區域的天氣預報,這種設備移動便攜,可以安放在不同場景。
關鍵詞:天氣預報;API;單片機;數據
傳統的氣象顯示系統主要由溫度、濕度等傳感器采集數據,再通過接收模塊將采集到的數據發送給單片機。這樣各傳感器在焊接時可能會有不同程度的損壞,有時候可能某個引腳接觸不良,調試時就會出現各種各樣的問題,而且不易查找。本設計在硬件上省去了各傳感器,通過WiFi模塊連接路由器或手機上的熱點,利用JSONP的方法跨域獲取天氣數據。利用專業的商業氣象數據網站心知天氣,此網站免費提供API接口,不僅穩定還實時更新,可以達到每小時400次刷新,能提供國內200多個城市的天氣實況,6項生活指數,預測未來3天的天氣,使用者也可以隨時切換城市,不受地域限制。
1 天氣API介紹
在網上有很多天氣API,本系統使用的是商業氣象網站心知天氣API。此天氣API是面向開發者,可以提供豐富穩定的天氣數據服務。通過心知天氣API,可以輕松地把心知天氣的數據整合進手機應用、桌面應用、網站,甚至嵌入式操作系統里。心知天氣提供了全球多達2.4萬個城市的天氣數據。而且它還可以支持多達13種語言。心知天氣API不僅可以返回天氣的數據,還可以對氣象災害進行預警,查看當前空氣質量的實況,逐小時潮汐等數據[1]。
每個API里面會設有很多參數。例如location后面是城市名稱或者城市代碼,language后面是返回數據的語言種類,unit后邊為溫度單位,c代表的是攝氏度。
當我們請求API時,服務器將以jason的形式返回天氣數據。
"results": [{ “location”: { “id”: “C23NB62W20TF”, “name”: “西雅圖”, “country”: “US”, “timezone”: “America/Los_Angeles”, “timezone_offset”: “-07:00” },
這個是返回的一部分jason數據。id后面代表的是城市ID,name后面代表的是城市名稱,country后面代表的是城市所在的國家。
2 系統設計
2.1 系統結構
本設計的整個系統由STM32F103單片機、ESP8226 WiFi模塊和顯示屏幕組成。同樣的也需要一個能夠連接互聯網的WiFi路由設備。STM32F103的MCU通過串口連接到ESP8226 WiFi模塊,顯示屏通過SPI協議進行通信,ESP8226 WiFi模塊通過Internet與天氣服務器通信。整體的結構如圖1所示。STM32 F103首先通過串口向ESP8226 WiFi模塊發送命令,允許ESP8226 WiFi模塊連接到Internet,然后,通過請求API數據,獲得天氣服務器上的天氣數據,最后通過解析獲得天氣數據,把天氣信息顯示在液晶顯示屏上[2]。
2.2 WiFi電路設計
ESP8226 WiFi模塊的原理如圖2所示。模塊可以為其他設備聯網,也可以自己單獨作為控制器,因為它接受標準的聯網協議。在作為一個WiFi模塊時,既能單獨存在,也能嵌入其他設備當中。內部包含了ROM和SRAM存儲寄存器,MCU可以通過不同的接口訪問寄存器,當搭載在其他主機中運行時,其內部的高速存儲寄存器能夠在減少內存方面作出很大的貢獻,提高系統整體的性能。ESP8266在承擔適配器的任務時,能通過SPI接口或IIC接口將其加入其他微控制器中,而且連接方法很簡單。該模塊強大的存儲和處理能力體現在通過GPIO端口集成傳感器和其他設備的能力,以最大限度地減少開發和運營過程中的資源,整個模塊在設計上以最低的價格發揮了最優的實用性[3]。
2.3 顯示電路設計
本設計采用液晶屏作為顯示模塊,這是一款通用式電阻式觸摸屏,LCD模塊外加玻璃鋼化屏,外部排針是黃色全銅鍍金,不僅美觀還耐用。采用ILI9341驅動IIC,可以與CPU接口直接連接。這里所用的液晶屏是16位并口驅動模式,其中利用DB1至DB8和DB10至DB17這16個引腳,讓它們與MCU的D0至D15口連接,實現液晶屏與開發板的通信。需要特別指出的是這個液晶屏模塊采用雙電源來供電,主電源和背光供電引腳都需要接上才能正常顯示。
3 系統軟件設計
3.1 主程序設計
系統軟件由3部分組成:天氣預報、客戶端和天氣服務器,天氣預報總結了客戶需求的基本數據。其中天氣預報結論提供客戶需求的基礎數據,客戶端的設計重點是地圖瀏覽,以及把用戶訪問請求(漫游、放大、縮小等)發送給服務器,心知天氣服務器則負責處理用戶的訪問請求。
軟件在設計的過程中主要通過串口給WiFi模塊發送指令,與WiFi模塊通信,解析天氣數據,以及驅動液晶顯示屏的操作。單片機首先做一些初始化工作,比如時鐘初始化,WiFi初始化,液晶屏幕初始化,使能RTC時鐘,然后先獲取一次天氣信息。最后等待,一直等待到整點的時候,再更新一次天氣信息。每到一次整點的時候,都會重新獲取一次天氣信息,并且把它顯示到液晶屏幕上[4]。
3.2 初始化地圖元素
要顯示地圖,使用者需要使用天氣服務器API提供的類和方法創建天氣預報的基本地圖信息。在心知天氣服務器的相關地圖服務中創建一個地圖,并定義一個中心點坐標,將某個城市定義為地圖中心坐標,并設置地圖顯示級別,一般城市級別設置為10,縣級別設置為14。部分代碼如下:
var map = new Map.Map(“dituContent”); var point = new Map.Point(102.55,24.3333)map.centerAndZoom(point,10
3.3 查詢天氣
獲取到城市名稱后,就可以直接讓ESP8226 WiFi模塊連接到互聯網,然后再通過請求API數據獲取到心知天氣服務器上的天氣數據,最后解析得到的天氣數據,把天氣信息顯示在液晶顯示屏上。
WeatherStateweatherState=new WeatherState();
if(result!=null)
{
String state1=result.getProperty(5).toString(); //
溫度
String state2=result.getProperty(10).toString(); //
天氣實況
}
3.4 獲取城市碼數據庫文件
數據庫文件存儲了中國許多省市的數量,天氣主要通過使用城市代碼獲得,如果系統是第一次運行,系統將從心知天氣服務器API端口獲取城市名代碼,然后將其解析,創建數據庫,再將數據填入數據庫對應的表中,如果不是第一次運行,系統就直接訪問數據得到城市代碼[5]。
3.5 界面顯示調試
為了獲得更好的界面顯示效果,對系統的界面進行調試,屏幕上顯示天氣的狀況需要用到天氣圖標,這個圖標可以自己在網站中查找,然后將輸出灰度選為單色,這樣的好處是得到最小的取模數據。在調試的時候嘗試調出兩種不同的效果,如圖3—4所示。
4 結語
此次實時天氣系統的設計采用keil5作為調試軟件進行總程序的調試,設計中主要涉及對stm32系列的MCU研究。總體上想要完成本設計,需要熟練掌握SPI通信和SPI FLASH存儲,JSONP跨域獲取天氣數據,還有ESP8266無線模塊配置模式等,設計將單片機與互聯網技術聯系起來,有一定的技術基礎。主要實現的功能是對當天天氣情況進行實時更新,也能對未來3天天氣情況進行預報,還能隨時改變顯示城市,有一定的實用性。
[參考文獻]
[1]李澤椿,畢寶貴,金榮花,等.近10年中國現代天氣預報的發展與應用[J].氣象學報,2014(6):1069-1078.
[2]余衛東,張廣周,張弘.河南省農用天氣預報業務系統的設計與應用[J].氣象與環境科學,2011(3):79-82.
[3]譚曉光,羅兵.天氣預報分析型數據模型及生成[J].應用氣象學報,2014(1):120-128.
[4]吳亞林.淺析基于Android的天氣預報系統設計與實現[J].山東工業技術,2015(24):123.
[5]羅顯發.氣象網站公眾天氣預報更新方法淺析[J].青海科技,2010(1):68-69.
Abstract:In real life, weather forecasts are very important to peoples lives. Many people plan and act on a daily basis based on weather forecasts. The design of the design of a single chip based on the microcontroller and the weather API weather forecast, it can get the weather data on the Internet, after the MCU STM32F103 processing can display the weather information on the LCD screen.
Key words:weather forecast; API; single chip microcomputer; data