温湿度采集学习心得.docx
- 文档编号:7444071
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:9
- 大小:20.27KB
温湿度采集学习心得.docx
《温湿度采集学习心得.docx》由会员分享,可在线阅读,更多相关《温湿度采集学习心得.docx(9页珍藏版)》请在冰豆网上搜索。
温湿度采集学习心得
竭诚为您提供优质文档/双击可除
温湿度采集学习心得
篇一:
zigbee学习心得——实例分析(温湿度采集及控制)
网易
新闻微博邮箱相册阅读有道摄影爱拍优惠券云笔记闪电邮手机邮印像派网易识字
更多
博客
手机博客博客搬家博客VIp服务
Livewriter写博word写博邮件写博短信写博
群博客博客油菜地博客话题博客热点博客圈子找朋友
发现
小组
风格
网易真人搭配社区istyle
网易真人搭配社区istyle
网易真人搭配社区istyle
玩摄影,玩LoFTeR
玩胶片,玩LoFTeR
玩绘画,玩LoFTeR
创建博客登录
加关注
错误!
超链接引用无效。
|错误!
超链接引用无效。
温馨提示!
由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!
立即重新绑定新浪微博》|错误!
超链接引用无效。
豪醒的博客
不只是一个人的旅程
导航
首页
日志
相册
博友
关于我
日志
zigbee学习心得2——协议栈任务
Fork-VFork一张图说明区别
zigbee学习心得——实例分析(温湿度采集及控制)
20XX-08-0516:
58:
58|分类:
zigbee|标签:
cc2430zigbee温湿度cc2430|字号大中小订阅
就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。
我这里面只用到了voidwenshi_receive(void);一个函数,然后将函数和其中所用到的两个变量Th,Rh,分别代表温度和湿度设为全局变量。
先打开simplesensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:
那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。
找到与绑定相关的函数:
voidzb_bindconfirm(uint16commandId,uint8status)
{
if((status==Zb_success)
//startreportingsensorvalues
myApp_startReporting();
}
else
{
//continuetodiscoveracollector
osal_start_timerex(sapi_TaskID,mY_FInD_coLLecToR_eVT,mybindRetryDelay);
}
直接点,若绑定成功,就会返回一个Zb_success的状态,此时方会调用myApp_startReporting();函数,否则就继续搜索节点。
对于myApp_startReporting();:
voidmyApp_startReporting(void)
{
osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempReportperiod);
osal_start_timerex(sapi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);
halLedset(hAL_LeD_1,hAL_LeD_moDe_on);
}
直观地从函数看上去也就相当于添加一个周期性的任务;
从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。
过程是这样的:
主函数:
Zsegintmain(void)——/*系统初始化*/osal_init_system();——osalInitTasks();/*任务初始化*/
——sApI_Init(taskID);/*用户自定义任务函数,他的任务ID为taskID*/?
——
/*其中的一个等式*/sapi_TaskID=task_id;
也就是说可以通过osal_start_timerex添加一个周期性的任务,其周期为xxxperiod,比如片内温度采集:
myTempReportperiod,电压测量mybatterycheckperiod,那xxxeVT,也就相当于一个任务Task里面一个独立的事件event了。
那么我们也可以这么添加自己的事件:
再看看xxxeVT和xxxperiod的定义:
//Applicationosaleventidentifiers
//bitmaskofevents(from0x0000to0x00FF)
#definemY_sTART_eVT0x0001
#definemY_RepoRT_Temp_eVT0x0002
#definemY_RepoRT_bATT_eVT0x0004
#definemY_FInD_coLLecToR_eVT0x0008
自己跟着做:
#definemY_RepoRT_wenDu_eVT0x0010
#definemY_RepoRT_shIDu_eVT0x0020
这里说一下为什么要这么做
因为等下调用任务处理函数zb_handleosalevent();的时候判断语句是这种形式的:
if(event//milliseconds
staticuint16myTempReportperiod=5000;//milliseconds
添加:
staticuint16mywenDuReportperiod=6000;//milliseconds
staticuint16myshIDuReportperiod=7000;//milliseconds
这样子(这里的周期是毫秒级的,比如5000代表的就是5秒传一次mcu的温度)
再回到刚才的myApp_startReporting(void)添加:
osal_start_timerex(sapi_TaskID,mY_wenDu_bATT_eVT,mywenDuReportperiod);
osal_start_timerex(sapi_TaskID,mY_shIDu_bATT_eVT,myshIDuReportperiod);
这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:
接下来:
而sensor.c里面有一个handle函数用于处理时间的:
见介绍和实体:
/*****************************************************************************
*@fnzb_handleosalevent
*
*@briefThezb_handleosaleventfunctioniscalledbytheoperating
*systemwhenataskeventisset
*
*@paramevent-bitmaskcontainingtheeventsthathavebeenset
*
*@returnnone
*/
voidzb_handleosalevent(uint16event)
{
uint8pData[2];//用于存放数据和分类信息的
if(event
}
if(event函数set的事件么?
!
{
//Readandreporttemperaturevalue
pData[0]=Temp_RepoRT;
//类型存放在pData[0]里面
pData[1]=myApp_ReadTemperature();
//读出来的温度值存到pData[1],myApp_ReadTemperature();是读取温度值的函数
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
//发送出去
osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempReportperiod);
//再设这样一个时间,无限循环
}
------------------------------------------------------------------------------------------------------------------------------
这里再说一下发送的过程,首先从刚才osal_start_timerex();设一个发送温度值的系统事件,在一个myTempReportperiod的周期之后,通过zb_handleosalevent的调用,再通过if(event
pData[1]=myApp_Readbattery();
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
osal_start_timerex(sapi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);
}
if(event
}
}
先添加自己刚设的事件:
if(event
//相当于添加一个可以让协调器识别你发过去的是什么的标签
receive();
//调用wenshi.c里面的全局函数receive();wenshi.c是我自己写的一个c
pData[1]=Th;
//代表温度
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
篇二:
zigbee学习心得——实例分析(温湿度采集及控制)
网易
新闻微博邮箱相册阅读有道摄影爱拍优惠券云笔记闪电邮手机邮印像派网易识字
更多
博客
手机博客博客搬家博客VIp服务
Livewriter写博word写博邮件写博短信写博
群博客博客油菜地博客话题博客热点博客圈子找朋友
发现
小组
风格
网易真人搭配社区istyle
网易真人搭配社区istyle
网易真人搭配社区istyle
玩摄影,玩LoFTeR
玩胶片,玩LoFTeR
玩绘画,玩LoFTeR
创建博客登录
加关注
显示下一条|关闭
温馨提示!
由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!
立即重新绑定新浪微博》|关闭
豪醒的博客
不只是一个人的旅程
导航
首页
日志
相册
博友
关于我
日志
zigbee学习心得2——协议栈任务
Fork-VFork一张图说明区别
zigbee学习心得——实例分析(温湿度采集及控制)
20XX-08-0516:
58:
58|分类:
zigbee|标签:
cc2430zigbee温湿度cc2430|字号大中小订阅
就像这样,先添加于温湿度传感器相关的.c和.h文件,还有串口相关的,c和.h也就是写好可以给另外的文件调用的函数了。
我这里面只用到了voidwenshi_receive(void);一个函数,然后将函数和其中所用到的两个变量Th,Rh,分别代表温度和湿度设为全局变量。
先打开simplesensor.c这个小工程,用官方程序调试的时候可以看出,也就是不断地发数据到协调器,自然就要找到与发数据相关的函数:
那其实发送之前要先与协调器绑定吧,好比打电话也要先拨通电话吧。
找到与绑定相关的函数:
voidzb_bindconfirm(uint16commandId,uint8status)
{
if((status==Zb_success)
//startreportingsensorvalues
myApp_startReporting();
}
else
{
//continuetodiscoveracollector
osal_start_timerex(sapi_TaskID,mY_FInD_coLLecToR_eVT,mybindRetryDelay);
}
}
直接点,若绑定成功,就会返回一个Zb_success的状态,此时方会调用myApp_startReporting();函数,否则就继续搜索节点。
对于myApp_startReporting();:
voidmyApp_startReporting(void)
{
osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempRepo(:
温湿度采集学习心得)rtperiod);
osal_start_timerex(sapi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);
halLedset(hAL_LeD_1,hAL_LeD_moDe_on);
}
直观地从函数看上去也就相当于添加一个周期性的任务;
从上一篇文章讲过这个TaskID的问题,也就添加一个任务嘛,回到整个工程的主函数,看看怎么回事,这里面就不详细地列出来了,有需要的读者可以一探究竟。
过程是这样的:
主函数:
Zsegintmain(void)——/*系统初始化*/osal_init_system();——osalInitTasks();/*任务初始化*/
——sApI_Init(taskID);/*用户自定义任务函数,他的任务ID为taskID*/?
——
/*其中的一个等式*/sapi_TaskID=task_id;
也就是说可以通过osal_start_timerex添加一个周期性的任务,其周期为xxxperiod,比如片内温度采集:
myTempReportperiod,电压测量mybatterycheckperiod,那xxxeVT,也就相当于一个任务Task里面一个独立的事件event了。
那么我们也可以这么添加自己的事件:
再看看xxxeVT和xxxperiod的定义:
//Applicationosaleventidentifiers
//bitmaskofevents(from0x0000to0x00FF)
#definemY_sTART_eVT0x0001
#definemY_RepoRT_Temp_eVT0x0002
#definemY_RepoRT_bATT_eVT0x0004
#definemY_FInD_coLLecToR_eVT0x0008
自己跟着做:
#definemY_RepoRT_wenDu_eVT0x0010
#definemY_RepoRT_shIDu_eVT0x0020
这里说一下为什么要这么做
因为等下调用任务处理函数zb_handleosalevent();的时候判断语句是这种形式的:
if(event//milliseconds
staticuint16myTempReportperiod=5000;//milliseconds
添加:
staticuint16mywenDuReportperiod=6000;//milliseconds
staticuint16myshIDuReportperiod=7000;//milliseconds
这样子(这里的周期是毫秒级的,比如5000代表的就是5秒传一次mcu的温度)
再回到刚才的myApp_startReporting(void)添加:
osal_start_timerex(sapi_TaskID,mY_wenDu_bATT_eVT,mywenDuReportperiod);
osal_start_timerex(sapi_TaskID,mY_shIDu_bATT_eVT,myshIDuReportperiod);
这样就添加好了自己读取温湿度信息的任务了,然后具体怎么实现这两个任务:
接下来:
而sensor.c里面有一个handle函数用于处理时间的:
见介绍和实体:
/*****************************************************************************
*@fnzb_handleosalevent
*
*@briefThezb_handleosaleventfunctioniscalledbytheoperating
*systemwhenataskeventisset
*
*@paramevent-bitmaskcontainingtheeventsthathavebeenset
*
*@returnnone
*/
voidzb_handleosalevent(uint16event)
{
uint8pData[2];//用于存放数据和分类信息的
if(event
}
if(event函数set的事件么?
!
{
//Readandreporttemperaturevalue
pData[0]=Temp_RepoRT;
//类型存放在pData[0]里面
pData[1]=myApp_ReadTemperature();
//读出来的温度值存到pData[1],myApp_ReadTemperature();是读取温度值的函数
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
//发送出去
osal_start_timerex(sapi_TaskID,mY_RepoRT_Temp_eVT,myTempReportperiod);
//再设这样一个时间,无限循环
}
------------------------------------------------------------------------------------------------------------------------------
这里再说一下发送的过程,首先从刚才osal_start_timerex();设一个发送温度值的系统事件,在一个myTempReportperiod的周期之后,通过zb_handleosalevent的调用,再通过if(event
pData[1]=myApp_Readbattery();
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
osal_start_timerex(sapi_TaskID,mY_RepoRT_bATT_eVT,mybatterycheckperiod);
}
if(event
}
}
先添加自己刚设的事件:
if(event
//相当于添加一个可以让协调器识别你发过去的是什么的标签
receive();
//调用wenshi.c里面的全局函数receive();wenshi.c是我自己写的一个c
pData[1]=Th;
//代表温度
zb_sendDataRequest(0xFFFe,sensoR_RepoRT_cmD_ID,2,pData,0,AF_AcK_ReQuesT,0);
osal_start_timerex(sapi_TaskID,mY_RepoRT_wenDu_eVT,mywenDuReportperiod);
//回调
}
这样子
额,pData[0]=wenDu_RepoRT;,既然说这个是要让协调器识别的,那么协调器(simplecollectoreb.c)里面也要有相同的参数。
#defineTemp_RepoRT0x01
#definebATTeRY_RepoRT0x02
#definewenDu_RepoRT0x04
#defineshIDu_RepoRT0x08
再分析回原来的事件处理部分:
都有调用zb_sendDataRequest();函数
篇三:
温度采集系统报告
课程设计说明书
题目:
温度采集电路设计
学生姓名:
赵颖娜
学号:
20XX06090211
院(系):
电气与信息工程学院
专业:
网络工程132
指导教师:
周晓慧
20XX年12月25日
摘要
本次课程设计主要是做一个温度测量系统,对于0-100摄氏度的环境温度或者给定温度要求能较为精确的测量(误差小于1摄氏度)并显示在数码管上,让人直观的看到。
要想测量温度,就必须要一个温度测量仪器,而想要用电路实现功能就必须要把温度值转化为电信号量,因此我们选用Lm35作为温度感应电路的核心。
Lm35可以将温度值转化为电压值,误差小于0.5℃,符合设计要求。
由于输出电压值过小,直接进行A/D转换会造成较大误差,因此将这个电压值进行放大,放大后经A/D转换器将连续的模拟电压值转化为数字信号量,经过AT28c16的存储接两个cD4511驱动两个共阴极的数码管用来显示两个数字,分别为十位和个位,读出的即为温度值。
目录
第一章技术指标
1.1整体功能要求┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1
第二章方案论证
2.1方案比较┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1
2.2方案确定┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1
第三章单元电路设计
3.1Lm35电源电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈1
3.2信号放大电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈2
3.3A/D转换电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3
3.4数码显示电路┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3
3.5AT28c16┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3
3.6555多谐振荡器┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈3
第四章组装、调试
4.1使用的主要仪器和仪表┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4
4.2调试电路的方法和技巧┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈4
4.3测试的数据和波形并与计算结果比较分析┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈5
4.4调试中出现的故障、原因及排除方法┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温湿度 采集 学习心得