Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将API发送帧从协调器发送到终端设备(zigbee和arduino)_Arduino_Xbee - Fatal编程技术网

将API发送帧从协调器发送到终端设备(zigbee和arduino)

将API发送帧从协调器发送到终端设备(zigbee和arduino),arduino,xbee,Arduino,Xbee,嗨,我正在开发一个无线传感器网络,在开始传输之前,每个终端设备都必须接收来自协调器的呼叫。出于测试目的,我正在使用4个Arduino nano 3.0(在最终配置中,我将使用不同的微控制器和M3 cortex cpu)和4个XBee(带有zb固件的xb24-b)。我无法从协调器向所选的终端设备发送消息,同时我成功地完成了从终端设备向协调器发送数据。 这里是在协调器节点上的arduino上运行的代码。终端设备通过USB浏览器直接连接到pc #include <SoftwareSeria

嗨,我正在开发一个无线传感器网络,在开始传输之前,每个终端设备都必须接收来自协调器的呼叫。出于测试目的,我正在使用4个Arduino nano 3.0(在最终配置中,我将使用不同的微控制器和M3 cortex cpu)和4个XBee(带有zb固件的xb24-b)。我无法从协调器向所选的终端设备发送消息,同时我成功地完成了从终端设备向协调器发送数据。 这里是在协调器节点上的arduino上运行的代码。终端设备通过USB浏览器直接连接到pc

   #include <SoftwareSerial.h> 
// creo una porta seriale di tipo software sui pin 2(RX) e 3(TX)
uint8_t rxxbee = 2;
uint8_t txxbee = 3;
SoftwareSerial Serial_xbee(rxxbee,txxbee);


// variable to store the data received
int sensorValue = 0;

// costant values of the frame
const byte startDelimeter = 0x7E;

  // length
const byte MSB_1 = 0x00;
const byte LSB_2 = 0x10;  

  // Frame-specific data
const byte frameType = 0x10;
const byte frameID = 0x0;

  // 64-bit destination address 
const byte MSB_5  = 0x00;
const byte b_6    = 0x13;
const byte b_7    = 0xA2;
const byte b_8    = 0x00;
const byte b_9    = 0x40;
const byte b_10   = 0x86;
const byte b_11   = 0xDB;
const byte LSB_12 = 0xA4;

  // 16-bit destination network address
const byte MSB_13 = 0x0;
const byte LSB_14 = 0x0;

  // broadcast radius
const byte broadcastRadius = 0x0;

  // options
const byte opt = 0x0;


byte spedisci (byte value) {
Serial_xbee.write(value);
Serial.write(value);
return value;
}


void setup()
{
  // starts serial communication
  Serial.begin(9600);
  Serial_xbee.begin(9600);
  pinMode(sensorPin, INPUT);

}

void loop()
{
  // send data through xBee
  spedisci(startDelimeter);
  spedisci(MSB_1);
  spedisci(LSB_2);
  long sum = 0; // accumulate the checksum  
  sum += spedisci(frameType);
  sum += spedisci(frameID);
  sum += spedisci(MSB_5);
  sum += spedisci(b_6);
  sum += spedisci(b_7);
  sum += spedisci(b_8);
  sum += spedisci(b_9);
  sum += spedisci(b_10);
  sum += spedisci(b_11);
  sum += spedisci(LSB_12);
  sum += spedisci(MSB_13);
  sum += spedisci(LSB_14);
  sum += spedisci(broadcastRadius);
  sum += spedisci(opt);
  sum += spedisci(0X10);  // this is the payload[0] byte
  sum += spedisci(0X10);  // this is the payload[1] byte
  spedisci( 0xFF - (sum & 0xFF));
}
#包括
//creo una porta seriale di tipo软件sui引脚2(RX)E3(TX)
uint8_t rxxbee=2;
uint8_t txxbee=3;
软件串行xbee(rxxbee、TXBEE);
//变量来存储接收到的数据
int-sensorValue=0;
//帧的余值
常量字节startDelimeter=0x7E;
//长度
常量字节MSB_1=0x00;
常量字节LSB_2=0x10;
//帧特定数据
常量字节帧类型=0x10;
常量字节帧ID=0x0;
//64位目标地址
常量字节MSB_5=0x00;
常量字节b_6=0x13;
常量字节b_7=0xA2;
常量字节b_8=0x00;
常量字节b_9=0x40;
常量字节b_10=0x86;
常量字节b_11=0xDB;
常量字节LSB_12=0xA4;
//16位目标网络地址
常量字节MSB_13=0x0;
常量字节LSB_14=0x0;
//广播半径
常量字节广播半径=0x0;
//选择权
常量字节opt=0x0;
字节spedisci(字节值){
串行写入(值);
串行写入(值);
返回值;
}
无效设置()
{
//启动串行通信
Serial.begin(9600);
序列号xbee.begin(9600);
引脚模式(传感器引脚,输入);
}
void循环()
{
//通过xBee发送数据
spedisci(startDelimeter);
spedisci(MSB_1);
spedisci(LSB_2);
long sum=0;//累积校验和
sum+=spedisci(帧类型);
sum+=spedisci(frameID);
总和+=spedisci(MSB_5);
sum+=spedisci(b_6);
sum+=spedisci(b_7);
sum+=spedisci(b_8);
sum+=spedisci(b_9);
sum+=spedisci(b_10);
sum+=spedisci(b_11);
sum+=spedisci(LSB_12);
sum+=spedisci(MSB_13);
sum+=spedisci(LSB_14);
总和+=spedisci(半径);
总和+=spedisci(opt);
sum+=spedisci(0X10);//这是有效负载[0]字节
sum+=spedisci(0X10);//这是有效负载[1]字节
spedisci(0xFF-(总和&0xFF));
}
有什么建议吗

谢谢


Ps协调器api固件为21A7;终端设备api固件是29A7

我认为当使用非协调器节点的64位IEEE地址时,需要使用0xFFFE作为16位网络地址。尝试更改代码的此部分:

// 16-bit destination network address
const byte MSB_13 = 0xFF;
const byte LSB_14 = 0xFE;

当你准备离开Arduino平台时,看看这个开源的便携设备,它可以在API模式下与XBee无线电通信。它可以简化许多软件开发。

太棒了,它可以工作!!!!!!!!!我还有两个问题,你知道为什么XCTU不允许我把SM 0作为终端设备吗?(即使无睡眠固件可用?)我查看了一下您的库,但我不是一名软件工程师(只是一名材料工程师,我所有的软件开发知识都是关于科学编程的C/fortran/matlab代码,这是我第一次在库中遇到麻烦)我无法理解这些库是否与maple mini board兼容。是否兼容?如果不想让设备睡眠,请尝试安装路由器固件(23A7?)。我似乎记得Digi将单个路由器/终端设备固件构建拆分为该平台上的独立构建。至于Maple Mini,应该可以将主机库移植到该平台,但非软件工程师可能很难将其安装并运行。