XBee USB-C Shield not communicating via Arduino Serial Monitor

Hi Sparkfun, I’ve spent a few hours stuck with getting my XBee modules to work… I am using:

XBee 3 Module - PCB Antenna - qty 3
SparkFun Digi XBee® Arduino Shield - USB-C (Qwiic) - qty 3
SparkFun Digi XBee® Explorer USB-C - qty 3
SparkFun RedBoard - Programmed with Arduino - qty 3

I followed the various Sparkfun guides, and flashed the Xbees back to the RR 802.15.4 TH (2012) firmware. I’ve tried all of the suggested Sparkfun configuration suggestions, including resetting/reflashing the firmware on the modules.

I had no problems getting the Xbee 3 modules to talk to each other using the USB C Explorers. However, when I try to run the “Example: Communication Test” from the XBee Shield Hookup Guide I can’t get get any communication between the Arduino and the XCTU console.

On my USB-C Shield on the RedBoard, I have:
XBee module with the pointy side aligned with the silk screen (pointing away from the USB ports)
UART select switch set to DLINE
3v3 Source set to R3/R4
PWR LED is solidly illuminated
RSSI LED is solidly illuminated
ASC LED is quickly blinking blue (the same frequency the the blue light flashes on my Explorer)
The shield is powered via the RedBoard which is plugged into my computer with a Mini-USB cable

Any suggestions? Thanks.

I should add that I feel like I’m in the same boat as a similar forum poster from a year ago, and it looks like there wasn’t a conclusive end to that thread…

Hi Sparkfun, I believe I have solved this and it is a silkscreen/layout/documentation issue with the SparkFun Digi XBee® Arduino Shield - USB-C (Qwiic). I’m not an electrical engineer, so if I’m wrong, I would appreciate someone (gently) correcting me.

After hours of testing the Xbees, and reflashing the Xbees and desoldering/resoldering the shield, I tried using the UART lines from the Arduino to communicate with the Xbee, and everything worked as expected. At that point I realized that the issue was in the DLINE configuration…

My understanding is that when connecting two devices, the conventional way to label the connections would be:

Arduino    XBee
TXO     ->  RXI
RXI     <-  TXO

However, when I trace the connections on the shield with my multimeter, here is how the shield’s layout has the connections, per the silkscreen:

Shield           XBee
DRX (Pin 2)   >  RXI
DTX (Pin 3)   >  TXO

It looks to me like RX is connected to RX and TX is connected to TX… again I’m not an engineer, but that seems like a contradiction.

This confusing labeling is compounded by the documentation in Sparkfun’s Hookup Guide for the shield, which doesn’t even mention that the shield uses Pins 2 & 3 on the Arduino. I’ve read it a dozen times this week and don’t see it mentioned anywhere in there. Nor does it mention whether 2/3 are RX/TX or TX/RX…

In the Communication Test sample code from the previous version of the shield, software serial is setup as:

SoftwareSerial XBee(2, 3); // RX, TX

However, switching RX and TX with the new shield is what finally got things working as expected:

SoftwareSerial XBee(3, 2); // RX, TX

So in order to get things working, all it took was swapping the RX and TX pins in the software serial code.

So Sparkfun, three suggestions to save your customers time and confusion:

  1. Can you please have an engineer review the layout/silkscreen for this board?
  2. Can you please update the Hookup Guide documentation to point out which Arduino pins the shield uses for TX and RX? (Especially because they’re apparently opposite of the previous version of the shield).
  3. Adding some working sample code to the Hookup Guide would go a long way towards helping people get up and running faster.