传感网应用开发为了考试(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()方法为了能够闪烁

版权声明:本文为CSDN博主「weixin_50836732」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_50836732/article/details/122135721

生成海报
点赞 0

weixin_50836732

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

Proteus + Keil单片机仿真教程(二)炫彩灯

一、炫彩灯 参考图: 程序分析:每个小灯闪两次,依次累加常亮,最后所有灯再闪烁两次。 这个程序主要是延时程序、单片机引脚口的控制,流程化控制,相对比较简单&#

51单片机实战教程(33 步进电机的驱动与控制)

步进电机虽然同为电机的一种,但不能像直流电机或者交流电机那样按额定电压与电流给线圈通上直流或交流电机就可正常运转。它需要专用的驱动器或驱动电路供电,才可正常工作。每给驱动器一个脉冲信号,电机就转动一定角

用51单片机做宿舍门禁系统(1)--1602显示

由于时间紧迫,还有其他考试,所以目前只能抽时间慢慢做慢慢更新了,本身就是一个练手项目。 1602显示 所谓的智能系统,没有显示是万万不能的,所以有一个显示的东西是很必要的

电机和驱动器的简单介绍

前言 1、电机运动原理 硬件 野火电机开发板系列——F407骄阳开发板硬件资源 野火电机直流有刷电机驱动 ----MOS管搭建板 支持12V~70V的宽电压输入10A过电流保护最高功率支持700W电机电流、电源电压采样编码器接口各项隔离