实验原理
协调器建立zigbee无线网络,终端节点自动加入该节点,然后终端节点周期性地采集温度数据并将其发送给协调器,协调器收到数据后将其通过串口打印到PC机

原理图:

协调器与终端节点流程图

温度数据包结构体

typedef union h
{uint8 TEMP[4];struct RFRXBUF{unsigned char Head;         //命令头unsigned char vlaue[2];     //温度数据unsigned char Tail;         //命令尾}BUF;
}TEMPERATURE;

协调器编程:
数据处理函数
使用osal_memcpy()函数将接收到的数据拷贝到temperature中,然后通过串口发送至PC

void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt)
{unsigned char buffer[2] = {0x0A, 0x0D} ;  //换行符ASCII码TEMPERATURE temperature;switch (pckt->clusterId){case GENERICAPP_CLUSTERID:osal_memcpy(&temperature, pckt->cmd.Data,sizeof(temperature));HalUARTWrite(0, (uint8 *)&temperature, sizeof(temperature));HalUARTWrite(0, buffer, 2);break;}
}

使用到串口需初始化串口

void GenericApp_Init(byte task_id)
{halUARTCfg_t uartConfig;GenericApp_TaskID             = task_id;GenericApp_TransID            = 0;GenericApp_epDesc.endPoint    = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id     = &GenericApp_TaskID;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);   //注册串口
}

终端节点编程

CC2530单片机内部有温度传感器,使用步骤如下:
(1)使能温度传感器
(2)连接温度传感器至ADC
(3)初始化ADC
(4)启动ADC读取温度

#define HAL_ADC_REF_115V        0x00
#define HAL_ADC_DEC_256         0x20
#define HAL_ADC_CHN_TEMP        0x0eint8 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;
}

事件处理函数
讲读取到的数据进行处理后通过AF_DataRequest()函数发送给协调器

void GenericApp_SendTheMessage(void)
{//unsigned char theMessageData[10] = "EndDevice";int8 tvalue;TEMPERATURE temperature;temperature.BUF.Head = '&';tvalue = readTemp();temperature.BUF.vlaue[0] = tvalue / 10 + '0';temperature.BUF.vlaue[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 = 0x000;AF_DataRequest(&my_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,sizeof(temperature),(uint8 *)&temperature,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);HalLedBlink(HAL_LED_2, 0, 50, 500);
}

实验效果:

完整源码:
协调器

#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"
#include <string.h>
#include "Coordinator.h"
#include "DebugTrace.h"#if !defined( WIN32 )
#include "OnBoard.h"
#endif/* HAL */
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
{GENERICAPP_CLUSTERID
};const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MAX_CLUSTERS,(cId_t *)GenericApp_ClusterList,0,(cId_t *)NULL
};endPointDesc_t GenericApp_epDesc;
byte GenericApp_TaskID;
byte GenericApp_TransID;
//unsigned char uartbuf[128];void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt);
void GenericApp_SendTheMessage(void);
//static void rxCB(uint8 port, uint8 event);void GenericApp_Init(byte task_id)
{halUARTCfg_t uartConfig;GenericApp_TaskID             = task_id;GenericApp_TransID            = 0;GenericApp_epDesc.endPoint    = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id     = &GenericApp_TaskID;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(byte task_id, UINT16 events)
{afIncomingMSGPacket_t *MSGpkt;if(events & SYS_EVENT_MSG){MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch (MSGpkt->hdr.event){case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;default:break;}osal_msg_deallocate((uint8 *)MSGpkt);MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID);}return (events ^ SYS_EVENT_MSG);}return 0;
}void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt)
{unsigned char buffer[2] = {0x0A, 0x0D} ;TEMPERATURE temperature;switch (pckt->clusterId){case GENERICAPP_CLUSTERID:osal_memcpy(&temperature, pckt->cmd.Data,sizeof(temperature));HalUARTWrite(0, (uint8 *)&temperature, sizeof(temperature));HalUARTWrite(0, buffer, 2);break;}
}/*static void rxCB(uint8 port, uint8 event)
{HalUARTRead(0, uartbuf, 16);if(osal_memcmp(uartbuf, "lily I Love You", 15)){HalUARTWrite(0, uartbuf, 16);}
}
*/

终端:
传感器c文件:

#include "Sensor.h"
#include <iocc2530.h>#define HAL_ADC_REF_115V        0x00
#define HAL_ADC_DEC_256         0x20
#define HAL_ADC_CHN_TEMP        0x0eint8 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;
}

终端主文件

#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"
#include <string.h>
#include "Coordinator.h"
#include "DebugTrace.h"#if !defined( WIN32 )
#include "OnBoard.h"
#endif/* HAL */
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
{GENERICAPP_CLUSTERID
};const SimpleDescriptionFormat_t GenericApp_SimpleDesc =
{GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,GENERICAPP_MAX_CLUSTERS,(cId_t *)GenericApp_ClusterList,0,(cId_t *)NULL
};endPointDesc_t GenericApp_epDesc;
byte GenericApp_TaskID;
byte GenericApp_TransID;
//unsigned char uartbuf[128];void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt);
void GenericApp_SendTheMessage(void);
//static void rxCB(uint8 port, uint8 event);void GenericApp_Init(byte task_id)
{halUARTCfg_t uartConfig;GenericApp_TaskID             = task_id;GenericApp_TransID            = 0;GenericApp_epDesc.endPoint    = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id     = &GenericApp_TaskID;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(byte task_id, UINT16 events)
{afIncomingMSGPacket_t *MSGpkt;if(events & SYS_EVENT_MSG){MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID);while(MSGpkt){switch (MSGpkt->hdr.event){case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB(MSGpkt);break;default:break;}osal_msg_deallocate((uint8 *)MSGpkt);MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive(GenericApp_TaskID);}return (events ^ SYS_EVENT_MSG);}return 0;
}void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt)
{unsigned char buffer[2] = {0x0A, 0x0D} ;TEMPERATURE temperature;switch (pckt->clusterId){case GENERICAPP_CLUSTERID:osal_memcpy(&temperature, pckt->cmd.Data,sizeof(temperature));HalUARTWrite(0, (uint8 *)&temperature, sizeof(temperature));HalUARTWrite(0, buffer, 2);break;}
}/*static void rxCB(uint8 port, uint8 event)
{HalUARTRead(0, uartbuf, 16);if(osal_memcmp(uartbuf, "lily I Love You", 15)){HalUARTWrite(0, uartbuf, 16);}
}
*/

Zigbee(3) ---- 无线温度检测试验相关推荐

  1. 基于ZigBee的无线温度监测与控制器设计

    基于ZigBee的无线温度监测与控制器设计 本文所设计的无线温度监测与控制器主要实现了对环境温度的实时监测和控制.该系统基于Zigbee的无线通信技术,主要分为三部分,分别是网络协调器.终端节点和上位 ...

  2. ZigBee无线温度传感网络设计

    0 引言 随着信息化时代的到来,ZigBee无线模块广泛应用在军事.智能家居.医疗监护环境监测和远程工业控制领域.事实证明,无论是工厂.办公楼还是家居都需要无线传感网络的支持.为了满足社会对无线传感器 ...

  3. 基于ZigBee 的多点温度采集系统设计与实现

    摘要:针对广阔空间环境温度采集系统对功耗及成本的要求,设计了基于无线传感网络技术的多点温度采集系统.以CC2430 为主控芯片,选用DS18B20 作为温度采集节点的传感器,基于ZigBee 协议栈构 ...

  4. ZigBee变电站无线环境监控系统

    引言 变电站作为片区的供电枢纽,其稳定性和安全性与该片区的日常生活紧密相关.现有变电站均配置一套视频及环境监控系统,系统由监控工作站.通信控制器.摄像机.环境量采集设备.报警控制设备.交换机.存储设备 ...

  5. 无线温度控制系统是如何解决传统温度监控系统存在的问题

    引言 电力系统对安全性有很高的要求,电力系统设备在长时间的使用过程中会老化或出现过热现象,如果不能及时发现并加以解决,就可能导致严重的事故,须严格监视电力系统设备的工作状态,其中对高压开关柜触点的温度 ...

  6. sqllite开发安卓项目_【兼职项目】预算3万开发无线温度电流传感,2万开发直流电机打磨机控制...

    [个人/团队兼职项目]是小包为大家筛选的酬金预算≤3万元的中小型软硬件兼职项目,适合高级工程师.技术团队服务商竞标,从而赚取"零花钱". 个人/团队兼职项目(酬金≤3万元) 1.摄 ...

  7. ZigBee远程无线点灯

    ZigBee远程无线点灯 一.任务要求: 二.任务逻辑分析: 三.逻辑代码实现: 四.开发中注意的事项: 一.任务要求: 大棚种植区改造过程中提出新的需求,要求部分设备需要支持短距离无线 通讯控制风扇 ...

  8. 基于NRF905的无线温度采集系统

    基于NRF905的无线温度采集系统 2016-07-30  花花雪  跟单片机谈恋爱 目录 引言 1理论 1.1NRF905相关理论 1.2系统原理图 2实践 2.1连接图 2.2程序 ~~~~~~~ ...

  9. 【智能家居 DIY 活动】基于 RT-Thread 的分布式无线温度监控系统 DIY 活动正式上线啦!!!

    基于 RT-Thread 的分布式无线温度监控系统 1. 项目简介 Hi~ 各位小伙伴们,还在为初学 RT-Thread 不知从何下手而感到烦恼吗?有没有想过利用 RT-Thread 来打造属于自己的 ...

最新文章

  1. RDLC SubReports Exporting to Excel Are Ignored
  2. G-SYNC技术是什么
  3. 《统计学习方法》—— 信息增益、决策树算法(ID3,C4.5)以及python3实现
  4. vue-props入门
  5. NXP iMX8系列处理器核心性能对比测试
  6. 【自动化测试工具】QTP/UFT入门
  7. 验证性因子分析中有哪些指标?
  8. 项目上线部署发布流程
  9. Request method ‘POST‘ not supported
  10. 考心理健康教育教师资格证-初出茅庐
  11. 判断给到的年份是否为闰年
  12. C语言编程编程思维培养的重要性,谈编程思维的培养
  13. CentOS网络时钟同步协议-- NTP, PTP
  14. 如何禁止计算机用户修改时间,win10禁止用户修改系统时间的方法
  15. 21岁被人“封神”,曾一分钟黑了阿里巴巴后台系统!
  16. 云计算导论课后习题第一章
  17. 基于docker+reveal.js搭建一个属于自己的在线ppt网站
  18. Unity 投掷物体的实现
  19. Bias - Variance Decomposition
  20. WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务

热门文章

  1. 云虚拟主机、云服务器、VPS三者有什么区别?
  2. Transformer模型学习笔记
  3. What?Poly又双叒叕发新品了?
  4. 计算机网络举例说明,什么是计算机网络,举例说明计算机网络有哪些应用?
  5. 基于simulink采用 QSHB 和 HBPS 算法的混合 MIMO 波束成形仿真
  6. java 实现输出水仙花数
  7. librosa 语音库(三) librosa.feature. 中的 spectrogram 与 melspectrogram
  8. 电子计算机的产品情况,广东省市场监督管理局关于2020年度广东省电子计算机配套产品及耗材产品质量监督抽查情况的通告...
  9. 前端开发:JS中截取字符串的用法总结
  10. 携程ajax,Python爬虫实战之爬取携程评论