1.测量温湿度 温度过高时打开风扇
实验现象:PC机通过串口连接到CC2530(协调器),打开串口调试助手;接收到终端的
温湿度;温度高于25度时,终端风扇开始散热;
实验详解:
实验基于zstack 协议进行,分为三个部分:协调器,温湿度终端,风扇终端;
协调器:负责接收温湿度数据,通过串口打印出来
温湿度传感器:采集数据,通过点播发送给协调器;通过广播将信息发送给风扇终端
风扇终端:通过寄存器定义为输出,接收数据后 判断后 打开风扇
实验流程:协调器通过转串口数据线连接到PC机 调整好波特率
打开温湿度终端以及风扇终端
通过串口接收数据,改变温度 风扇转动
1.协调器编程
(1) 串口
MT_UartInit();//串口初始化
MT_RegisterTaskID(task_id)//登记任务号
(2)消息处理函数
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
unsigned char buffer[10];
osalmem(buffer,pkt->data,pkt->datalength); //将数据复制到buffer
switch ( pkt->clusterId )
{
case SAMPLEAPP_POINT_TO_POINT_CLUSTERID:
HalUARTWrite(0,buffer,10); //串口发送
}
}
2.温湿度终端编程
(1)添加DHT11.c DHT11.h到APP文件下
采集数据DTH11()函数
在SampleApp.c中添加头文件#include DTH11.h
初始化传感器引脚#define P0_5
(2)点播发送温湿度信息给协调器
/**将温度复制到strTemp*/
osal_memcpy(&strTemp[0], "T=", 2);
osal_memcpy(&strTemp[2], temp, 2);
osal_memcpy(&strTemp[4], "H=", 2);
osal_memcpy(&strTemp[6], humidity, 2);
/**
if ( AF_DataRequest( &SampleApp_P2P_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_P2P_CLUSTERID,
8,
(uint8 *)strTemp,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
}
HalLedBlink( HAL_LED_4, 4, 50, 100 ); //LED闪烁表示数据正在传输
} //放入tmpstr
//发送给协调器
(3)广播发送温度信息(经过替换)给风扇终端
通过if 语句判断温湿度 替换后 通过广播发送出去
if(t >=25)
{
uint8 val[2]="F1";
if ( AF_DataRequest( &SampleApp_Periodic_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID, //通过广播发送数据
2,
val,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
}
else
{
// Error occurred in request to send.
}
}
3.风扇终端编程
分别烧入两个风扇,如果传入F1 风扇1号打开,如果传入F2 风扇2号打开;温度低于25度传入F0 关闭端口
(1)通过广播接收 消息处理函数
osal_memcpy(buf, pkt->cmd.Data, 2); //复制数据到缓冲区中
通过if语句判断温度
如果温度过高,端口为0时 风扇开
if(buf[0]=='F' && buf[1]=='1') //判断收到的数据是否为"F1" 如果温度低于25度,端口为1 风扇关
{
P1_3=0; //打开风扇
break;
}
F0时关闭风扇
Zigbee采集温度控制风扇
于 2017-10-24 09:59:29 首次发布