基于Internet網(wǎng)絡(luò)架構(gòu)的無線傳感器網(wǎng)絡(luò)系統(tǒng)
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頁面時(shí),首先提交客戶端的IP地址,然后服務(wù)器端把客戶端的IP地址收錄入庫,再將接收到的溫度數(shù)據(jù)轉(zhuǎn)發(fā)給指定的客戶端。因此,當(dāng)有多個(gè)客戶端同時(shí)訪問數(shù)據(jù)中心服務(wù)器時(shí),服務(wù)器端只需要將各個(gè)客戶端的IP地址收錄入庫,最后再循環(huán)不斷地往各個(gè)客戶端轉(zhuǎn)發(fā)溫度數(shù)據(jù)即可。
當(dāng)客戶端斷開與服務(wù)器端的連接時(shí),將向服務(wù)器提交斷開請(qǐng)求,從服務(wù)器端的IP地址庫中釋放掉該客戶端的IP地址,從而實(shí)現(xiàn)了服務(wù)器端IP地址庫的動(dòng)態(tài)更新。
2.3 節(jié)點(diǎn)溫度采集軟件設(shè)計(jì)
以下為溫度傳感器節(jié)點(diǎn)的溫度采集部分代碼:
#include Mini51B.h//Mini51板頭文件
#include LCD1602.h//液晶模塊頭文件
#include ds18b20.h//溫度傳感器頭文件
#include stdio.h//C標(biāo)準(zhǔn)函數(shù)庫,系統(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,http://www.stuelab.cn/>);
delay_ms(1000);
while(1) {
for(n=0;n10;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);
評(píng)論