传感网应用开发为了考试(Zigbee通信)

传感网应用开发为了考试(Zigbee通信)

.ZigBee网络的自定义协议消息帧
起始位 + 命令类型 + 数据总长度 + 传感器个数 + 传感器类型 + 数据域 + 校验位
START + CMD + LEN + Count + TYPE + DATA0~DATAN + CHK

协议各个报文的协议详解:

起始位(START):固定值为0xCC;
命令类型(CMD):一般为0x01,获取采集数据;
数据总长度(LEN):从起始位到校验位(不包括校验位)之前的字节长度;
传感器个数(Count):根据传感器种类确定,如果采集温湿度个数为2;
传感器类型(TYPE):0x01代表温湿度,其它参考表3-29;
数据域(DATA0~DATAN):存储传感器数据;
校验位(CHK):从START到CHK字节之前的累加和,然后把累加和的结果与0xFF按位与,取得低8位数据CHK的值;

![在这里插入图片描述](https://img-blog.csdnimg.cn/f0d2aed338b0464c976d5d0bf691a20c.png?x-oss-process=image/wa在这里插入图片描述
考试中ZigBee常考的知识点
1.配置和初始化
找到代码中static basicRfCfg_t **;,跳转到对应的basicRfCfg_t方法
看对应参数,例如在这里插入图片描述在这里插入图片描述
然后就回到主函数中进行如下定义

考试时方法名字可能会有改变,但初始化基本不变
2.根据自定义协议,将火焰传感器数据正确封装到uart0_send_buf[]数组中
uart0_send_buf[1] = (uint8)(adc_value >> 8); //读取ADC数据高位寄存器
uart0_send_buf[2] = (uint8)adc_value; //读取ADC数据低位寄存器
大概就是用这种方式进行封装火焰传感器数据
3.采集获得温湿度
//获取温湿度函数为call_sht11
call_sht11((unsigned int
)(&sensor_tem),(unsigned int
)(&sensor_hum));
Tx_Buff[4]=(uint8)sensor_tem;
Tx_Buff[5]=(uint8)sensor_hum;
Tx_Buff[6]=mc_check_crc8(Tx_Buff,6)
4.指示灯D3,D6,D5组成3位计数指示灯,循环指示数值0-7

//根据D3=LED1 D6=LED4 D5=LED3  3个LED灯进行计数显示
void show_cnt(uint8 num)
{
  num=num%8;
  switch(num)
  {
  case 0:    
    halLedClear(1);
    halLedClear(4);
    halLedClear(3);
    break;
  case 1:
    halLedClear(1);
    halLedClear(4);
    halLedSet(3);
    break;
  case 2:
    halLedClear(1);
    halLedSet(4);
    halLedClear(3);
    break;
  case 3:
    halLedClear(1);
    halLedSet(4);
    halLedSet(3);
    break; 
  case 4:
    halLedSet(1);
    halLedClear(4);
    halLedClear(3);
    break;
  case 5:
    halLedSet(1);
    halLedClear(4);
    halLedSet(3);
    break;
  case 6:
    halLedSet(1);
    halLedSet(4);
    halLedClear(3);
    break;
  case 7:
    halLedSet(1);
    halLedSet(4);
    halLedSet(3);
    break;
  }
}

这是建立在有"hal_led.h"这个文件的前提下,在使用halLedSet之前,也要有相应的初始化
5.ZigBee从模块收到ZigBee主模块发来的无线数据后,其板上的LED1也闪烁1次,并对收到的数据进行判断,当有火焰时使ZigBee从模块上的LED2闪烁,当无火焰时熄灭ZigBee从模块板上的LED2

  while(1)
  {
      /*接收发送端(ZIGBEE通信模块主机)无线数据实现LED1灯闪烁,根据接收数据控制LED2灯闪烁*/
    if(basicRfPacketIsReady())
    {
      
      halLedSet(1);
      halMcuWaitMs(250);  
      halLedClear(1);    
      
      len = basicRfReceive(rxData,1,NULL);
      if(len != 0)
      {
        if(rxData[0] == '1')
        {
          halLedSet(2); //点亮
          led_flag = 1;//让它为1,就会执行下面if(led_flag == 1)即让灯亮度衰减,然后关闭灯
        }
        else if(rxData[0] == '0')
        {
          halLedClear(2);
          led_flag = 0;
        }
      }
      
      if(led_flag == 1){
        halLedSet(2);
        halMcuWaitMs(250);
        halLedClear(2);
      }
        
    }
    
      /*接收发送端(ZIGBEE通信模块主机)无线数据实现LED1灯闪烁,根据接收数据控制LED2灯闪烁*/
  }

//这也是建立在有"hal_led.c"这个文件的前提下,在使用halLedSet之前,也要有相应的初始化,也需要检查头文件有没有写
在hal_mcu.c中halMcuWaitMs()方法为了能够闪烁

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>