ZigBee 点对点通信和串行通信

 

代码A模块:

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL                25         // 频道 11~26
#define PAN_ID                    0x1111     //网络id 
#define MY_ADDR                   0xAAAA     //本机模块地址
#define SEND_ADDR                 0xBBBB     //发送地址
/**************************************************/

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2

static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   PAN_ID;
    basicRfConfig.channel     =   RF_CHANNEL;
    basicRfConfig.myAddr      =   MY_ADDR;
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}

uint8 count=0;
uint8 buf[3];

void keyScan(){
  if(SW1==0){
    halMcuWaitMs(10);
    if(SW1==0){
      count++;
      buf[1] = count;
      basicRfSendPacket(SEND_ADDR,buf,3);
      LED1 = 1;
      LED2 = 0;     
      while(SW1==0);  //等待松手
      LED1 = 1;
      LED2 = 1; 
    } 
  }
}


/********************MAIN************************/
void main(void)
{
    halBoardInit();//选手不得在此函数内添加代码
    ConfigRf_Init();//选手不得在此函数内添加代码
    
    P1DIR |= 0X03;
    
    buf[0] = 0xFA;
    buf[2] = 0xFB;
    
    while(1)
    {
    /* user code start */
      
      keyScan();  
      
    /* user code end */
    }
}

代码B模块:

#include "hal_defs.h"
#include "hal_cc8051.h"
#include "hal_int.h"
#include "hal_mcu.h"
#include "hal_board.h"
#include "hal_led.h"
#include "hal_rf.h"
#include "basic_rf.h"
#include "hal_uart.h" 
#include "sensor_drv/sensor.h"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
/*****点对点通讯地址设置******/
#define RF_CHANNEL                25         // 频道 11~26
#define PAN_ID                    0x1111     //网络id 
#define MY_ADDR                   0xBBBB     //本机模块地址
#define SEND_ADDR                 0xAAAA     //发送地址
/**************************************************/

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2

static basicRfCfg_t basicRfConfig;
// 无线RF初始化
void ConfigRf_Init(void)
{
    basicRfConfig.panId       =   PAN_ID;
    basicRfConfig.channel     =   RF_CHANNEL;
    basicRfConfig.myAddr      =   MY_ADDR;
    basicRfConfig.ackRequest  =   TRUE;
    while(basicRfInit(&basicRfConfig) == FAILED);
    basicRfReceiveOn();
}

uint8 buf[3];
void receiveData(){
  if(basicRfPacketIsReady()){
    basicRfReceive(buf,3, NULL);
    halUartWrite(buf, 3);
    halLedToggle(1);
  }
}


/********************MAIN************************/
void main(void)
{
    halBoardInit();//选手不得在此函数内添加代码
    ConfigRf_Init();//选手不得在此函数内添加代码
    
    P1DIR |= 0X03;
    halUartInit(115200);
    
    while(1)
    {
    /* user code start */
      receiveData();
      

    /* user code end */
    }
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基本的 Zigbee 点对点通信的代码示例(基于 Zigbee 3.0 标准),使用了 XBee 模块进行通信: ``` #include <XBee.h> XBee xbee = XBee(); uint8_t destAddr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}; // 目标设备的地址 uint8_t payload[] = {'H', 'e', 'l', 'l', 'o'}; // 要发送的数据 void setup() { Serial.begin(9600); } void loop() { // 构造一个 Zigbee Transmit Request 帧 ZBTxRequest tx = ZBTxRequest(destAddr, payload, sizeof(payload)); // 发送数据 xbee.send(tx); // 等待接收数据 XBeeResponse response = xbee.getResponse(); if (response.isAvailable() && response.getApiId() == ZB_RX_RESPONSE) { // 解析 Zigbee Receive Packet 帧 ZBRxResponse rx = ZBRxResponse(response); // 输出接收到的数据 Serial.println("Received data:"); for (int i = 0; i < rx.getDataLength(); i++) { Serial.print((char) rx.getData()[i]); } Serial.println(); } // 等待一段时间再发送下一帧数据 delay(1000); } ``` 此代码使用 `XBee.h` 库来处理 Zigbee 通信。首先,我们定义了目标设备的地址和要发送的数据。然后在 `setup()` 函数中初始化串口,而在 `loop()` 函数中,我们构造了一个 `ZBTxRequest` 对象,用于发送数据。我们调用 `xbee.send()` 方法来发送数据。接下来,我们等待接收数据。当我们从 `xbee.getResponse()` 方法中获得一个可用的响应时,我们检查它是否是一个 `ZBRxResponse` 帧。如果是,我们解析接收到的数据并输出到串口。最后,我们等待一段时间再发送下一帧数据。 请注意,此代码只是一个基本示例。在实际应用中,您可能需要处理更多的错误和异常情况,以及实现更复杂的通信协议。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值