基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)(共11頁(yè))_第1頁(yè)
基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)(共11頁(yè))_第2頁(yè)
基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)(共11頁(yè))_第3頁(yè)
基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)(共11頁(yè))_第4頁(yè)
基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)(共11頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上基于STM32的串口服務(wù)器web功能實(shí)現(xiàn)編制: 陳志磊 校對(duì): 審核: 日期: 2014-12-30 版本:V1.0專心-專注-專業(yè)更改次數(shù)更改時(shí)間更改內(nèi)容版本12014-12-30初版V1.0說(shuō)明:本文主要說(shuō)明通過(guò)web訪問(wèn)來(lái)配置串口服務(wù)器參數(shù)的功能,前提要求LWIP和uCOSII都已移植成功。實(shí)現(xiàn)B/S結(jié)構(gòu),須將串口服務(wù)器配置為web server。一 Web Server 文件以及相關(guān)技術(shù)簡(jiǎn)介1.相關(guān)文件說(shuō)明ST公司的官網(wǎng)上提供了通過(guò)LWIP完成web server配置的例程,打開我們的工程文件夾“LwIP1.4.1移植STM32 V1.8”,在LWIP-APP

2、/ web_server_demo文件夾下的文件如圖所示:各個(gè)文件的說(shuō)明見下表:文件說(shuō)明makefsdata該文件夾中包含有原始網(wǎng)頁(yè)文件和將原始的網(wǎng)頁(yè)文件轉(zhuǎn)換為網(wǎng)頁(yè)數(shù)組的工具mskefsdata.exefs.c用來(lái)管理生成的網(wǎng)頁(yè)數(shù)組fs.hfsdata.c生成的網(wǎng)頁(yè)數(shù)組fsdata.hhttpd.c完成了將串口服務(wù)器配置成web server。httpd.hhttpd_cgi_ssi.cCGI和SSI源文件,通過(guò)網(wǎng)頁(yè)配置串口服務(wù)器參數(shù)主要是通過(guò)這個(gè)文件來(lái)完成2.網(wǎng)頁(yè)制作及網(wǎng)頁(yè)數(shù)組數(shù)據(jù)轉(zhuǎn)換(1)網(wǎng)頁(yè)制作使用dreamweaver進(jìn)行網(wǎng)頁(yè)制作,交互方式主要是通過(guò)表單來(lái)完成,注意對(duì)于使用了需要使用S

3、SI技術(shù)來(lái)嵌入數(shù)據(jù)的,需要將網(wǎng)頁(yè)后綴設(shè)為shtml、shtm、stm等。ST的例程默認(rèn)使用首頁(yè)索引在httpd.c中g(shù)_psDefaultFilenames數(shù)組里表示,該數(shù)組如下:const default_filename g_psDefaultFilenames = "/index.shtml", false , "/index.ssi", true , "/index.shtm", true , "/index.html", false , "/index.htm", false ;該數(shù)據(jù)

4、表示支持首頁(yè)索引為index.shtml、index.html、index.htm的網(wǎng)頁(yè)文件輸入。在網(wǎng)頁(yè)設(shè)計(jì)時(shí),需考慮以下兩個(gè)方面:a.表單的操作設(shè)計(jì),表單提交的方法為post,表單的處理設(shè)為對(duì)應(yīng)的CGI。b.SSI標(biāo)簽的嵌入。在需要嵌入信息的位置插入SSI標(biāo)簽。關(guān)于CGI和SSI稍后將會(huì)簡(jiǎn)要說(shuō)明。(2)網(wǎng)頁(yè)數(shù)組數(shù)據(jù)轉(zhuǎn)換在 makefsdata 文件夾下的 fs 文件為網(wǎng)頁(yè)源文件,如下圖:由于網(wǎng)頁(yè)源文件不能直接放到 STM32 里面,所以要做一個(gè)轉(zhuǎn)換,這里通過(guò) makefsdata.exe 這個(gè)工具將原始網(wǎng)頁(yè)文件轉(zhuǎn)換成.c 格式的網(wǎng)頁(yè)數(shù)組,這樣就可以添加到工程中了,makefsdata 是用來(lái)

5、將編輯好的網(wǎng)頁(yè)文件轉(zhuǎn)換成二進(jìn)制數(shù)的一個(gè)工具。接下來(lái)我們講解一下這個(gè)工具的使用方法下面我們講解 makefsdata 工具的使用。(1)新建一個(gè)名為 fs 的文件夾, 將編輯好的網(wǎng)頁(yè)源文件放到 fs 文件夾下,里面包含了編輯好的 html 和.shtml 等網(wǎng)頁(yè)文件,其中 image 文件夾里面是我們使用到的圖片。(2)將 fs 文件夾和 makefsdada.exe 工具放到同一文件夾下,此處為 makefsdata 文件夾,打開makefsdata 文件夾,如下圖所示。圖中的 echotool.exe 和 Tftpd32-3.51-setup.exe 為其他工具,這里沒(méi)有使用到,cmd.re

6、g 稍后我們會(huì)講到。(3)在 makefsdata 文件夾上點(diǎn)擊鼠標(biāo)右鍵,然后點(diǎn)擊”在此位置打開 CMD”選項(xiàng),打開后結(jié)果如圖所示。此時(shí)會(huì)打開一個(gè) CMD 命令窗口。如果點(diǎn)擊右鍵沒(méi)有”在此位置打開 CMD”選型的話,請(qǐng)使用makefsdata文件夾下的 cmd.reg 文件導(dǎo)入注冊(cè)表注冊(cè),雙擊打開 cmd.reg,然后一路確定下去就可以了。(4)在打開的 CMD 命令窗口中輸入: makefsdata i 命令,按回車鍵。就會(huì)生成fsdata.c文件,將該文件拷貝到web_server_demo文件下,然后以頭文件的方式包含到工程中即可。3.CGI技術(shù)簡(jiǎn)介公共網(wǎng)關(guān)接口 CGI(Common G

7、ateway Interface) 是 WWW 技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位。 CGI 是外部應(yīng)用程序與 Web 服務(wù)器之間的接口標(biāo)準(zhǔn),是在 CGI 程序和Web 服務(wù)器之間傳遞信息的規(guī)程。 CGI 規(guī)范允許 Web 服務(wù)器執(zhí)行外部程序,并將它們的輸出發(fā)送給 Web 瀏覽器, CGI 在物理上是一段程序,運(yùn)行在服務(wù)器上,提供同客戶端 HTML 頁(yè)面的接口。絕大多數(shù)的 CGI 程序被用來(lái)解釋處理來(lái)自表單的輸入信息,并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器, CGI 程序使網(wǎng)頁(yè)具有交互功能。比如通過(guò)web來(lái)處理提交的數(shù)據(jù),用的就是CGI技術(shù)。CGI示意圖如下:4.SS

8、I技術(shù)簡(jiǎn)介服務(wù)器端嵌入: Server Side Include,是一種類似于 ASP 的基于服務(wù)器的網(wǎng)頁(yè)制作技術(shù)。大多數(shù)的 WEB 服務(wù)器等均支持 SSI 命令。 將內(nèi)容發(fā)送到瀏覽器之前,可以使用“服務(wù)器端包含(SSI)”指令將文本、圖形或應(yīng)用程序信息包含到網(wǎng)頁(yè)中。例如,可以使用 SSI 包含時(shí)間/日期戳、版權(quán)聲明或供客戶填寫并返回的表單。對(duì)于在多個(gè)文件中重復(fù)出現(xiàn)的文本或圖形,使用包含文件是一種簡(jiǎn)便的方法。將內(nèi)容存入一個(gè)包含文件中即可,而不必將內(nèi)容輸入所有文件。通過(guò)一個(gè)非常簡(jiǎn)單的語(yǔ)句即可調(diào)用包含文件,此語(yǔ)句指示 Web 服務(wù)器將內(nèi)容插入適當(dāng)網(wǎng)頁(yè)。而且,使用包含文件時(shí),對(duì)內(nèi)容的所有更改只需在一

9、個(gè)地方就能完成。因?yàn)榘?SSI 指令的文件要求特殊處理,所以必須為所有 SSI 文件賦予 SSI 文件擴(kuò)展名。默認(rèn)擴(kuò)展名是 .stm、 .shtm和 .shtml。SSI 是為 WEB 服務(wù)器提供的一套命令,這些命令只要直接嵌入到 HTML 文檔的注釋內(nèi)容之中即可。如: <!-#include file="info.htm"->就是一條 SSI 指令,其作用是將"info.htm"的內(nèi)容拷貝到當(dāng)前的頁(yè)面中,當(dāng)訪問(wèn)者來(lái)瀏覽時(shí),會(huì)看到其它 HTML 文檔一樣顯示 info.htm 其中的內(nèi)。在本項(xiàng)目中,將串口服務(wù)器的配置信息通過(guò)SSI嵌入的方式

10、來(lái)顯示到網(wǎng)頁(yè)上,還有一種比較高效的交互方式,即通過(guò)ajax來(lái)實(shí)現(xiàn)異步交互,有興趣可以研究下。二 軟件設(shè)計(jì)前面介紹過(guò),fs.c 文件管理生成的網(wǎng)頁(yè)數(shù)組文件這個(gè)文件由 ST 提供。 httpd.c 文件是本章實(shí)驗(yàn)的重點(diǎn), 這個(gè)文件將開發(fā)板配置為 Web Server,這個(gè)文件也由 ST 官方提供的, 閱讀這個(gè)文件需要有網(wǎng)頁(yè)相關(guān)的知識(shí),這里對(duì)這個(gè)文件不做講解。當(dāng)在瀏覽器中輸入網(wǎng)址, web服務(wù)器就會(huì)返回給我們相應(yīng)的網(wǎng)頁(yè),然后瀏覽器解析并呈現(xiàn)給我們。同樣的,當(dāng)我們通過(guò)瀏覽器訪問(wèn)開發(fā)板的時(shí)候,開發(fā)板這時(shí)是作為服務(wù)器的,服務(wù)器針對(duì)不同的 URL 在 fsdata.c 文件中找出相應(yīng)的網(wǎng)頁(yè),并且返回給瀏覽器

11、, 在 fsdata.c 文件中查找網(wǎng)頁(yè)的過(guò)程就需要 fs.c 里面的函數(shù)。 接收瀏覽器發(fā)送的數(shù)據(jù)并且將網(wǎng)頁(yè)返回給瀏覽器的過(guò)程都是由 httpd.c 文件里面的函數(shù)來(lái)完成的。1.POST方法實(shí)現(xiàn)ST的例程中默認(rèn)使用的是GET方法,而在提交用戶名和密碼等數(shù)據(jù)時(shí),希望安全性更高;在提交串口服務(wù)器的配置信息時(shí),信息比較多,也不希望全部添加到URL中,綜上考慮,選擇使用POST方式來(lái)提交表單。因此需要對(duì)httpd.c和httpd.h文件做一些修改。(1)修改httpd.h文件中的宏定義LWIP_HTTPD_SUPPORT_POST,使其支持POST方法。/* 設(shè)置為1支持POST Set this t

12、o 1 to support HTTP POST */#ifndef LWIP_HTTPD_SUPPORT_POST#define LWIP_HTTPD_SUPPORT_POST 1#endif(2)實(shí)現(xiàn)三個(gè)函數(shù),關(guān)于這三個(gè)函數(shù)的詳細(xì)代碼,請(qǐng)參考httpd.c文件。a.err_t httpd_post_begin(void *connection, const char *uri, const char *http_request, u16_t http_request_len, int content_len, char *response_uri, u16_t response_uri_l

13、en, u8_t *post_auto_wnd);b.err_t httpd_post_receive_data(void *connection, struct pbuf *p);c.void httpd_post_finished(void *connection, char *response_uri, u16_t response_uri_len);2.GCI實(shí)現(xiàn)通過(guò)表單提交的不同CGI來(lái)執(zhí)行對(duì)應(yīng)的handler函數(shù),在 httpd_cgi_ssi.c 中我們定義了一個(gè)數(shù)組 ppcURLS,數(shù)組如下:static const tCGI ppcURLs= /cgi程序"/log

14、in.cgi",Login_CGIHandler ,/文件名 文件功能 "/write.cgi",WEBSET_CGIHandler ,/文件名 文件功能 "/setpwd.cgi",SetPwd_CGIHandler ,/文件名 文件功能"/uart.cgi",SetUart_CGIHandler,/文件名 文件功能;關(guān)于以上幾個(gè)cgi說(shuō)明如下表:CGIHandler函數(shù)說(shuō)明/login.cgiLogin_CGIHandler登錄配置/write.cgiWEBSET_CGIHandler串口服務(wù)器參數(shù)配置/setpwd.c

15、giSetPwd_CGIHandler登錄密碼更改/uart.cgiSetUart_CGIHandler串口參數(shù)配置當(dāng)接收到/login.cgi時(shí),就會(huì)執(zhí)行Login_CGIHandler函數(shù),該函數(shù)代碼如下:/登錄的CGI控制句柄const char* Login_CGIHandler(int iIndex,int iNumParams,char *pcParam,char *pcValue) int index; index = FindCGIParameter ( "name", pcParam, iNumParams ); if(index!=-1)if(strcm

16、p(pcValueindex,lwip_login.username) != 0)/用戶名不相等return "/index.shtml" index = FindCGIParameter ( "password", pcParam, iNumParams ); if(index!=-1)if(strcmp(pcValueindex,lwip_login.passwd) != 0)/密碼不相等return "/index.shtml" return "/lwipset.shtml" /這里返回你要發(fā)給瀏覽器的文件名

17、路徑從上面的代碼可以看出,通過(guò)web瀏覽器提交的表單項(xiàng)名稱依次存放在pcParam中,表單項(xiàng)內(nèi)容依次存放在pcValue中,iNumParams存放的是提交的數(shù)據(jù)個(gè)數(shù)。在Login_CGIHandler中,首先判斷是否提交了“name”和“passward”這些表單標(biāo)簽,然后判斷用戶名和密碼是否相等,如果相等,則進(jìn)入串口服務(wù)器配置界面,否則,登錄不成功。其余幾個(gè)handler函數(shù)的原理一樣,不再贅述。3.SSI實(shí)現(xiàn)這里通過(guò)SSI來(lái)實(shí)現(xiàn)配置信息的顯示,如下圖:要實(shí)現(xiàn)SSI,必須在制作網(wǎng)頁(yè)時(shí),在對(duì)應(yīng)的需要顯示的位置添加SSI標(biāo)簽,然后在程序檢測(cè)該標(biāo)簽,從而嵌入對(duì)應(yīng)的數(shù)據(jù)。SSIHandler 函數(shù)

18、為 SSI 的句柄函數(shù),函數(shù)代碼如下, 在這個(gè)函數(shù)中我們根據(jù)參數(shù) iIndex 調(diào)用不同的函數(shù)來(lái)完成向網(wǎng)頁(yè)中添加數(shù)據(jù),這幾個(gè)函數(shù)比較簡(jiǎn)單。在httpd_cgi_ssi.c文件中,SSI標(biāo)簽數(shù)據(jù)定義如下:/SSI插入標(biāo)簽static const char *ppcTAGs= /SSI的Tag"e", /登錄錯(cuò)誤"h", /IP模式"i", /IP地址"j", /端口"k", /工作模式"l", /子網(wǎng)掩碼"m", /網(wǎng)關(guān)"n",/目的IP

19、"o", /目的端口"w", /波特率"x", /數(shù)據(jù)位"y", /校驗(yàn)位"z", /停止位;SSIHandler函數(shù)代碼如下,該函數(shù)通過(guò)判斷SSI標(biāo)簽ppcTAGs來(lái)在不同的位置插入對(duì)應(yīng)的信息。/SSI的Handler句柄/根據(jù)不同的索引來(lái)插入對(duì)應(yīng)的數(shù)據(jù)/返回:插入數(shù)據(jù)的字符串長(zhǎng)度static u16_t SSIHandler(int iIndex,char *pcInsert,int iInsertLen)char *p;switch(iIndex)case 0: /登錄錯(cuò)誤p = &quo

20、t;用戶名或密碼錯(cuò)誤!" WEB_dis_Handler(pcInsert,p);break;case 1:/IP獲取方式if(lwipdev.dhcp_enable) p = "動(dòng)態(tài)獲取" else p = "靜態(tài)" WEB_dis_Handler(pcInsert,p);break;case 2:/ip地址 WEB_dis_Handler(pcInsert,pIp_addr);break;case 3:/端口 WEB_dis_Handler(pcInsert,pIp_Localport);break;case 4:/工作模式if(lwipdev.tcp_mode = TCP_SERVER_MODE)p = "TCP server" elsep = "TCP client"WEB_dis_Handler(pcInsert,p);break; 4.初始化當(dāng)完成以上步驟后,還需要完成CGI和SSI的初始化,分別調(diào)用http_set_cgi_handlers()和http_set_ssi_handler()來(lái)完成,代碼如下:/SSI句柄初始化void httpd_ssi_init(void) /配置內(nèi)部溫度傳感器的SSI句柄http_set_ssi_handler(SSIHandler,ppc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論