物联网课程设计基于温湿度传感器物联网应用实时数据处理系统开发46Word格式文档下载.docx
- 文档编号:17881429
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:51
- 大小:120.75KB
物联网课程设计基于温湿度传感器物联网应用实时数据处理系统开发46Word格式文档下载.docx
《物联网课程设计基于温湿度传感器物联网应用实时数据处理系统开发46Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《物联网课程设计基于温湿度传感器物联网应用实时数据处理系统开发46Word格式文档下载.docx(51页珍藏版)》请在冰豆网上搜索。
2.然后通过ubuntu发送到linux、接收并用动态网页显示代表数据变化的曲线。
三、要达到的目标
1.可以在ubuntu上实现自动接收由传感器取得、传来的实时数据。
2.并ubuntu上能边接收边连续往linux发送从传感器取得的实时数据。
3.还要确保发送过的数据不会再次发送。
4.Linux能接收到ubuntu发过来的实时数据并通过动态网页曲线图实时显示接收过来的数据。
实现方案
一、开发环境
1.硬件(详细介绍所涉及硬件的详细内容)
Pc机、温湿度传感器、传感器实验箱、连接所需的各种线。
2.软件(详细介绍所涉及软件的详细内容)
MDK414(arm平台编译烧录代码软件)、KeilC51v750a_Full(C51平台编译软件)、STC手动下载(C51烧录代码软件)、R340(串口线连接USB驱动)、ubuntu操作系统、linux操作系统。
3.其它
二、开发内容
1.项目开发详细内容(包括传感器的配置、传感器烧录、数据的实时收集、实时数据的存储、实时数据的传输、实时数据在服务器端的接受及存储-TCPServer及MySql、数据库及Web服务器安装、利用JSP曲线动态显示实时数据)
首先烧录整合好的温湿度传感器的代码。
接着连接传感器取得数据。
然后在ubuntu中编译并运行Com_Sensor程序获取传感器实验箱的数据。
在Ubuntu11编译并运行senddata.c把数据发送到linux.Linux通过TCPServer服务器接收数据并存入MySQL数据库。
最后将接收到的数据通过Linuxweb服务器以jsp曲线动态显示实时数据。
2.网络拓扑图(包括传感器、网关、传输网络、TCPServer服务器、数据库服务器、静态及动态Web服务器、Web服务器客户端;
并详细标注设备名称及IP地址等详细信息;
并详细叙述网络拓扑图流程)
三、技术路线
1.传感器数据处理(给出详细的传感器烧录代码)
代码如下:
/*********************************************************/
//中软吉大信息技术有限公司
//物联网传感技术教学实验系统
#include<
intrins.h>
//Keillibrary(isusedfor_nop()_operation)
math.h>
//Keillibrary
#include"
Lcmdisplay.h"
#defineFOSC11059200
#defineBAUD14400
typedefunion
{unsignedinti;
floatf;
}value;
//----------------------------------------------------------------------------------
//modul-var
enum{TEMP,HUMI};
#definenoACK0
#defineACK1
//adrcommandr/w
#defineSTATUS_REG_W0x06//00000110
#defineSTATUS_REG_R0x07//00000111
#defineMEASURE_TEMP0x03//00000011
#defineMEASURE_HUMI0x05//00000101
#defineRESET0x1e//00011110
sbitDATA=P2^2;
sbitSCK=P2^1;
sbitPOWER=P2^5;
sbitflag1=P0^7;
sbitflag2=P4^6;
sbitflag3=P2^7;
sbitflag4=P2^6;
voiddelay(unsignedintnTimeDelay)
{
unsignedinti;
while(nTimeDelay--)
for(i=0;
i<
125;
i++);
}
voidSerial_Init()
TMOD=0x01;
TR0=1;
EA=1;
ET0=0;
TF0=0;
S2CON=0x50;
//8位可变波特率(无校验位)
BRT=-(FOSC/32/BAUD);
//设置独立波特率发生器的重载初值
AUXR=0x14;
//独立波特率发生器工作在1T模式
//IE2=0x01;
//使能串口2中断
voidIO_Init(void)
{
P2M1=P2M1&
0xdf;
P2M0=P2M0&
P0M1=P0M1&
0x7f;
P0M0=P0M0&
P4M1=P4M1&
0xbf;
P4M0=P4M0&
0x3f;
P4SW=P4SW|0x40;
voidPower_Identify(void)
while
(1)
{
if(POWER==0)
{
delay(4000);
LcmPrintf("
请给传感器模块上电!
\n"
);
}
elsebreak;
}
voidModule_Identify(unsignedintxuhao)
unsignedintabc=0;
if(flag4==1)abc=abc+1;
abc=abc<
<
1;
if(flag3==1)abc=abc+1;
if(flag2==1)abc=abc+1;
if(flag1==1)abc=abc+1;
if(abc!
=xuhao)
{
delay(3000);
LcmPrintf("
提示:
您插入的模块不正确!
}
=xuhao);
else
delay(2000);
LcmPrintf("
连接的模块是M%u\n"
xuhao);
delay(5000);
break;
chars_write_byte(unsignedcharvalue)
//writesabyteontheSensibusandcheckstheacknowledge
unsignedchari,error=0;
for(i=0x80;
i>
0;
i/=2)//shiftbitformasking
{if(i&
value)
DATA=1;
//maskingvaluewithi,writetoSENSI-BUS
elseDATA=0;
_nop_();
//observesetuptime
SCK=1;
//clkforSENSI-BUS
_nop_();
//pulswithapprox.5us
SCK=0;
//observeholdtime
}
//releaseDATA-line
//clk#9forack
error=DATA;
//checkack(DATAwillbepulleddownbySHT11)
returnerror;
//error=1incaseofnoacknowledge
}
chars_read_byte(unsignedcharack)
//readsabyteformtheSensibusandgivesanacknowledgeincaseof"
ack=1"
unsignedchari,val=0;
{SCK=1;
if(DATA)val=(val|i);
//readbit
DATA=!
ack;
//incaseof"
ack==1"
pulldownDATA-Line
returnval;
voids_transstart(void)
//generatesatransmissionstart
//_____________
//DATA:
|_______|
//______
//SCK:
___||___||______
//Initialstate
DATA=0;
voids_connectionreset(void)
//communicationreset:
DATA-line=1andatleast9SCKcyclesfollowedbytransstart
//_____________________________________________________________
//_______________
__||__||__||__||__||__||__||__||__||______||___||______
unsignedchari;
for(i=0;
9;
i++)//9SCKcycles
s_transstart();
//transmissionstart
chars_softreset(void)
//resetsthesensorbyasoftreset
unsignedcharerror=0;
s_connectionreset();
//resetcommunication
error+=s_write_byte(RESET);
//sendRESET-commandtosensor
//error=1incaseofnoresponseformthesensor
chars_read_statusreg(unsignedchar*p_value,unsignedchar*p_checksum)
//readsthestatusregisterwithchecksum(8-bit)
error=s_write_byte(STATUS_REG_R);
//sendcommandtosensor
*p_value=s_read_byte(ACK);
//readstatusregister(8-bit)
*p_checksum=s_read_byte(noACK);
//readchecksum(8-bit)
chars_write_statusreg(unsignedchar*p_value)
//writesthestatusregisterwithchecksum(8-bit)
error+=s_write_byte(STATUS_REG_W);
//sendcommandtosensor
error+=s_write_byte(*p_value);
//sendvalueofstatusregister
//error>
=1incaseofnoresponseformthesensor
chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedchar
mode)
//makesameasurement(humidity/temperature)withchecksum
switch(mode){//sendcommandtosensor
caseTEMP:
error+=s_write_byte(MEASURE_TEMP);
break;
caseHUMI:
error+=s_write_byte(MEASURE_HUMI);
default:
65535;
i++)if(DATA==0)break;
//waituntilsensorhasfinishedthemeasurement
if(DATA)error+=1;
//ortimeout(~2sec.)isreached
*(p_value)=s_read_byte(ACK);
//readthefirstbyte(MSB)
*(p_value+1)=s_read_byte(ACK);
//readthesecondbyte(LSB)
*p_checksum=s_read_byte(noACK);
//readchecksum
voidcalc_sth11(float*p_humidity,float*p_temperature)
//calculatestemperature[°
C]andhumidity[%RH]
//input:
humi[Ticks](12bit)
//temp[Ticks](14bit)
//output:
humi[%RH]
//temp[°
C]
{constfloatC1=-2.0468;
//for12BitRH
constfloatC2=+0.0367;
constfloatC3=-0.0000015955;
constfloatT1=+0.01;
constfloatT2=+0.00008;
floatrh=*p_humidity;
//rh:
Humidity[Ticks]12Bit
floatt=*p_temperature;
//t:
Temperature[Ticks]14Bit
floatrh_lin;
//rh_lin:
Humiditylinear
floatrh_true;
//rh_true:
Temperaturecompensatedhumidity
floatt_C;
//t_C:
Temperature[°
t_C=t*0.01-40.1;
//calc.temperature[°
C]from14bittemp.ticks@5V
rh_lin=C3*rh*rh+C2*rh+C1;
//calc.humidityfromticksto[%RH]
rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;
//calc.temperaturecompensatedhumidity[%RH]
if(rh_true>
100)rh_true=100;
//cutifthevalu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 联网 课程设计 基于 温湿度 传感 器物 应用 实时 数据处理系统 开发 46