專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

DIY:使用云計(jì)算平臺(tái)快速搭建嵌入式互聯(lián)網(wǎng)通信模型

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月23日   【字體:

對(duì)于一個(gè)DIYer來說,想用嵌入式實(shí)現(xiàn)互聯(lián)網(wǎng)通信(比如WEB網(wǎng)頁瀏覽,智能家居遠(yuǎn)程控制等)這樣的功能,最頭痛的不是嵌入式部分的設(shè)計(jì),而是服務(wù)器端的搭建,首先遇到的就是私有IP訪問的問題,除非你能申請(qǐng)到一個(gè)固定IP,讓嵌入式內(nèi)部寫入這個(gè)固定IP來進(jìn)行訪問,不過DIY一般都沒有這樣的條件,服務(wù)器端的IP地址是動(dòng)態(tài)變化的,你只能使用動(dòng)態(tài)IP+NAT穿透,這樣就必須使用域名來訪問,有一種方法是申請(qǐng)花生殼動(dòng)態(tài)域名綁定,但是這種綁定一般需要 ADSL+有動(dòng)態(tài)域名綁定功能的路由器;另外,就算搞定了服務(wù)器訪問的問題,接下來你還得使用各種服務(wù)器端編程腳本為服務(wù)器編程,總之就是麻煩重重,自己搭建服務(wù)器很難做到穩(wěn)定的訪問質(zhì)量以及良好的模型設(shè)計(jì)。


我找到了一種方法能夠一秒解決上面的問題:使用云計(jì)算平臺(tái)技術(shù)!直接把服務(wù)器放置到云端,每個(gè)嵌入式設(shè)備都相當(dāng)于客戶端連接到云端,用戶也通過WEB瀏覽器或手機(jī)APP訪問云端,這樣的技術(shù)能夠使通信模型的設(shè)計(jì)難度大大降低,并且成本很低,很適合DIY設(shè)計(jì)。我已經(jīng)使用這種技術(shù)成功設(shè)計(jì)了一個(gè)GPS跟蹤器,可以使用瀏覽器實(shí)時(shí)查看設(shè)備的具體位置,使用百度地圖顯示出來,接下來就一一描述這一設(shè)計(jì)流程。




如上圖所示,GPS設(shè)備負(fù)責(zé)實(shí)時(shí)采集地理坐標(biāo),并通過一個(gè)GPRS模塊接入互聯(lián)網(wǎng),實(shí)時(shí)將坐標(biāo)傳送到服務(wù)器,服務(wù)器接收到坐標(biāo)之后在緩存中刷新,用戶在瀏覽器(PC或手機(jī)或PAD瀏覽器都可以)中訪問服務(wù)器的WEB頁面,在瀏覽器中顯示地圖,完成這一追蹤過程。按照一般的做法,需要一臺(tái)實(shí)體的服務(wù)器,你可以使用你的PC主機(jī)當(dāng)服務(wù)器,但這臺(tái)主機(jī)需要24小時(shí)不間斷運(yùn)行,并且假設(shè)你的主機(jī)網(wǎng)絡(luò)接入是ADSL,你還需要去申請(qǐng)一個(gè)域名,以便讓GPRS設(shè)備和任意瀏覽器都能訪問到你的服務(wù)器,如果你是校內(nèi)網(wǎng),那就基本沒戲了,因?yàn)樾?nèi)網(wǎng)是經(jīng)過多層路由的,無法進(jìn)行外問NAT穿透,也就無法讓外部訪問到你的主機(jī)。


我使用云計(jì)算平臺(tái)技術(shù)PK掉了實(shí)體服務(wù)器,GPRS設(shè)備和用戶瀏覽器可以在任意時(shí)間任意地點(diǎn)輕松訪問到服務(wù)器。什么叫云計(jì)算平臺(tái)?其實(shí)就是一個(gè)服務(wù)器群,你只需要擁有一個(gè)應(yīng)用帳號(hào),將服務(wù)器代碼上傳到你的云空間,不需要知道你的代碼具體運(yùn)行在什么地方,甚至連提供商都不知道它到底放在哪里,這就是云的概念。目前國外大型的云有谷歌、亞馬遜、微軟等公司,國內(nèi)的有新浪、百度、盛大等,最好用的是谷歌,但...GFW,你懂的,國內(nèi)訪問谷歌很不穩(wěn)定,經(jīng)常會(huì)被查封,所以國外產(chǎn)品基本沒有選擇的希望。再看國內(nèi),個(gè)人覺得目前做得比較好的是新浪,已經(jīng)推出一整套解決方案,并且已經(jīng)有各種應(yīng)用在其上面,百度云比較麻煩,現(xiàn)在還不是很成熟,并且在其上面開發(fā)應(yīng)用需要得到其邀請(qǐng)碼,綜合考慮我使用了新浪云,官網(wǎng)地址:http://sae.sina.com.cn/ 



新浪云(Sina App Engine簡稱SAE)使用七層沙箱模型,提供了PHP、JAVA、PYTHON等編程語言,但是目前只開放了PHP,JAVA和PYTHON正在測(cè)試無法使用,我選擇了PHP;SAE里面提供了大量你所需要的服務(wù),包括SQL數(shù)據(jù)庫,MEMCACHE,Storage大容量存儲(chǔ)等,足夠開發(fā)一般的 WEB應(yīng)用。


PHP是一種在服務(wù)器端執(zhí)行的腳本語言,適用于制作動(dòng)態(tài)頁面,語言風(fēng)格類似C語言,瀏覽器申請(qǐng)PHP頁面的時(shí)候服務(wù)器會(huì)將PHP頁面里面的PHP語句執(zhí)行然后生成標(biāo)準(zhǔn)的HTML文檔發(fā)向?yàn)g覽器,在本地編寫PHP需要在PC布置PHP環(huán)境,絕大多數(shù)環(huán)境都使用"LAMP"架構(gòu),即:LINUX操作系統(tǒng)+APACHE服務(wù)器+MYSQL數(shù)據(jù)庫+PHP腳本,當(dāng)然也可以在WINDOWS里面開發(fā),可以在WINDOWS里面安裝APACHE服務(wù)器,亦可以使用WINDOWS的IIS服務(wù)。我選擇使用LAMP環(huán)境,在UBUNTU里面安裝了APACHE,在UBUNTU里面將代碼測(cè)試完畢之后使用SVN工具將代碼上傳到云空間,上傳流程在SAE的官網(wǎng)有詳細(xì)的教程可供參考:http://sae.sina.com.cn/?m=devcenter&catId=20

在UBUNTU里面使用命令行打開gedit編輯器即可開始編寫你的PHP代碼




在APACHE中設(shè)置根目錄為你的PHP代碼所在目錄,將文件類型設(shè)置為PHP,瀏覽器訪問本機(jī)的時(shí)候即可執(zhí)行PHP代碼,我測(cè)試寫了一行PHP代碼如下,向屏幕打開“hello world”



在本機(jī)瀏覽器中訪問:localhost/test.php即可即得訪頁面:



表示環(huán)境布置成功,接下來可以盡情編寫你的PHP代碼了!

/****************************************************網(wǎng)絡(luò)編程方面一系列關(guān)鍵技術(shù)點(diǎn)*********************************************/

A,如何向服務(wù)器上傳GPS坐標(biāo)
向服務(wù)器上傳信息,首先需要確定一種網(wǎng)絡(luò)通信協(xié)議,如果是自己搭建實(shí)體服務(wù)器,則可自由選擇各種協(xié)議,比如面向數(shù)據(jù)報(bào)類型的UDP,面向連接的TCP等等,但是在云平臺(tái)中,因?yàn)樵破脚_(tái)是一種用于WEB的服務(wù),目前僅開放了HTTP協(xié)議,用戶僅可以通過80端口利用HTTP跟服務(wù)器通信,所以嵌入式設(shè)備必須實(shí)現(xiàn)一個(gè)HTTP通信協(xié)議并用按照HTTP協(xié)議以及WEB支持的數(shù)據(jù)交換格式AJAX技術(shù)進(jìn)行坐標(biāo)上傳。

HTTP 協(xié)議基于文本傳輸,客戶端使用“GET”、"POST"等方法進(jìn)行請(qǐng)求,關(guān)于HTTP的更多詳細(xì)資料可百度搜索,本文僅針對(duì)"GET"進(jìn)行描述;“GET”主要用于用戶向服務(wù)器請(qǐng)求一個(gè)頁面,沒錯(cuò),所有的HTTP通信都是要由客戶端首先發(fā)起訪問的,服務(wù)器端響應(yīng)用戶需求并返回頁面之后立刻斷開鏈接,客戶端再次請(qǐng)求頁面需要再次連接。那如何使用
“GET”上傳數(shù)據(jù)呢?你打開一個(gè)普通頁面的時(shí)候經(jīng)過可以看到輸入欄里面的網(wǎng)址后面會(huì)帶一長串?dāng)?shù)據(jù),那些數(shù)據(jù)就是瀏覽器向服務(wù)器上傳的參數(shù),比如你在百度搜索的首頁輸入框里面輸入“HTTP”點(diǎn)擊搜索,會(huì)發(fā)現(xiàn)網(wǎng)址欄會(huì)變成:http://www.baidu.com/s?wd=HTTP&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=2&rsv_sug=0&rsv_sug4=299&rsv_sug1=1并且頁面跳轉(zhuǎn)到搜索結(jié)果,這串URL中從“?”號(hào)后面開始即為一個(gè)"GET"的請(qǐng)求參數(shù),根據(jù)不同,需要參數(shù)的頁面請(qǐng)求會(huì)事先定義好每個(gè)參數(shù)并且接收客戶端的參數(shù)進(jìn)行解析并返回相應(yīng)的結(jié)果,你可以試試打開一個(gè)空白頁面并輸入:http://www.baidu.com/s?wd=HTTP 頁面會(huì)跳轉(zhuǎn)到百度對(duì)“HTTP”的搜索結(jié)果,這時(shí)你就人工完成了一次附帶參數(shù)的“GET”請(qǐng)求。

根據(jù)這種原理,我在服務(wù)器中編寫了一個(gè)頁面用于測(cè)試GET參數(shù)是否成功工作


頁面接收一個(gè)名字為test的請(qǐng)求,判斷該參數(shù)是否等于2013,如果是則返回right,否則返回you are wrong,在瀏覽器中輸入localhost/gettest.php?test=2013返回正確。所以使用GET來上傳數(shù)據(jù)是可行的。

B,服務(wù)器如何保存GPS坐標(biāo)
服務(wù)器在執(zhí)行完一個(gè)PHP頁面之后將銷毀頁面中所有變量,PHP是動(dòng)態(tài)腳本,在PHP中沒有所謂的“全局變量”,想保存接收到的數(shù)據(jù)必須另想辦法。有一種方法是創(chuàng)建一個(gè)數(shù)據(jù)庫,每次將數(shù)據(jù)更新到數(shù)據(jù)庫中,但是要在這種小型應(yīng)用中使用數(shù)據(jù)庫未免太大材小用了,可以使用memcache來保存,SAE中支持 memcache服務(wù):http://sae.sina.com.cn/?m=devcenter&catId=201 memcache是一個(gè)緩存區(qū),可以保存臨時(shí)數(shù)據(jù)但不會(huì)隨著頁面消失,而且速度高于sql,在SAE中使用memcache必須向在該應(yīng)用中開通memcache服務(wù),并且在設(shè)置中聲明你所需要的變量名字,這些在SAE官網(wǎng)中均有介紹

C,如何顯示地圖
顯示地圖需要另外一種腳本語言:javascript,javascript是一種在瀏覽器端執(zhí)行的腳本編程語言,很多網(wǎng)頁地圖如谷歌、百度、高德等都提供了API代碼供你在網(wǎng)頁里使用,只要在你的網(wǎng)頁中包含了其js源,即可在網(wǎng)頁中正常調(diào)用地圖并顯示。谷歌,shit,又是因?yàn)镚FW,谷歌很不穩(wěn)定,基本沒戲,使用百度地圖吧,百度開發(fā)者中心官網(wǎng)提供了詳細(xì)的教程教你如何簡單地使用百度地圖API http://developer.baidu.com/map/ 里面提供了一份基本的調(diào)用代碼,在你的頁面中包含它就可以正常使用,當(dāng)然了,前提是你需要有一點(diǎn)基礎(chǔ)。



GPS 設(shè)備定時(shí)向云平臺(tái)遞交坐標(biāo)信息,云平臺(tái)刷新保存到memcache;瀏覽器在打開頁面之后開始繪制地圖,并定時(shí)向云平臺(tái)的一個(gè)PHP頁面申請(qǐng)實(shí)時(shí)坐標(biāo),刷新顯示到瀏覽器中;整個(gè)網(wǎng)絡(luò)工作框架就大致如此。PK掉了實(shí)體服務(wù)器!是不是瞬間感覺到讓你的設(shè)計(jì)接入網(wǎng)絡(luò)部分容易多了?沒錯(cuò),這就是云時(shí)代,它來了,別再想著自己折騰自己的電腦當(dāng)服務(wù)器了,當(dāng)然了,這些網(wǎng)絡(luò)編程語言以及技術(shù)基本得懂。

/******************************接下來是嵌入式系統(tǒng)一系列關(guān)鍵技術(shù)點(diǎn)****************************************/

硬件框架圖


主要由三部分構(gòu)成,一個(gè)MCU,一個(gè)GPS模塊,一個(gè)GPRS模塊;MCU負(fù)責(zé)采集GPS坐標(biāo)并轉(zhuǎn)換成符合百度所需要的格式,GPRS模塊打開連接并向服務(wù)器上傳坐標(biāo)。MCU采用STM32F103C8T6來做,具有20KB內(nèi)存,128KB FLASH存儲(chǔ),72MHz主頻,夠我揮霍了。GPS模塊采用TELIT JN3模塊,輸出標(biāo)準(zhǔn)NMEA格式的坐標(biāo)信息,首次搜星30秒左右,可電池保存數(shù)據(jù)。GPRS模塊采用QUECTEL M50模塊,通過串口與MCU通信,使用AT指令集格式。

硬件部分架構(gòu)很簡單,就不上傳照片了,下面主要是描述嵌入式編程方面的技術(shù)點(diǎn)。

A,UC/OS III嵌入式實(shí)時(shí)操作系統(tǒng) 
要完成這樣一個(gè)系統(tǒng)編程,雖說應(yīng)用不大型,但如果使用裸機(jī)編程,會(huì)使代碼變得臃腫,不利于移植和新應(yīng)用的加入,既然MCU資源都這么足了,跑個(gè)OS kernel是必須的了。選擇了UC/OS III內(nèi)核,與UC/OS II的區(qū)別是增加了時(shí)間片輪詢調(diào)度算法,可以讓多個(gè)任務(wù)處于同一層優(yōu)先級(jí)進(jìn)行時(shí)間片輪轉(zhuǎn)運(yùn)行。在
UC/OS III進(jìn)行模塊化設(shè)計(jì),在底層為GPS和GPRS模塊設(shè)計(jì)好一個(gè)驅(qū)動(dòng)模型,封裝之后向上層應(yīng)用提供API函數(shù)調(diào)用。

B,GPRS驅(qū)動(dòng)模型
GPRS 模塊使用AT指令集進(jìn)行通信,功能包括通話、短信、GPRS接入;如果只是完成一個(gè)互聯(lián)網(wǎng)訪問的功能,是很簡單的,但要做到穩(wěn)定卻很有難度,比如網(wǎng)絡(luò)通信中突然遇到無信號(hào)的時(shí)候會(huì)中斷傳輸,這時(shí)候MCU需要偵測(cè)出來并做處理,在超時(shí)之后命令模塊斷開并重連,并且這部分超時(shí)等待必須不能影響到操作系統(tǒng)中其他應(yīng)用程序?qū)PRS驅(qū)動(dòng)的訪問。我使用三個(gè)線程來完成一個(gè)GPRS的驅(qū)動(dòng)任務(wù),結(jié)構(gòu)如下:


對(duì)模塊的操作都是基于AT指令集,經(jīng)過對(duì)指令集的功能進(jìn)行分類之后可分為兩大類,一類屬于操作型指令,只返回“OK”或者"ERROR",這類封裝成一個(gè)統(tǒng)一的函數(shù)進(jìn)行調(diào)用,另一類屬于返回具體數(shù)據(jù),需要對(duì)具體的指令進(jìn)行單獨(dú)處理;整個(gè)通信模型都是基于這種分類操作的思想進(jìn)行設(shè)計(jì)。

數(shù)據(jù)接收線程負(fù)責(zé)接收模塊的數(shù)據(jù),來自模塊的數(shù)據(jù)又分為兩種類型,一種是普通的命令返回,開頭和結(jié)尾都帶有回車+新行符,一種是網(wǎng)絡(luò)的二進(jìn)制數(shù)據(jù)返回,這種直接返回具體的數(shù)據(jù);接收線程必須能識(shí)別到這兩種類別,并且根據(jù)當(dāng)前的工作狀態(tài)將接收到的回應(yīng)通過UC/OS III提供的郵箱功能分別送往不同的隊(duì)列,即完成一次接收過程。

網(wǎng)絡(luò)通信線程專門負(fù)責(zé)處理GPRS事務(wù),包括TCP/UDP連接,發(fā)送,接收等功能,我在系統(tǒng)中將這些功能封裝成類socket接口的形式,以便于與PC編程環(huán)境相似,降低應(yīng)用層的開發(fā)難度,比如一個(gè)連接API:
 

void GPRS_Connect(GSM_GPRS_STRUCTURE *psStr ,
GPRS_ACCESS_MODE AccessMode ,
GPRS_ACCESS_PROL_TYPE ProlType,
CPU_CHAR *ConnectAddr ,
CPU_CHAR *ConnectPort ,
GPRS_ERR_CODE *GPRSErrCode)

這個(gè)函數(shù)用于打開一條TCP/UDP連接,該函數(shù)接收一個(gè)
GSM_GPRS_STRUCTURE結(jié)構(gòu)體指針,這個(gè)結(jié)構(gòu)定義如下:
/*
 * @type struct
 * @name GSM_GPRS_STRUCTURE
 */
typedef struct{

 
/* the No of the connect point*/
CPU_CHAR GPRSConnectPointNo ;

 
/* the type of network access mode*/
GPRS_ACCESS_MODE GPRSAccessMode;

 
/* the type of access protocol*/
        GPRS_ACCESS_PROL_TYPE GPRSAccessProlType;

 
/* the address to access*/
CPU_CHAR *GPRSAccessAddr ;

 
CPU_CHAR *GPRSAccessPort ;

 
GPRSStatusCode ConnectStatusCode ;

 
OS_Q qGPRSRequestMsg ;

 
OS_Q qGPRSRecMsg ;

 
}GSM_GPRS_STRUCTURE;

結(jié)構(gòu)體包含一個(gè)GPRS模塊網(wǎng)絡(luò)連接點(diǎn)號(hào),一個(gè)GPRS訪問模式標(biāo)志字節(jié)用于標(biāo)志該連接是用IP地址還是域名訪問,一個(gè)協(xié)議類型標(biāo)志字節(jié)用于標(biāo)志該連接是用 TCP還是UDP進(jìn)行連接,接下來是訪問地址,端口號(hào),連接狀態(tài),最后附帶兩個(gè)消息郵箱隊(duì)列,一個(gè)用于請(qǐng)求事務(wù),一個(gè)用于接收網(wǎng)絡(luò)數(shù)據(jù)。用于標(biāo)志狀態(tài)的字節(jié)均使用枚舉類型來表示,這樣可以使整個(gè)結(jié)構(gòu)看起來很明確,看其名字就知道其作用,以及其有限個(gè)狀態(tài)的類別。

該函數(shù)中最后需要一個(gè)很重要的參數(shù): 
GPRS_ERR_CODE *GPRSErrCode 用于返回函數(shù)的操作結(jié)果碼,這個(gè)結(jié)果很重要,因?yàn)閼?yīng)用程序在進(jìn)行一個(gè)連接的時(shí)候,模塊此時(shí)可能處于無信號(hào)狀態(tài),也有可能SIM卡無話費(fèi)、GPRS服務(wù)無開啟、該連接已存在等多種情況導(dǎo)致連接不成功,應(yīng)用程序需要知道連接的結(jié)果才能進(jìn)行下一步處理,這個(gè)返回的結(jié)果碼向應(yīng)用程序提供了連接的結(jié)果,讓應(yīng)用程序可以知道狀態(tài),其定義使用枚舉類型,如下:
 

/*
 * @type enum
 * @name GPRS_ERR_CODE
 */
typedef enum{

 
/*0 no error連接成功*/
GPRS_ERR_None = 0 ,

 
/*1 the GPRS connect pond have no enougth space模塊的連接池已滿*/
GPRS_ERR_ConPondFull ,

 
/*2 fail to start the GPRS serviceGPRS服務(wù)開啟失敗*/
GPRS_ERR_ServiceStartFail ,

 
/*3 fail to refresh the GPRS net status刷新網(wǎng)絡(luò)狀態(tài)失敗*/
GPRS_ERR_RefreshNetStatusFail ,

 
/*4 TE is in calling模塊正在通話中,無法連接*/
GPRS_ERR_Calling ,

 
/*5 GSM have no register網(wǎng)絡(luò)未注冊(cè)*/
GPRS_ERR_GSMNoRegister ,

 
/*6 GPRS no service無GPRS服務(wù)*/
GPRS_ERR_GPRSNoService ,

 
/*7 the connect have aready連接已存在*/
GPRS_ERR_ConnectAlreadyExs ,

 
/*8 couldn't to set the access mode無法設(shè)置訪問模式*/
GPRS_ERR_SetAccessModeFail ,

 
/*9 couldn't to malloc the memory申請(qǐng)內(nèi)存失敗*/
GPRS_ERR_MallocMemFail  ,

 
/*10 the instruction to the TE is error指令錯(cuò)誤*/
GPRS_ERR_InsError ,

 
/*11 fail to connect to the enternet無法連接到互聯(lián)網(wǎng)*/
GPRS_ERR_ConnectFail ,

 
/*12 the connect is closed連接已關(guān)閉*/
GPRS_ERR_ConnectClosed  ,

 
/*13 wait time out超時(shí)*/
GPRS_ERR_TimeOut ,

 
/*14 fail to send發(fā)送失敗*/
GPRS_ERR_SendFail  

 

}GPRS_ERR_CODE; 

如上所示,在整個(gè)系統(tǒng)中,絕大多數(shù)函數(shù)都會(huì)返回一個(gè)操作結(jié)果碼用于告知調(diào)用者函數(shù)執(zhí)行的結(jié)果,基于這種機(jī)制,可以使程序在調(diào)試階段很簡單,及時(shí)修改BUG,在正常應(yīng)用階段保證高度的穩(wěn)定性。

C,HTTP網(wǎng)頁請(qǐng)求
模塊只提供TCP連接功能,這需要我們自己使用TCP來封裝一個(gè)HTTP協(xié)議,本應(yīng)用很簡單,只需要向服務(wù)器端索取一個(gè)帶參數(shù)的頁面即可,但有一點(diǎn)需要警惕,SAE使用HTTP1.1協(xié)議,并且在后面需要HTTP文本中需要帶一個(gè)HOST參數(shù),該參數(shù)后面設(shè)置為你需要訪問的應(yīng)用的域名:
首先打開一條TCP連接,我申請(qǐng)了一個(gè)個(gè)人應(yīng)用,域名為:,使用80端口連接:
 

GPRS_Connect(&ConnectTest ,
GPRS_ACCESS_MODE_DN ,
GPRS_ACCESS_PROL_TCP ,
"" ,
"80" , 
&GPRSErrCode) ;

 
連接成功之后接下來需要發(fā)送數(shù)據(jù),需要組裝一條標(biāo)準(zhǔn)的HTTP報(bào)文,如:GET /updateloc.php?id=2013&lat=0&lng=0 HTTP/1.1\r\nHOST:\r\n\r\n,其中l(wèi)at參數(shù)為緯度值,lng為經(jīng)度值,服務(wù)器接收之后解析成功將會(huì)返回ok,如果格式失敗將會(huì)返回error(ok和error是我自己的PHP頁面中定義的),如果收到OK,表示坐標(biāo)已成功上傳到服務(wù)器,嵌入式端的工作完成了!為了達(dá)到實(shí)時(shí)效果,需要嵌入式設(shè)備每隔一定時(shí)間遞交坐標(biāo)。

/*********************************************************************** 最終效果*******************************************************************************/

最后我使用javascript開源庫寫了一個(gè)個(gè)人主頁,在個(gè)人主頁里面設(shè)置一個(gè)鏈接指向我的地圖頁面,在任意時(shí)間任意地點(diǎn)訪問我的主頁都能夠顯示出我的設(shè)備的具體位置!

這是我的個(gè)人主頁地址:http://   

因?yàn)槭钦{(diào)用開源Js庫的關(guān)系,可能首頁訪問會(huì)有點(diǎn)慢,可以直接訪問 http:///index.php 進(jìn)入地圖頁面,速度很快
 

首頁效果如下:


點(diǎn)擊“玩玩看”菜單里面的“看看我在哪里”即可跳轉(zhuǎn)到我的地圖頁面:


地圖中顯示的位置即是我家那邊的位置:


一個(gè)GPS定位設(shè)備就這樣DIY出來了!你可以在任何地方任何時(shí)間使用任何設(shè)備訪問到你的頁面。。。。。。。!
 
就這樣,一個(gè)嵌入式+互聯(lián)網(wǎng)的通信模型就搭建完成了,而且這個(gè)服務(wù)器成本很低,我現(xiàn)在在新浪進(jìn)行了實(shí)名認(rèn)證,這樣一個(gè)應(yīng)用每天只需要5個(gè)云豆租金(100云豆=1RMB),算下來一個(gè)月只需要3毛錢租金,如果你的訪問量不大,個(gè)人玩玩的話,這個(gè)成本確實(shí)很低很低了,但如果訪問量大就另外計(jì)算了,具體資費(fèi)可到 SAE官網(wǎng)查看。

關(guān)閉窗口

相關(guān)文章