ZigBee学习五 无线温度检测
ZigBee学习五 无线温度检测
1)修改公用头文件GenericApp.h
typedef union h
{
uint8 TEMP[4];
struct RFRXBUF
{
unsigned char Head;
unsigned char value[2];
unsigned char Tail;
}BUF;
}TEMPERATURE;
2)协调器编程
协调器编程时,只需要修改一下消息处理函数GenericApp_MessageMSGCB()即可:
修改coordinator.c文件
byte GenericApp_TransID; // This is the unique message ID (counter)
afAddrType_t GenericApp_DstAddr;
//unsigned char uartbuf[128];
/*********************************************************************
* LOCAL FUNCTIONS
*/
static void GenericApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );
static void GenericApp_HandleKeys( byte shift, byte keys );
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pckt );
static void GenericApp_SendTheMessage( void );
//static void rxCB(uint8 port,uint8 event);
void GenericApp_Init( uint8 task_id )
{
halUARTCfg_t uartConfig;
GenericApp_TaskID = task_id;
GenericApp_NwkState = DEV_INIT;
GenericApp_TransID = 0;
... ...
GenericApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;
GenericApp_epDesc.latencyReq = noLatencyReqs;
afRegister( &GenericApp_epDesc );
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.callBackFunc = NULL;
HalUARTOpen(0,&uartConfig);
}
//该函数是一个空函数。因为本实验并没有进行事件处理,所有不需要任何代码
uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
... ...
switch ( MSGpkt->hdr.event )
{
case ZDO_CB_MSG:
break;
case KEY_CHANGE:
break;
case AF_DATA_CONFIRM_CMD:
break;
case AF_INCOMING_MSG_CMD:
GenericApp_MessageMSGCB( MSGpkt );
break;
case ZDO_STATE_CHANGE:
break;
default:
break;
}
... ...
}
/*
static void rxCB(uint8 port,uint8 event)
{
HalUARTRead(0,uartbuf,16); //读取数据并存放到uartbuf数组中
if(osal_memcmp(uartbuf,"www.wlwmaker.com",16)) //使用osal_memcmp()函数判断接收到的数据是否是字符串"www.wlwmaker.com",如果是,执行{}
{
HalUARTWrite(0,uartbuf,16); //调用HalUARTWrite()函数将接收到的字符输出到串口
}
}
*/
static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
unsigned char buffer[2] = {0x0A,0x0D};
TEMPERATURE temperature;
switch ( pkt->clusterId )
{
case GENERICAPP_CLUSTERID:
osal_memcpy(&temperature,pkt->cmd.Data,sizeof(temperature));
HalUARTWrite(0,(uint8 *)&temperature,sizeof(temperature));
HalUARTWrite(0,buffer,2);
break;
}
}
3)终端节点编程
建立驱动文件Sensor.h和Sensor.c
Sensor.h文件
#ifndef SENSOR_H
#define SENSOR_H
#include <hal_types.h>
extern int8 readTemp(void);
#endif
Sensor.c文件
#include "Sensor.h"
#include <ioCC2530.h>
#define HAL_ADC_REF_115V 0x00
#define HAL_ADC_DEC_256 0x20
#define HAL_ADC_CHN_TEMP 0x0e
int8 readTemp(void)
{
static uint16 reference_voltage;
static uint8 bCalibrate = TRUE;
uint16 value;
int8 temp;
ATEST =0x01;
TR0 |= 0x01;
ADCIF = 0;
ADCCON3 = (HAL_ADC_REF_115V|HAL_ADC_DEC_256|HAL_ADC_CHN_TEMP);
while(!ADCIF);
ADCIF = 0;
value = ADCL;
value |= ((uint16)ADCH)<<8;
value >>=4;
if(bCalibrate)
{
reference_voltage = value;
bCalibrate = FALSE;
}
temp = 22 + ((value - reference_voltage)/4);
return temp;
}
修改enddevice.c文件
只需修改消息发送函数就行了
static void GenericApp_SendTheMessage( void )
{
//char theMessageData[] = "EndDevice";
uint8 tvalue;
TEMPERATURE temperature;
temperature.BUF.Head = '&';
tvalue = readTemp();
temperature.BUF.value[0] = tvalue /10 +'0';
temperature.BUF.value[1] = tvalue %10 +'0';
temperature.BUF.Tail = 'C';
afAddrType_t my_DstAddr;
my_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;//单播发送
my_DstAddr.endPoint = GENERICAPP_ENDPOINT; //目的端口号
my_DstAddr.addr.shortAddr = 0x0000; //协调器网络地址
if ( AF_DataRequest( &my_DstAddr, &GenericApp_epDesc,
GENERICAPP_CLUSTERID,
sizeof(temperature ),
(byte *)&temperature,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
// Successfully requested to be sent.
HalLedBlink(HAL_LED_1,0,50,500);
}else
{
// Error occurred in request to send.
}
}
ZigBee学习五 无线温度检测的更多相关文章
- ZigBee学习四 无线+UART通信
ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...
- zigbee学习之路(一):zigbee介绍
一.前言 大家好,我是一名在校的大学生,最近对zigbee非常感兴趣,于是自己从网上买了一款秉火cc2530的zigbee开发板,想通过这个平台来和大家分享自己学习和研究的经历,下面就来简单的介绍下z ...
- zigbee学习:示例程序SampleApp中按键工作流程
zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...
- OpenCV 学习笔记 07 目标检测与识别
目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...
- ZigBee学习一 任务处理函数_ProcessEvent
ZigBee学习一 任务处理函数_ProcessEvent //任务处理函数UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ){ ...
- TweenMax动画库学习(五)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- zigbee学习:示例程序SampleApp中通讯流程
zigbee学习:示例程序SampleApp中通讯流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://wjf88223.bl ...
- SVG 学习<五> SVG动画
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
随机推荐
- 2018.5.24 Oracle下的sqlplus编程 块结构
1.语句结构模板 declare --声明 begin dbms_output.put_line('Legend Hello world'); end; 2.变量使用 & 是输入符号 decl ...
- 剑指offer:按之字形顺序打印二叉树(Python)
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 解题思路 先给定一个二叉树的样式: 前段时间 ...
- python_22_enumerate
a=['a','d','f','g'] for i in enumerate(a): print(i) #enumerate 把列表的下表以元组的形式取出来 #结果 # (0, 'a') # (1, ...
- Luogu [P1334] 瑞瑞的木板(手写堆)
其实这个题完全不需要用手写堆,只需要一遍遍sort就行了…… 但是! 为了练习手写堆,还是用手写堆做了. 在做本题之前,如果你没有什么思路的话,建议先做Luogu的合并果子. 好,假设你已经做过了合并 ...
- IE脚本调试
打开IE -- 工具 -- Internet选项 -- 高级 --有4项. 1.禁用脚本调试(Internet Explorer)(去掉对勾) 2.禁用脚本调试(其他)(去掉对勾) 3.显示每个脚本错 ...
- Android驱动开发5-7总结
Android深度探索5-7章总结 介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android.紧接着学到介绍到如何在多种平台,使用多种方式 ...
- [牛客OI测试赛2]F假的数学游戏(斯特灵公式)
题意 输入一个整数X,求一个整数N,使得N!恰好大于$X^X$. Sol 考试的时候只会$O(n)$求$N!$的前缀和啊. 不过最后的结论挺好玩的 $n! \approx \sqrt{2 \pi n} ...
- lrzsz包中的rz和sz命令
安装包:lrzsz rz命令:将物理机文件复制到虚拟机 sz命令:将虚拟机文件复制到物理机
- js中的日期
创建日期对象: var date1 = new Date(2018, 11,10) 第二个参数传入的是月份,月份是0-11,实际上要加1 获得现在的时间:var date2 = Date.now() ...
- sed速查手册
1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后, ...