DS18B20传感.docx

上传人:b****0 文档编号:18298767 上传时间:2023-08-15 格式:DOCX 页数:15 大小:1.90MB
下载 相关 举报
DS18B20传感.docx_第1页
第1页 / 共15页
DS18B20传感.docx_第2页
第2页 / 共15页
DS18B20传感.docx_第3页
第3页 / 共15页
DS18B20传感.docx_第4页
第4页 / 共15页
DS18B20传感.docx_第5页
第5页 / 共15页
DS18B20传感.docx_第6页
第6页 / 共15页
DS18B20传感.docx_第7页
第7页 / 共15页
DS18B20传感.docx_第8页
第8页 / 共15页
DS18B20传感.docx_第9页
第9页 / 共15页
DS18B20传感.docx_第10页
第10页 / 共15页
DS18B20传感.docx_第11页
第11页 / 共15页
DS18B20传感.docx_第12页
第12页 / 共15页
DS18B20传感.docx_第13页
第13页 / 共15页
DS18B20传感.docx_第14页
第14页 / 共15页
DS18B20传感.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DS18B20传感.docx

《DS18B20传感.docx》由会员分享,可在线阅读,更多相关《DS18B20传感.docx(15页珍藏版)》请在冰点文库上搜索。

DS18B20传感.docx

DS18B20传感

1.1温度传感器DS18B20

选择从大家很熟悉且常用的温度传感器DS18B20开始。

逐步建立自己的无线传感网!

传感器介绍:

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,主要根据应用场合的不同而改变其外观。

封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

实物如图所示:

图3.95DS18B20外观

实现平台:

ZigBee传感器节点;

图3.97ZigBee传感器器节点

图3.98DS18B20硬件电路图

实验现象:

节点通过采集DS18B20温度信息,实时发送到协调器。

协调器通过串口打印和液晶显示方式展示当前温度。

实验讲解:

ZigBee要完成采集温度传感器信息再发送到协调器的过程,必须在协议栈上完成所有代码的编程。

实际上,我们可以在裸机(不带协议栈)的基础上成功驱动起传感器,然后再加载到协议栈上面。

这样会有事半功倍的效果。

下面我们就来看看如何把裸机上成功驱动的传感器添加到协议栈代码上,并实现数据传输。

实验过程:

分三个步骤,如下:

一:

在裸机上完成对DS18B20的驱动。

二:

将程序添加到协议栈代码中

三:

将数据打包并按指定的方式发送给指定设备。

一:

在裸机上完成对DS18B20的驱动。

相信大家都接触过51单片机对DS18B20温度读取的编程。

CC2530裸机驱动DS18B20也是这样的道理。

只要我们掌握好单片机C语言编程以及了解传感器的原理就可以轻松应对。

打开配套程序下裸机文件夹—温度传感器DS18B20下的工程文件,看到主函数如下:

(代码取用模块化编程,其他函数请看工程文件)

 

/**************************************/

/*Zigbee学习例程*/

/*例程名称:

温度传感器DS18B20*/

/*建立时间:

2012/10/1*/

/*描述:

将采集到的温度信息通过串口打印到

串口调试助手。

**************************************/

1.#include"iocc2530.h"

2.#include"uart.h"

3.#include"ds18b20.h"

4.#include"delay.h"

5.voidInitial()//系统初始化

6.{

7.CLKCONCMD=0x80;//选择32M振荡器

8.while(CLKCONSTA&0x40);//等待晶振稳定

9.UartInitial();//串口初始化

10.P0SEL&=0xbf;//DS18B20的io口初始化

11.}

12.voidmain()

13.{

14.chardata[5]="temp=";//串口提示符

15.Initial();

16.while

(1)

17.{

18.Temp_test();//温度检测

/*******温度信息打印***********/

19.UartTX_Send_String(data,5);

20.UartSend(temp/10+48);

21.UartSend(temp%10+48);

22.UartSend('\n');

23.

24.Delay_ms(1000);//延时函数使用定时器方式,延时1S

25.}

26.}

我们来看主函数:

第15行:

进行一些初始化工作。

第18行:

在大循环中,检测温度。

第19~22行:

通过串口打印温度信息

简单几行代码,就完成了对DS18B20的读取。

大家可以在工程里进入具体

函数看代码,理解DS18B20的读取过程。

实验现象如图3.11.1D所示:

图3.99

二:

将程序添加到协议栈代码中

有了基础实验的代码,我们的实验就完成了一大半了。

至少证明CC2530可以驱动起我们想要的传感器。

接下来我们需要做的工作就是移植到协议栈z-stack上面,这个过程要注意的是要了解协议栈上的IO口用途和晶振工作频率。

首先理清一下思路,我们要实验的功能是终端设备读取DS18B20温度信息,通过点播方式发送到协调器,协调器通过通常打印出来。

在串口调试助手上面显示。

这就实现了无线温度采集。

(使用点播的原因是终端设备有针对性地发送数据给指定设备,不想广播和组播可能会造成数据冗余,关于点播内容请参考《zigbee实战演练》点播章节,这里不再累赘。

1)我们将裸机程序里面的DS18B20.c和DS18B20.h文件复制到SAMPLEAPP-Source文件夹下。

图3.100

2)在协议栈的APP目录树下点击右键--Add--添加DS18B20.C文件

3)整个实验以点播为依托,我们实验也就是在点播例程的基础上完成,故函数编程也是像以前一样在SAMPLEAPP.C上进行。

我们先包含DS18B20.h文件。

图3.102添加头文件

4)初始化传感器引脚P0.6

图3.103

4)借用周期性点播函数,1s读取温度传感器1次,通过液晶显示和串口打印并点对点发送给协调器。

代码如下,如图3.104所示:

uint8T[5];//温度+提示符

Temp_test();//温度检测

T[0]=temp/10+48;

T[1]=temp%10+48;

T[2]='';

T[3]='C';

T[4]='\0';

/*******串口打印*********/

HalUARTWrite(0,"temp=",5);

HalUARTWrite(0,T,2);

HalUARTWrite(0,"\n",1);

/*******LCD显示*********/

HalLcdWriteString("Thetempis:

",HAL_LCD_LINE_3);//LCD显示

HalLcdWriteString(T,HAL_LCD_LINE_4);//LCD显示

图3.104

5)DS18B20.c文件需要修改一个地方。

打开改文件,将原来的延时函数改成协议栈自带的延时函数,保证时序的正确。

同时要包含#include"OnBoard.h"。

去掉#include"uart.h";

图3.106

另外,协议栈里面是要求每个定义了的函数都必须在文件添加声明,否则报错。

所以给ds18b20.c里面的文件都添加声明:

voidDs18b20Delay(uintk);

voidDs18b20InputInitial(void);//设置端口为输入

voidDs18b20OutputInitial(void);//设置端口为输出

ucharDs18b20Initial(void);

voidDs18b20Write(ucharinfor);

ucharDs18b20Read(void);

voidTemp_test(void);//温度读取函数

图3.107

三:

将数据打包并按指定的方式发送给指定设备。

在上一个步骤,我们完成了DS18B20基于协议栈的驱动,接下来,我们就用以前的知识,实现数据发送和接收就可以了。

在EndDevice的点播发送函数中将温度信息发送出去,代码如下,如图所示:

voidSampleApp_SendPointToPointMessage(void)

{

uint8T[2];//温度

T[0]=temp/10+48;//格式转换

T[1]=temp%10+48;

if(AF_DataRequest(&Point_To_Point_DstAddr,

&SampleApp_epDesc,

SAMPLEAPP_POINT_TO_POINT_CLUSTERID,

2,

T,

&SampleApp_TransID,

AF_DISCV_ROUTE,

AF_DEFAULT_RADIUS)==afStatus_SUCCESS)

{

}

else

{

//Erroroccurredinrequesttosend.

}

}

图3.108

协调器代码如下,如图3.11.1M所示:

case

SAMPLEAPP_POINT_TO_POINT_CLUSTERID:

HalUARTWrite(0,"Tempis:

",8);//提示接收到数据

HalUARTWrite(0,&pkt->cmd.Data[0],2);//ASCII码发给PC机

HalUARTWrite(0,"\n",1);//回车换行

break;

图3.109

实验结果及图片:

观察终端设备将协调器连接到电脑,观察从终端发来的信息。

以终端方式下载到开发板,当连接上协调器时,可以看到串口打印出温度传感器信息。

如图所示:

图3.111

同时协调器收到终端发送来的信息:

图3.112

结语:

至此,我们完成了对DS18B20温度数据的无线采集,也就是从初始化、采集到打包发送的过程。

相信看完后你对传感器的应用不再陌生了。

从这章开始,会带领你一步步组建自己的传感器网络。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2