2017-10-05 40 views
0

读取的Xbee序号我打算有执行相同的操作在同一网络中连接到的XBee系列2个无线电几个Arduino的板。他们将数据传输到另一块电路板,使用蜂窝连接一次上传所有数据。我想以某种方式唯一标识每块电路板。我意识到我可以将一个序列号硬编码到Arduino板的EEPROM存储器中。但是,对于我所要做的事情来说,这不会很好地扩展。有没有办法使用Arduino代码读取XBee的序列号,以便我可以将其与我的数据一起传输?与Arduino的

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); 
} 

回答

1

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

要进入命令行模式,则需要等待1秒不发送任何,发送转义序列+++,然后再等第二。 XBee模块应回复OK\r表示它已准备好接收命令。

发送ATSH\r,你应该得到较前四个字节序列号的十六进制字符串。对于底部的四个字节,重复ATSL\r

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

+0

谢谢你的回答言简意赅。特别是关于检索MAC地址的部分。我会研究它,因为它似乎可能是我的项目的最佳解决方案。 –

+0

是不是有可能,人们可以购买两套的XBee无线电台使用相同的低序列号?只是好奇。 –

+0

不太可能。我相信所有基于802.15.4的XBee模块(包括ZigBee和DigiMesh)都具有相同的SH值。 – tomlogic