2.2 mSever端Web访问程序设计
为了实现多个客户端可以同时访问数据中心服务器,规定客户端在打开服务器的Web页面时,首先提交客户端的IP地址,然后服务器端把客户端的 IP地址收录入库,再将接收到的温度数据转发给指定的客户端。因此,当有多个客户端同时访问数据中心服务器时,服务器端只需要将各个客户端的IP地址收录入库,最后再循环不断地往各个客户端转发温度数据即可。
当客户端断开与服务器端的连接时,将向服务器提交断开请求,从服务器端的IP地址库中释放掉该客户端的IP地址,从而实现了服务器端IP地址库的动态更新。
2.3 节点温度采集软件设计
以下为温度传感器节点的温度采集部分代码:
#include "Mini51B.h"//Mini51板头文件
#include "LCD1602.h"//液晶模块头文件
#include "ds18b20.h"//温度传感器头文件
#include "stdio.h"//C标准函数库,系统集成
#include "DS1302.h"
#define uchar unsigned char
uchar n,temp;
uchar a[6]="000000"; //串口字符串
SYSTEMTIME RTC;
void main(void) {
float V; //记录温度浮点型
uchar str_buff[20];//字符缓冲区
SCON=0x50;//串口工作在方式1,波特率9600,//晶振为22.1184 MHz
PCON=0;
TMOD=0x20;//定时器1工作在方式2
TH1=0xfa;
TL1=0xfa;
IE=0x91;//1001 0001,EA=1,ES=1,EX0=1
IT0=1;//外部中断0为低电平触发方式
TR1=1;//定时器T1开始计数
ds18b20_init();//初始化温度传感器时钟测试
Initial_DS1302();//初始化时钟时间设定,执行一次后删除该部分
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数据发送周期
V=ReadTemperature()/100.0; //温度部分
sprintf(str_buff,"%
lcd_put_xyns(1,1,11,"Temperatur=");
lcd_put_xyns(12,1,5,str_buff);
seg7_disp(V*100);
sprintf(a,"%
DS1302_GetTime(&RTC);//时间部分
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发送数据
for(n=0;n<6;n++) {
SBUF=a[n];
while(!TI);
TI=0;
}
delay_ms(1100);
}
void receving() interrupt 4 {//串口中断程序接收数据
temp=SBUF;
RI=0;
}
结语
经过实际运行和测试证明,系统稳定可靠,系统误差达到了规定的要求。本系统虽然是以无线温度传感器节点为例,但同样也适合其他各种类型的无线传感器节点,因此可以推广到无线传感器网络的其他应用领域或行业,如电力抄表、配电自动化、路灯监控、道路交通等。
参考文献
[1] 谢希仁.计算机网络[M].大连:大连理工大学出版社,2006:101132.
[2] 肖宏伟.Visual C++开发答疑[M].北京:人民邮电出版社,
2003:97107.
[3] 邱天爽,等.无线传感器网络协议与体系结构[M].北京:电子工业出版社,2007:3647.
[4] 王殊.无线传感器网络的理论及应用[M].北京:北京航空航天大学出版社,2007:89101.
洪家平(教授),主要研究方向为嵌入式系统应用、无线传感器网络技术与应用;汪自云(教授);丁辉,计算机科学与技术专业。