Distributed Wireless Sensor Networks Based on MD600G and Internet
Hong Jiaping, Wang Ziyun, Ding Hui
(College of Computer Science and Technology,Hubei Normal University,Huangshi 435002,China)
Abstract: A distributed wireless sensor nodes network system based on MD600G and internet architecture is generated. The realtime data tracking and realtime database generation of distance nodes processoriented behavior are realized. It not only has lowpower, lowcost, distributed and selforganizing characteristics, but also achieves transparent transmission of communication information, Internetbased visualization of dynamic data and other functions.
Key words: distributed; wireless sensor networks; visualization
引言
隨著微機(jī)電系統(tǒng)(MicroElectroMechanism System, MEMS)、片上系統(tǒng)(System on Chip,SoC)、無線通信和低功耗嵌入式技術(shù)的飛速發(fā)展,傳感器" title="傳感器">傳感器">無線傳感器" title="無線傳感器">無線傳感器網(wǎng)絡(luò)" title="網(wǎng)絡(luò)">網(wǎng)絡(luò)(Wireless Sensor Networks, WSN)也以其低功耗、低成本、分布式和自組織等特點(diǎn)帶來了信息感知的一場(chǎng)變革。無線傳感器網(wǎng)絡(luò)由部署在監(jiān)測(cè)區(qū)域內(nèi)大量的廉價(jià)微型傳感器節(jié)點(diǎn)組成,通過無線通信方式形成一個(gè)多跳的自組織網(wǎng)絡(luò)。
無線傳感器網(wǎng)絡(luò)可連接眾多類型的傳感器,可探測(cè)包括地震波、電磁場(chǎng)、溫度、濕度、噪聲、光強(qiáng)度、壓力、土壤成分、移動(dòng)物體的大小和速度等?;贛EMS的微傳感技術(shù)和無線互聯(lián)網(wǎng)技術(shù)為無線傳感器網(wǎng)絡(luò)賦予了廣闊的應(yīng)用前景,在航空、反恐、防爆、救災(zāi)、環(huán)境、醫(yī)療、保健、家居、工業(yè)、商業(yè)等領(lǐng)域有廣泛的應(yīng)用。本文以無線溫度傳感器節(jié)點(diǎn)和無線數(shù)據(jù)終端MD600G為例,介紹了基于MD600G的Internet無線傳感器網(wǎng)絡(luò)的設(shè)計(jì),并給出了對(duì)溫度數(shù)據(jù)的可視化處理等操作的實(shí)現(xiàn)。
1 基于Internet的無線傳感器網(wǎng)原理
1.1 MD600G簡(jiǎn)介
智能無線數(shù)據(jù)終端MD600G可以用于數(shù)據(jù)中心和被監(jiān)控設(shè)備間,實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)程透明傳輸。MD600G的內(nèi)部結(jié)構(gòu)如圖1所示,它有如下特點(diǎn):
①基于ARM平臺(tái)、8 MB數(shù)據(jù)緩存,內(nèi)置Siemens MC35i GPRS無線模塊;
②嵌入式Linux系統(tǒng),包含TCP/IP協(xié)議棧以及ETCPTM協(xié)議,保證傳輸數(shù)據(jù)不丟失;
③提供獨(dú)立RS232配置串口及標(biāo)準(zhǔn)RS232/485數(shù)據(jù)接口;
④符合電工電子產(chǎn)品低溫GB/T2423.1、高溫GB/T2423.2的要求,適于在氣候條件惡劣的地區(qū)及戶外使用;
⑤可以快速連接RTU、PLC、工控機(jī)等設(shè)備,實(shí)現(xiàn)數(shù)據(jù)透明傳輸,廣泛應(yīng)用于電力抄表、配電自動(dòng)化、路燈監(jiān)控、道路交通等行業(yè)。
圖1 MD600G硬件結(jié)構(gòu)圖
1.2 無線傳感器網(wǎng)絡(luò)
由MD600G組成的基于Internet無線傳感器網(wǎng)絡(luò)原理圖如圖2所示。
圖2 無線傳感器網(wǎng)絡(luò)結(jié)構(gòu)原理圖
圖2中的用戶設(shè)備是自行開發(fā)的溫度傳感器節(jié)點(diǎn)。傳感器節(jié)點(diǎn)采樣的數(shù)據(jù)通過RS232/485接口傳送到智能無線數(shù)據(jù)終端MD600G,MD600G對(duì)接收到的數(shù)據(jù)通過GPRS與Internet連接并進(jìn)行無線數(shù)據(jù)透明傳送,服務(wù)器mSever端通過Internet網(wǎng)將接收到的數(shù)據(jù)生成實(shí)時(shí)數(shù)據(jù)庫(kù),同時(shí)將這些實(shí)時(shí)數(shù)據(jù)以WEB頁(yè)的形式動(dòng)態(tài)顯示和跟蹤。
1.3 溫度傳感器節(jié)點(diǎn)
溫度傳感器節(jié)點(diǎn)模塊主要由溫度傳感器DS18B20組成,并將其輸出的溫度數(shù)據(jù)送往單片機(jī),然后單片機(jī)將這些數(shù)據(jù)進(jìn)行相關(guān)處理,最后再送往后續(xù)的通信設(shè)備,并將溫度數(shù)據(jù)進(jìn)行數(shù)碼管或液晶屏顯示。這里采用了實(shí)時(shí)時(shí)鐘電路DS1302來實(shí)現(xiàn)該系統(tǒng)的實(shí)時(shí)性。
2 軟件設(shè)計(jì)
基于MD600G和Internet的無線傳感器網(wǎng)的軟件包括溫度傳感器節(jié)點(diǎn)的軟件設(shè)計(jì)、MD600G與溫度傳感器節(jié)點(diǎn)的串口軟件設(shè)計(jì)、服務(wù)器mSever端與Internet網(wǎng)的數(shù)據(jù)通信軟件及mSever端溫度數(shù)據(jù)可視化程序的設(shè)計(jì)等。
2.1 mSever端溫度數(shù)據(jù)可視化程序設(shè)計(jì)
利用Visual C++強(qiáng)大的編譯器以及網(wǎng)絡(luò)與數(shù)據(jù)庫(kù)的處理能力,開發(fā)出基于Windows平臺(tái)的32位數(shù)據(jù)可視化應(yīng)用程序。圖3是mSever端溫度數(shù)據(jù)可視化程序設(shè)計(jì)的原理圖。
圖3 可視化界面的設(shè)計(jì)原理圖
以下為可視化界面模塊源碼:
void CDemoView::OnInitialUpdate() {
CView::OnInitialUpdate();
CRect Rect;
GetClientRect(Rect);
m_Plot.Create(WS_CHILD|WS_VISIBLE,Rect,this,12000);
m_Plot.SetSerie(0, PS_SOLID, RGB(255,0,0), 0.0, 40.0, "Temperature");//窗口
m_Plot.SetLegend(0, PS_SOLID, RGB(255,0,0), "Temperature");//背景方框
m_Plot.m_bAutoScrollX=TRUE;
SetTimer(1,1000,NULL);//背景刷新時(shí)間
canSize=TRUE;
}
void CDemoView::OnTimer(UINT nIDEvent) {
static BOOL pros={FALSE};
if(!pros) {
pros=TRUE;
CDemoDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
y=pDoc->p.buffer;
m_Plot.AddPoint(0,CTime::GetCurrentTime(),y);
Invalidate();
pros=FALSE;
}
CView::OnTimer(nIDEvent);
}
void CDemoView::OnSize(UINT nType, int cx, int cy) {
CView::OnSize(nType, cx, cy);
if(canSize) {
CRect Rect;
GetClientRect(Rect);
m_Plot.MoveWindow(Rect);
}
}
void CDASocket::OnReceive(int nErrorCode) { //接收數(shù)據(jù)端的程序
char buff[64];
int ret=0;
ret=Receive(buff,64);//AfxMessageBox("OK");
if(ret==ERROR)
{TRACE("ERROR!");}
else
m_pDoc->Presscessding(buff);
CAsyncSocket::OnReceive(nErrorCode);
}
圖4是用Visual C++開發(fā)的mSever端溫度數(shù)據(jù)可視化顯示的界面,圖中顯示的是1個(gè)節(jié)點(diǎn)的溫度變化實(shí)時(shí)曲線。
圖4 服務(wù)器mSever端溫度數(shù)據(jù)可視化顯示界面
2.2 mSever端Web訪問程序設(shè)計(jì)
為了實(shí)現(xiàn)多個(gè)客戶端可以同時(shí)訪問數(shù)據(jù)中心服務(wù)器,規(guī)定客戶端在打開服務(wù)器的Web頁(yè)面時(shí),首先提交客戶端的IP地址,然后服務(wù)器端把客戶端的IP地址收錄入庫(kù),再將接收到的溫度數(shù)據(jù)轉(zhuǎn)發(fā)給指定的客戶端。因此,當(dāng)有多個(gè)客戶端同時(shí)訪問數(shù)據(jù)中心服務(wù)器時(shí),服務(wù)器端只需要將各個(gè)客戶端的IP地址收錄入庫(kù),最后再循環(huán)不斷地往各個(gè)客戶端轉(zhuǎn)發(fā)溫度數(shù)據(jù)即可。
當(dāng)客戶端斷開與服務(wù)器端的連接時(shí),將向服務(wù)器提交斷開請(qǐng)求,從服務(wù)器端的IP地址庫(kù)中釋放掉該客戶端的IP地址,從而實(shí)現(xiàn)了服務(wù)器端IP地址庫(kù)的動(dòng)態(tài)更新。
2.3 節(jié)點(diǎn)溫度采集" title="采集">采集軟件設(shè)計(jì)
以下為溫度傳感器節(jié)點(diǎn)的溫度采集部分代碼:
#include "Mini51B.h"//Mini51板頭文件
#include "LCD1602.h"//液晶模塊頭文件
#include "ds18b20.h"//溫度傳感器頭文件
#include "stdio.h"//C標(biāo)準(zhǔn)函數(shù)庫(kù),系統(tǒng)集成
#include "DS1302.h"
#define uchar unsigned char
uchar n,temp;
uchar a[6]="000000"; //串口字符串
SYSTEMTIME RTC;
void main(void) {
float V; //記錄溫度浮點(diǎn)型
uchar str_buff[20];//字符緩沖區(qū)
SCON=0x50;//串口工作在方式1,波特率9600,//晶振為22.1184 MHz
PCON=0;
TMOD=0x20;//定時(shí)器1工作在方式2
TH1=0xfa;
TL1=0xfa;
IE=0x91;//1001 0001,EA=1,ES=1,EX0=1
IT0=1;//外部中斷0為低電平觸發(fā)方式
TR1=1;//定時(shí)器T1開始計(jì)數(shù)
ds18b20_init();//初始化溫度傳感器時(shí)鐘測(cè)試
Initial_DS1302();//初始化時(shí)鐘時(shí)間設(shè)定,執(zhí)行一次后刪除該部分
Write1302(DS1302_MINUTE, 0x11);
Write1302(DS1302_HOUR,0x08);
Write1302(DS1302_DAY,0x15);
Write1302(DS1302_MONTH,0x04);
Write1302(DS1302_YEAR,0x08);
lcd1602_init();
lcd_put_xyns(2,1,14,"www.stuelab.cn");
delay_ms(1000);
while(1) {
for(n=0;n<10;n++) { //10*0.5 s=5 s數(shù)據(jù)發(fā)送周期
V=ReadTemperature()/100.0; //溫度部分
sprintf(str_buff,"%2.2f",V); //格式轉(zhuǎn)換
lcd_put_xyns(1,1,11,"Temperatur=");
lcd_put_xyns(12,1,5,str_buff);
seg7_disp(V*100);
sprintf(a,"%2.2f",V);//送串口字符串
DS1302_GetTime(&RTC);//時(shí)間部分
DateToStr(&RTC);
TimeToStr(&RTC);
lcd_put_xyns(1,2,8,RTC.DateString);
lcd_put_xyns(9,2,8,RTC.TimeString);
delay_ms(500);
}
for(n=0;n<6;n++) {
SBUF=a[n];
while(!TI);
TI=0;
}
}
}
void external0() interrupt 0{//外部中斷0發(fā)送數(shù)據(jù)
for(n=0;n<6;n++) {
SBUF=a[n];
while(!TI);
TI=0;
}
delay_ms(1100);
}
void receving() interrupt 4 {//串口中斷程序接收數(shù)據(jù)
temp=SBUF;
RI=0;
}
結(jié)語
經(jīng)過實(shí)際運(yùn)行和測(cè)試證明,系統(tǒng)穩(wěn)定可靠,系統(tǒng)誤差達(dá)到了規(guī)定的要求。本系統(tǒng)雖然是以無線溫度傳感器節(jié)點(diǎn)為例,但同樣也適合其他各種類型的無線傳感器節(jié)點(diǎn),因此可以推廣到無線傳感器網(wǎng)絡(luò)的其他應(yīng)用領(lǐng)域或行業(yè),如電力抄表、配電自動(dòng)化、路燈監(jiān)控、道路交通等。