zigbee协议学习(一)

函数总结如下:只需要修改SampleApp.c下面的文件,格式如下。

NV  非易失性的
串口是以ascal码进行传输的   ‘0’=0x30
HAL_KEY_SW_1  对应第二个按键
HAL_KEY_SW_6  对应第一个按键
0x1000到0xFFFF这段flash是留给用户用的空间
当进行SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数时候,系统自动肥培了一个ID放在task_id,自己定义时间的ID从task_id是一样的。

#include "OSAL.h"

#include "ZDApp.h"

#include "SampleApp.h"

/* HAL */
#include "hal_led.h"
#include "hal_key.h"
#include "MT_UART.h"
#include "dht11.h"
#include "hal_adc.h"
#include "OSAL_Nv.h"

/*  包括串口头文件  */
#include "hal_uart.h"

/*  串口基本定义    */
#define MY_DEFINE_UART_PORT 0     //自定义串口号(0,1);
#define RX_MAX_LENGTH       20    //接收缓冲区最大值: 20个字节;
uint8   RX_BUFFER[RX_MAX_LENGTH]; //接收缓冲区;
void UartCallBackFunction(uint8 port , uint8 event); //回调函数声明,定义在最后面;

/*   配置串口      */
halUARTCfg_t uartConfig; //定义串口配置结构体变量;
void Uart_Config(void); //函数声明;
void Uart_Config(void)  //函数定义;

  uartConfig.configured            = TRUE;  //允许配置;
  uartConfig.baudRate              = HAL_UART_BR_115200;//波特率;
  uartConfig.flowControl           = FALSE;
  uartConfig.flowControlThreshold  = 64;   //don't care - see uart driver.
  uartConfig.rx.maxBufSize         = 128;  //串口接收缓冲区大小
  uartConfig.tx.maxBufSize         = 128;  //串口发送缓冲区大小
  uartConfig.idleTimeout           = 6;    //don't care - see uart driver.
  uartConfig.intEnable             = TRUE; //使能中断
  uartConfig.callBackFunc          = UartCallBackFunction; //指定回调函数名;
}
//按键事件处理函数声明
void SampleApp_HandleKeys( uint8 shift, uint8 keys );
uint8 sampleapp_id;
void SampleApp_Init( uint8 task_id )
{   
    unsigned char adc_val = 0;
    
    sampleapp_id = task_id;
    
    Uart_Config();
    HalUARTOpen(MY_DEFINE_UART_PORT , &uartConfig); //打开串口
    
    HalAdcInit();
    
    adc_val = HalAdcRead(HAL_ADC_CHANNEL_0  , HAL_ADC_RESOLUTION_8);
    
     RegisterForKeys( task_id ); // 登记所有的按键事件
}
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )//应用层任务处理函数
{
      afIncomingMSGPacket_t *MSGpkt;
      (void)task_id;  // Intentionally unreferenced parameter
unsigned char temp[2],humi[2];
      char r_val;
      if( events & DHT11_EVT )
      {
            //获取温湿度并且发送给电脑;
          
            //获取温湿度
             r_val = dht11_value(temp , humi , DHT11_STRING);
             
             if(r_val == 0)
             {
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  "temp: " , 6);
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  temp , 2);
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  "C\r\n" , 3);
                  
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  "humi: " , 6);
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  humi , 2);
                  HalUARTWrite(MY_DEFINE_UART_PORT ,  "%\r\n" , 3);
             }
             
             osal_start_timerEx( sampleapp_id , DHT11_EVT , 1000 ); //1000ms;
             
             return (events ^ DHT11_EVT);
      }
      
        if ( events & SYS_EVENT_MSG ) //接收系统消息再进行判断
      {
            MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( task_id );
            while ( MSGpkt )
            {
              switch ( MSGpkt->hdr.event )
              {        
                   case KEY_CHANGE://按键事件
                    SampleApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
                   break;
              }

              // Release the memory 
              osal_msg_deallocate( (uint8 *)MSGpkt );

              // Next - if one is available 
              MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( task_id );
            }

            // return unprocessed events 
            return (events ^ SYS_EVENT_MSG);
      }
      
      return 0;
}

unsigned char flag = 0;
void SampleApp_HandleKeys( uint8 shift, uint8 keys ) //按键事件处理函数
{
      (void)shift;  // Intentionally unreferenced parameter
      
      if ( keys & HAL_KEY_SW_6 ) //S1
      {      
            if(flag == 0)
            {
                  flag = 1;
                  
                  //启动事件;
                  osal_start_timerEx( sampleapp_id , DHT11_EVT , 1000 ); //1000ms启动事件;
            }
            else
            {   
                flag = 0;
                
                //关闭事件;
                osal_stop_timerEx( sampleapp_id , DHT11_EVT );
            }
      }
}

static void UartCallBackFunction(uint8 port , uint8 event)//串口回调函数,接收到数据时会调用到该函数;
{
    uint8 RX_Length = 0; //接收到字符串大小;
    
    uint8 r_val;
    uint8 w_val = 24;
    uint8 r_s[3];
    
    RX_Length = Hal_UART_RxBufLen(MY_DEFINE_UART_PORT); //读取接收字符串大小;
    
    if(RX_Length != 0) //有数据存在;
    {
           //读取串口数据;
            HalUARTRead(MY_DEFINE_UART_PORT , RX_BUFFER , RX_Length);

            if(osal_memcmp(RX_BUFFER,"nvinit",6))  
            {
                  //初始化nv指定位置;
                  osal_nv_item_init( 0x1200 , 1 , NULL );
            }
            else if(osal_memcmp(RX_BUFFER,"nvread",6))//判断接受到的数据是否是"nvread",如果是,函数返回TURE  
            {   
                  //读出nv中指定位置的数据;
                  osal_nv_read( 0x1200 , 0 , 1 , &r_val );
              
                   r_s[0] = r_val/10+'0';
                   r_s[1] = r_val%10+'0';
                   r_s[2] = '\n';
                   HalUARTWrite(MY_DEFINE_UART_PORT , r_s , 3);                  
            } 
            else  if(osal_memcmp(RX_BUFFER,"nvwrite",7))//判断接受到的数据是否是"nvwrite",如果是,函数返回TURE  
            {   
                  osal_nv_write( 0x1200 , 0 , 1 , &w_val );
              
                  //往指定的NV位置写入一个数据;
            } 
    }
}

时间: 2024-08-07 20:21:49

zigbee协议学习(一)的相关文章

zigbee协议栈学习(一)

学习协议栈之前我们先讲解一些基本的概念. 分为三块:协调器 路由器 终端设备    1.  ZigBee 协议栈简介   什么是 ZigBee 协议栈呢?它和 ZigBee 协议有什么关系呢?协议是一系列的通信标准,通信 双方需要共同按照这一标准进行正常的数据发射和接收.协议栈是协议的具体实现形式,通 俗点来理解就是协议栈是协议和用户之间的一个接口,开发人员通过使用协议栈来使用这个 协议的,进而实现无线数据收发. 图1展示了 ZigBee 无线网络协议层的架构图.ZigBee 的 协议分为两部分

802.15.4、ZigBee协议

问题描述 802.15.4.ZigBee协议 802.15.4/ZigBee协议中,ZigBee部分包括什么

新ZigBee协议提升物联网设备能效

近日,ZigBee联盟宣布新版ZigBee互联网通讯协定(IP)920IP已完成开发与测试,该标准是全球首个基于互联网通讯协定第6版(IPv6)的无线网格网络(MeshNetworking)解决方案,未来将应用于低耗电量和低成本的家庭能源管理的网格网络及其相关设备中,提升物联网设备的能效和互通性.随着移动互联网络. 智能可穿戴设备的风生水起,业内对于低能耗传感器及芯片等在连通性和兼容性方面有着迫切需求.对此ZigBee联盟推出新协议920IP,旨在回应日本总务省(MIC)指定920MHz用于家庭

关于ZigBee协议的一切都在这篇文章里

在智能硬件和物联网领域,时下大名鼎鼎的ZigBee可谓是无人不知,无人不晓.作为除了wifi.蓝牙之外,ZigBee是目前最重要的无线通信协议之一,主要应用于物联网和智能硬件等领域.关于ZigBee,下文采用问答形式向你详细地介绍了方方面面,不夸口的说,你所需要知道的关于ZigBee的一切,全在这里了! 起源历史篇 ZigBee起源什么技术? 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷.对工业,家庭自动化控制和工业遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近

苹果ANCS协议学习【转】

  苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单.方便的获取ios设备通知信息的方式.   依赖 ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息.   传输注意事项 如果没有特殊说明,通过ANCS传输的数值均使用小端

XMPP学习——3、XMPP协议学习补充

流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XML元素的交换. XML流的开始明确表达为一个打开的 "流头" (即, 一个包含了适当树形和命名空间声明的 XML <stream> 标签), 而这个XML流的结尾明确表达为一个关闭的XML </stream> 标签. 在流的生存期间, 发起方实体可以通过这个流发送不

Http协议学习总结(转)

  因为项目中很多地方都与Http协议有关,零散的了解了一下Http协议,但是没有系统的学习过.   今天根据网上其他同学的整理,加上我的一些经验,我也整理了一份.当做学习记录吧.        一.什么是HTTP协议   HTTP,全名HyperText Transfer Protocol.因特网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.现在对与HTTP协议的应用已经很多了,浏览器上网,下载文件,服务器间通信等.   二.HTTP协议格式

JavaWeb 后端 &lt;一&gt; 之 Tomcat服务器 - Http协议 学习笔记

1.Web开发概述 1.1服务器上的资源分类: a.静态资源:指web页面中供人们浏览的数据始终是不变.html css js 图片 多媒体 b.动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同.JSP/Servlet.php.asp 下面为简单的java程序 模拟服务器提供资源 访问 本地端口1111即可得到服务器的资源 public class Myserver {     public static void main(String[] a

MQTT协议学习笔记

1.前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实.随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制.例如智能家居最近非常火爆,智能插座.智能LED灯.智能摄像头等.在互联网时代,HTTP协议负责建立网络连接,而到了物联网时代,由于智能硬件的差异,相比互联网终端,硬件配置要低的多,而且智能设备的环境也想多复杂,物联网中的数据传输会面临很多问题,比如在网络不稳定的情况下,如果保证数据的传输没有问题,如何保证数据不被重复发送,连接断开后如何进行重连,而HTTP协议由于