基于ARM9的嵌入式Web服務(wù)器數(shù)據(jù)動(dòng)態(tài)顯示的實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
當(dāng)今,以互聯(lián)網(wǎng)為標(biāo)志的嵌入式系統(tǒng)正處于一個(gè)飛速發(fā) 展的階段。嵌入式系統(tǒng)接入Internet后,相當(dāng)于一個(gè)功能齊全 的小型Web服務(wù)器,用戶在上位機(jī)打開瀏覽器,通過(guò)Internet 即可獲取該Web服務(wù)器上的數(shù)據(jù)信息,從而實(shí)現(xiàn)了對(duì)現(xiàn)場(chǎng)信 息的遠(yuǎn)程監(jiān)控,而且這種基于HTML語(yǔ)言標(biāo)準(zhǔn)化的Web用戶 界面降低了系統(tǒng)開發(fā)、維護(hù)以及人員培訓(xùn)的費(fèi)用。
對(duì)于無(wú)線傳感網(wǎng)絡(luò)來(lái)說(shuō),可將嵌入式網(wǎng)關(guān)作為Web服務(wù) 器,用戶在上位機(jī)通過(guò)Internet訪問(wèn)網(wǎng)頁(yè)的方式獲取下位機(jī)傳 感器節(jié)點(diǎn)采集的數(shù)據(jù)。基于此,本系統(tǒng)采用DS18B20溫度傳 感器和ZigBee無(wú)線通信模塊構(gòu)成無(wú)線傳感網(wǎng)絡(luò),以ARM9 作為核心處理器搭建嵌入式Web服務(wù)器Boa和嵌入式數(shù)據(jù)庫(kù) SQLite,采用C語(yǔ)言、HTML語(yǔ)言、JavaScript程序、CGI程序、 Ajax技術(shù),實(shí)現(xiàn)了對(duì)遠(yuǎn)端傳感器節(jié)點(diǎn)采集信息的處理、存儲(chǔ) 及在網(wǎng)頁(yè)上的動(dòng)態(tài)顯示。
1系統(tǒng)硬件整體設(shè)計(jì)
本系統(tǒng)的硬件主要由3部分組成:上位機(jī)PC端、嵌入 式網(wǎng)關(guān)(ARM9)和ZigBee無(wú)線網(wǎng)絡(luò),系統(tǒng)的整體設(shè)計(jì)框圖 如圖1所示。
ZigBee無(wú)線網(wǎng)絡(luò)由傳感器節(jié)點(diǎn)和協(xié)調(diào)器構(gòu)成,傳感器節(jié) 點(diǎn)將采集的信息經(jīng)協(xié)調(diào)器發(fā)送至網(wǎng)關(guān),同時(shí)協(xié)調(diào)器也可接收網(wǎng) 關(guān)發(fā)送的指令進(jìn)而控制節(jié)點(diǎn)的打開與關(guān)閉。嵌入式網(wǎng)關(guān)介于上位機(jī)和傳感器節(jié)點(diǎn)之間,它既要支持TCP/IP協(xié)議,允許用戶 通過(guò)Internet訪問(wèn),又要實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)和Internet之間的地址 映射、協(xié)議轉(zhuǎn)換和路由功能,類似于Internet網(wǎng)關(guān)叫 由于嵌 入式網(wǎng)關(guān)CPU串口引腳不是標(biāo)準(zhǔn)RS232電平,在ZigBee與網(wǎng) 關(guān)之間需加入電平轉(zhuǎn)換電路[4]。PC端即上位機(jī)客戶端,用戶 在上位機(jī)通過(guò)瀏覽器輸入嵌入式網(wǎng)關(guān)的IP地址可進(jìn)入系統(tǒng)登 錄界面,登錄后用戶經(jīng)管理系統(tǒng)獲取傳感器節(jié)點(diǎn)采集的數(shù)據(jù), 以訪問(wèn)網(wǎng)頁(yè)的方式實(shí)時(shí)顯示數(shù)據(jù)信息,并可輸入指令實(shí)現(xiàn)對(duì)下 位機(jī)傳感器節(jié)點(diǎn)的控制。本文重點(diǎn)介紹嵌入式網(wǎng)關(guān)Web服務(wù) 器的設(shè)計(jì),實(shí)現(xiàn)溫度數(shù)據(jù)在上位機(jī)的動(dòng)態(tài)顯示。
2嵌入式Web服務(wù)器的搭建
硬件電路采用ARM9微處理器及外圍電路,開發(fā)環(huán)境: MINI2440, Linux_2.6.32.2 內(nèi)核,虛擬機(jī) Redhat5,交叉編譯 版本ARM-Linux-gcc-4.3.2。主要工作包括Linux內(nèi)核移植、 根文件系統(tǒng)制作、交叉編譯工具安裝、Web服務(wù)器源碼分析等。 2.1交叉編譯工具安裝
交叉編譯即在一個(gè)平臺(tái)上編譯生成可在另一平臺(tái)運(yùn)行的 代碼。本設(shè)計(jì)包括安裝Linux系統(tǒng)的宿主機(jī)和基于ARM MINI2440的目標(biāo)板,由于二者處理器體系結(jié)構(gòu)不同,因此需 借助交叉編譯工具在宿主機(jī)編譯生成目標(biāo)板上可運(yùn)行的機(jī)器 代碼。本系統(tǒng)使用交叉編譯工具版本為ARM-Linux-gcc-4.3.2,將其拷貝到宿主機(jī)系統(tǒng),把編譯器路徑加入環(huán)境變量保存, 重啟系統(tǒng)后在終端輸入arm-linux-gcc -v出現(xiàn)交叉編譯工具版 本信息,表示交叉編譯器安裝成功。
2.2 BOA源碼分析及安裝
Web服務(wù)器采用BOA文件生成,它能按照順序完成用戶 請(qǐng)求,支持認(rèn)證、CGI程序,其可執(zhí)行代碼約60 KB。BOA 服務(wù)器的編譯與移植如下:進(jìn)入boa-0.94-13文件夾的src 目錄,運(yùn)行configure配置安裝文件,根據(jù)Makefiles生成 Makefile文件進(jìn)行修改,再執(zhí)行make,生成可執(zhí)行程序boa 后修改/etc/boa.conf,對(duì)boa進(jìn)行配置編譯,與虛擬機(jī)etc目 錄下mine.types 一起拷貝到目標(biāo)板var目錄,執(zhí)行./boa,Web 服務(wù)器在目標(biāo)板上即可運(yùn)行。
3數(shù)據(jù)動(dòng)態(tài)顯示的實(shí)現(xiàn)
通過(guò)上位機(jī)實(shí)時(shí)顯示傳感器節(jié)點(diǎn)發(fā)送給網(wǎng)關(guān)的數(shù)據(jù)是一 個(gè)難點(diǎn),一般采用手動(dòng)或自動(dòng)刷新來(lái)實(shí)現(xiàn)數(shù)據(jù)更新,但都無(wú)法 實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)動(dòng)態(tài)顯示。本設(shè)計(jì)以采集溫度數(shù)據(jù)為例,在 網(wǎng)頁(yè)中嵌入JavaScript,采用Ajax技術(shù)實(shí)現(xiàn)溫度信息的動(dòng)態(tài)實(shí) 時(shí)顯示,節(jié)約了 CPU資源。
3.1軟件流程
在嵌入式網(wǎng)關(guān)中,通過(guò)串口采集溫度信號(hào),每個(gè)溫度數(shù) 據(jù)前面帶有設(shè)備號(hào)字符,將不同傳感器節(jié)點(diǎn)采集的溫度信息分 別存儲(chǔ)在txt文檔中,上位機(jī)通過(guò)Internet訪問(wèn)嵌入式網(wǎng)關(guān)讀 取txt文檔信息,并在網(wǎng)頁(yè)上動(dòng)態(tài)顯示。采用txt文檔存儲(chǔ)數(shù)據(jù), 一方面有利于在現(xiàn)場(chǎng)直接從網(wǎng)關(guān)SD卡中讀取信息;另一方面 有利于上位機(jī)編程讀取數(shù)據(jù)。其溫度動(dòng)態(tài)顯示軟件流程圖如 圖2所示。
3.2溫度信息處理
協(xié)調(diào)器將傳感器節(jié)點(diǎn)采集的溫度值通過(guò)串口傳送到嵌入 式網(wǎng)關(guān),需定義傳感器節(jié)點(diǎn)的設(shè)備號(hào),以實(shí)現(xiàn)不同節(jié)點(diǎn)采集的 溫度值在txt文檔中存儲(chǔ),數(shù)據(jù)格式如表1所列。
把編寫好的串口 C程序在宿主機(jī)編譯后生成的temper文 件,并將temper、CGI程序和js程序拷貝到ARM板服務(wù)器 WWW目錄下,執(zhí)行temper,在服務(wù)器WWW目錄下生成3 個(gè)txt文檔,實(shí)現(xiàn)了溫度數(shù)據(jù)的存儲(chǔ)。
表1數(shù)據(jù)傳送格
設(shè)備號(hào) |
溫度值(C) |
電壓值(V) |
設(shè)備1 |
溫度值1 |
電壓值1 |
設(shè)備2 |
溫度值2 |
電壓值2 |
設(shè)備3 |
溫度值3 |
電壓值3 |
3.3數(shù)據(jù)的讀取及顯示
為了實(shí)現(xiàn)溫度的動(dòng)態(tài)顯示,在溫度顯示網(wǎng)頁(yè)(temper. html)中采用JavaScript (js)程序[8],通過(guò)加入定時(shí)器每隔一 段時(shí)間調(diào)用CGI程序以獲取txt文檔的溫度值。由于采樣數(shù)據(jù) 不斷存儲(chǔ)到txt文檔,CGI程序采用倒序方法首先讀取txt文 檔最后一行獲取最新數(shù)據(jù),從而在網(wǎng)頁(yè)上動(dòng)態(tài)顯示溫度。
4結(jié)果分析
在IE瀏覽器中輸入目標(biāo)機(jī)的IP地址,登錄系統(tǒng)進(jìn)入到 溫度顯示頁(yè)面(temper.html),如圖3所示,點(diǎn)擊獲取按鈕, 溫度值將顯示在頁(yè)面上,設(shè)置溫度數(shù)據(jù)5秒更新一次,當(dāng)改 變溫度傳感器采集的溫度時(shí),網(wǎng)頁(yè)顯示數(shù)據(jù)也同時(shí)更新,溫 度顯示頁(yè)面如圖3所示,從圖3可以看出,當(dāng)采集溫度數(shù)據(jù)發(fā) 生變化時(shí),頁(yè)面顯示溫度值也隨之改變,實(shí)現(xiàn)了傳感器節(jié)點(diǎn)采 樣數(shù)據(jù)的動(dòng)態(tài)顯示。
5結(jié)語(yǔ)
本文通過(guò)構(gòu)建ARM-Linux嵌入式網(wǎng)關(guān),利用BOA服務(wù) 器、運(yùn)用JavaScript, CGI、Ajax技術(shù)及HTML語(yǔ)言實(shí)現(xiàn)了傳 感器節(jié)點(diǎn)采集的溫度在上位機(jī)網(wǎng)頁(yè)的動(dòng)態(tài)顯示,與傳統(tǒng)的手 動(dòng)或自動(dòng)刷新網(wǎng)頁(yè)相比,該系統(tǒng)占用服務(wù)器CPU資源少,縮 短了用戶等待時(shí)間,實(shí)現(xiàn)了下位機(jī)采集的現(xiàn)場(chǎng)數(shù)據(jù)在上位機(jī)實(shí) 時(shí)動(dòng)態(tài)顯示。
20211119_6197b878b28ee__基于ARM9的嵌入式Web服務(wù)器數(shù)據(jù)動(dòng)態(tài)顯示的實(shí)現(xiàn)