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