Kenny's Blog

22 Mar 2021

Configuring api mode 2 for xbees without x-ctu

When you get XBees from the factory, many of them are configured with api mode = 0, meaning the xbee is operating in transparent mode. If you want to use certain libraries like the xbee-python library from digi to configure, you need to use api mode = 2. You can use X-CTU to do this, but I find it’s much easier to do through the command line… it’s also a relatively simple process.

X-CTU is also not supported on arm architectures, so this might be useful for folks who are managing XBees on raspberry pi’s.

You need to do a couple of things:

  1. enter command mode
  2. issue ATAP to set the escaping mode
  3. write the configuration to the XBee’s non-volatile memory
  4. exit command mode (not really necessary since the device will do this naturally after a while).

Here’s a python script that should do the described:

import serial
ser = serial.Serial('/dev/ttyUSB0')  # open serial port
print(ser.name)         # check which port was really used
ser.write(b'+++')     # write a string
reply =  ser.read_until(b'\r')

# Set api = 2 
reply =  ser.read_until(b'\r')

# Commit the configuration to storage
ser.write(b'ATWR\r')     # write a string
reply =  ser.read_until(b'\r')

# Exit command mode
reply =  ser.read_until(b'\r')

ser.close()             # close port

You should see output like:


Alternatively, there are some modifications you can make to this flow:

  • you can also use ATRE to reset the device to factory settings before changing whatever configuration you need to
  • reboot the xbee device with ATFR so you can check the settings will persist after a reboot