使用 Arduino 读取 Xbee 序列号
Read Xbee serial number with Arduino
我计划将多个 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
检索序列号(序列号high/low)。您可以通过进入命令模式、发送这些序列后跟 return 并解析响应来做到这一点。
要进入命令模式,您需要等待 1 秒而不发送任何内容,发送转义序列 +++
,然后再等待一秒。 XBee 模块应响应 OK\r
,表明它已准备好接收命令。
发送ATSH\r
,您应该会得到一个代表序列号前四个字节的十六进制字符串。对底部四个字节重复 ATSL\r
。
并且知道如果您使用 0
的目标地址,XBee 模块会自动将数据发送到您网络上的协调器。如果协调器运行处于API模式,它可以从接收数据的帧头中检索发送方的64位MAC地址。
我计划将多个 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
检索序列号(序列号high/low)。您可以通过进入命令模式、发送这些序列后跟 return 并解析响应来做到这一点。
要进入命令模式,您需要等待 1 秒而不发送任何内容,发送转义序列 +++
,然后再等待一秒。 XBee 模块应响应 OK\r
,表明它已准备好接收命令。
发送ATSH\r
,您应该会得到一个代表序列号前四个字节的十六进制字符串。对底部四个字节重复 ATSL\r
。
并且知道如果您使用 0
的目标地址,XBee 模块会自动将数据发送到您网络上的协调器。如果协调器运行处于API模式,它可以从接收数据的帧头中检索发送方的64位MAC地址。