使用Arduino读取Xbee序列号

使用Arduino读取Xbee序列号,arduino,xbee,Arduino,Xbee,我计划将几个Arduino板连接到同一网络中的XBee系列2无线电,执行相同的操作。他们将数据传输到另一块板,该板将使用蜂窝连接一次性上传所有数据。我想以某种方式唯一地标识每个板。我意识到我可以将序列号硬编码到Arduino板的EEPROM存储器中。然而,对于我正在尝试做的事情来说,这并不能很好地扩展。有没有办法使用Arduino代码读取XBee的序列号,这样我就可以将其与数据一起传输 string serialnumber volatile int IRQcount1; volatile in

我计划将几个Arduino板连接到同一网络中的XBee系列2无线电,执行相同的操作。他们将数据传输到另一块板,该板将使用蜂窝连接一次性上传所有数据。我想以某种方式唯一地标识每个板。我意识到我可以将序列号硬编码到Arduino板的EEPROM存储器中。然而,对于我正在尝试做的事情来说,这并不能很好地扩展。有没有办法使用Arduino代码读取XBee的序列号,这样我就可以将其与数据一起传输

string serialnumber
volatile int IRQcount1;
volatile int IRQcount2;
int pin2 = 2;
int pin3 = 3;
int pin_irq1 = 0; //IRQ that matches to pin 2
int pin_irq2 = 1; //IRQ that matches to pin 3

void setup() {
  Serial.begin (9600);
}

void IRQcounter1() {
  IRQcount1++;
}

void IRQcounter2() {
  IRQcount2++;
}

// I would like some function to get the serial number here

void get_xbee_serial() {
}

void loop() {
  attachInterrupt(pin_irq1, IRQcounter1, RISING);
  attachInterrupt(pin_irq2, IRQcounter2, RISING);
  delay(25);
  detachInterrupt(pin2);
  detachInterrupt(pin3);
  Serial.print(F("Xbee Serial Number = "));
  Serial.print(serialnumber);
  Serial.print(F("     Counter 1 = "));      
  Serial.print(IRQcount1);
  Serial.print(F("     Counter 2 = "));   
  Serial.println(IRQcount2);
}

您可以使用AT命令
ATSH
ATSL
(序列号高/低)检索序列号。您可以进入命令模式,发送这些序列,然后返回,并解析响应

要进入命令模式,您需要等待1秒而不发送任何内容,发送转义序列
++
,然后再等待一秒钟。XBee模块应以
OK\r
响应,表明它已准备好接收命令

发送
ATSH\r
,您应该会得到一个十六进制字符串,表示序列号的前四个字节。对底部四个字节重复使用ATSL\r


并且要知道,如果您使用的目标地址为
0
,XBee模块将自动向您网络上的协调器发送数据。如果协调器在API模式下运行,它可以从接收数据的帧头中检索发送方的64位MAC地址。

谢谢您的简明回答。特别是关于检索MAC地址的部分。我将研究这一点,因为这似乎是我的项目的最佳解决方案。是否有可能购买两台具有相同低序列号的XBee收音机?只是好奇,不太可能。我相信所有基于802.15.4的XBee模块(包括ZigBee和DigiMesh)都有相同的
SH
值。