Zigbee基础实验(6)—简单通信编程_zigbee基本通信实验

2020-02-29 其他范文 下载本文

Zigbee基础实验(6)—简单通信编程由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“zigbee基本通信实验”。

Zigbee基础实验(6)—简单通信编程

2011-07-25 20:06:19|分类: |字号 订阅

实验中两节点分别充当开关和电灯,通过在开关节点上的操作来控制电灯节点。

源代码: #include #include #include #include #include #include #include “hal_mcu.h” #include “hal_button.h” #include “hal_rf.h” #include “util_lcd.h”

#include “basic_rf.h”

#define RF_CHANNEL25// 信道选择。

// 定义各个参数的值

#define PAN_ID0x2007//网络ID

#define SWITCH_ADDR0x2520//开关节点的地址

#define LIGHT_ADDR0xBEEF//电灯节点的地址

#define APP_PAYLOAD_LENGTH1//负载字节的长度,信息的长度。#define LIGHT_TOGGLE_CMD0//被传送的开关命令。

//节点状态。0为空闲

#define IDLE0

#define SEND_CMD1

// 定义该节点所承担的任务(开关或电灯)

#define NONE0

#define SWITCH1

#define LIGHT2

#define APP_MODES2

static uint8 pTxData[APP_PAYLOAD_LENGTH];//发送数组

static uint8 pRxData[APP_PAYLOAD_LENGTH];//接收数组

static basicRfCfg_t basicRfConfig;

// 模式选择菜单 static menuItem_t pMenuItems[] = {

“Switch”,SWITCH,“Light”,LIGHT

};static menu_t pMenu = {

pMenuItems,N_ITEMS(pMenuItems)

};

static void appLight();//实现电灯功能

static void appSwitch();//实现远程开关功能

static uint8 appSelectMode(void);//功能选择

static void appLight()//实现电灯功能 {

halLcdWriteLine(HAL_LCD_LINE_1, “Light”);

halLcdWriteLine(HAL_LCD_LINE_2, “Ready”);

// 初始化射频模块

basicRfConfig.myAddr = LIGHT_ADDR;//网络地址

if(basicRfInit(&basicRfConfig)==FAILED){

HAL_ASSERT(FALSE);//初始化错误处理

}

basicRfReceiveOn();//打开接收功能。

//死循环

while(TRUE){

while(!basicRfPacketIsReady());

if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0){//如果接收到数据

if(pRxData[0] == LIGHT_TOGGLE_CMD){

halLedToggle(1);//开关改变状态

}

}

}

}

static void appSwitch()//实现远程开关 {

halLcdWriteLine(HAL_LCD_LINE_1, “Switch”);//屏幕输出

halLcdWriteLine(HAL_LCD_LINE_2, “Joystick Push”);

halLcdWriteLine(HAL_LCD_LINE_3, “Send Command”);

pTxData[0] = LIGHT_TOGGLE_CMD;//需要发送的数据

// 初始化

basicRfConfig.myAddr = SWITCH_ADDR;

if(basicRfInit(&basicRfConfig)==FAILED){

HAL_ASSERT(FALSE);//出错处理

}

basicRfReceiveOff();//关闭接收机

// 死循环

while(TRUE){

if(halJoystickPushed()){//当按键按下时触发

basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);//发送命令

}

}

}void main(void)

{

uint8 appMode = NONE;//模式变量

// 设置网络ID和信道

basicRfConfig.panId = PAN_ID;

basicRfConfig.channel = RF_CHANNEL;

basicRfConfig.ackRequest = TRUE;

//初始化其他设备

halBoardInit();

halJoystickInit();

// 初始化射频模块

if(halRfInit()==FAILED){

HAL_ASSERT(FALSE);

}

halLedSet(1);//LED1灯亮,提示节点已上电

utilPrintLogo(“Light Switch”);

// 等待用户按下S1进入菜单

while(halButtonPushed()!=HAL_BUTTON_1);

halMcuWaitMs(350);//延时

halLcdClear();//清屏

// 设置该节点是开关还是电灯

appMode = appSelectMode();

halLcdClear();

// 模块开始工作

if(appMode == SWITCH){

appSwitch();

}

else if(appMode == LIGHT){

appLight();

}

//如果没有定义该节点的功能,则LED灯不断闪烁

HAL_ASSERT(FALSE);

}

static uint8 appSelectMode(void)//模式选择 {

halLcdWriteLine(1, “Device Mode: ”);

return utilMenuSelect(&pMenu);//通过调用头文件实现功能选择

}

实验总结:

这个实验虽然功能非常简单,只是通过按下开关节点的按键来控制电灯节点LED的亮或灭,但是通过这个实验可以了解节点间通信的基本思路。

原代码中有许多可有可无的冗余代码,上面的代码经过代码中很多都是调用头文件,在这里就不在一一罗列,只在代码注释中注明该调用的功能。这些调用都是一些非常简单的操作,写入头文件调用是为了增加代码可读性。

baseRF通信基本流程

1.初始化网络地址,打开接收机或关闭接收机。

2.初始化basicRfConfig,确定网络ID、信道、是否需要应答、是否采用加密机制等。

3.初始化周边设备,如时钟、各个I/O口等。

4.事件的处理,如发送报文或接受报文后的数据处理等。

《Zigbee基础实验(6)—简单通信编程.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Zigbee基础实验(6)—简单通信编程
点击下载文档
相关专题 zigbee基本通信实验 通信 简单 基础 zigbee基本通信实验 通信 简单 基础
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文