Zigbee采集温度控制风扇

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,嵌入式)