1

I am trying to set the SM (sleep mode) register on the XBee radio. These registers can be set with so called AT Commands, listed from pg. 28 in the XBee/XBee Pro Product Manual.

This can be done using the X-CTU desktop application, either by typing the AT commands in the built-in terminal or by editing the values in a list and then click "Write".

But is it possible to modify these registers on the fly from a sketch running on the Fio?

Bence Kaulics
  • 6,413
  • 12
  • 34
  • 60
Lucy Brennan
  • 593
  • 3
  • 8
  • 11

3 Answers3

2

Yes you can modify this on the fly. Make sure you are sending the necessary characters first with the required timing. The default is +++

After Xbee replies "OK" you can send your AT commands. As Swanand said don't forget the 0x0D at the end

Demetris
  • 265
  • 1
  • 9
  • This is all you need, send Serial.print("+++") to enable AT mode, wait for OK from the Xbee, and you can send the AT commands. To disable the AT mode, you can either wait a few seconds or send Serial.print("ATCN\r"). Never forget to send Carriage Return at the end of the AT commands, the only one that doesn't need CR is the +++ command – Jamiro14 Jun 22 '12 at 09:45
2

There you go.

void setup() {
  // Open serial connection to the xbee specifying the baud rate.
  Serial.begin(9600);

  // Define AT commands to rewrite the config once at startup
  // +++ -> Enters the AT mode
  // ATWR -> Saves the changes, ATAC doesn't work.
  // ATCN -> Exits AT mode
  // See http://widi.lecturer.pens.ac.id/Praktikum/Praktikum%20Mikro/XBee_ZB_ZigBee_AT_Commands.pdf
  const char *atcmds[] = {"+++", "ATNI Node_03\r", "ATWR\r", "ATCN\r"};

  // Write the commands to the xbee
  for(int i = 0;  i < sizeof(atcmds)/sizeof(atcmds[0]); i++){
     Serial.print(atcmds[i]);
     delay(1020);
  }
}
oscros
  • 121
  • 3
1

First of all, I never ever used an Arduino in my life but I have worked on XBee.

Yes, you can configure an XBee module on the fly. XBee accepts AT Commands. So the same commands you send from X-CTU are valid if you connect XBee to microcontroller serial port which is configured properly (in most cases, 9600 baud 8-N-1) and write over it.

Put your command in an array [AT] and write that array to serial port. You are done!

Note: All AT Commands are in ASCII and don't forget to add carriage return at the end (0x0D.)

JRE
  • 71,321
  • 10
  • 107
  • 188
Swanand
  • 3,275
  • 5
  • 30
  • 46
  • The only way I know of sending anything to the radio is Serial.println() or Serial.print(). But all the XBee does is send those commands into the ether. I can hardly believe that it reads the characters passing through and if some of that looks like a command, then it executes that command instead. Please tell me if I misunderstood? Btw: I can't even test the commands with X-CTU because of another problem, described here. – Lucy Brennan Jun 07 '12 at 15:47